Иллюстрированный самоучитель по Assembler


Циклы - часть 10


Более отчетливо разница между числами со знаком и без знака проявляется при использовании арифметических операций, например, операций умножения или деления. Здесь для чисел со знаком и чисел без знака предусмотрены отдельные команды:

mul - команда умножения чисел без знака;


imul - команда умножения чисел со знаком;


div - команда деления чисел без знака;


idiv - команда деления чисел со знаком.

Поясним различия этих команд на формальных примерах.

;Умножение положительных чисел со знаком

mov AL,5    ;Первый сомножитель равен 5

mov BL,7    ;Второй сомножитель равен 7

mul BL         ;AX=0023h=35

mov AL,5    ;Первый сомножитель равен 5

mov BL,7    ;Второй сомножитель равен 7

imul BL        ;AX=0023h=35


Обе команды, mul и imul, дают в данном случае одинаковый результат, так как положительные числа со знаком совпадают с числами без знака. Не так обстоит дело при умножении отрицательных чисел.

;Умножение отрицательных чисел со знаком

mov AL,OFCh     ;Первый сомножитель=252

mov BL,4             ; Второй сомножитель =4

mul BL                  ;AX=03F0h =1008

mov AL,OFCh     ;Первый сомножитель=-4

mov BL,4              ; Второй сомножитель =4

imul BL                 ;AX=FFFO=-16

Здесь действие команд mul и imul над одними и теми же операндами дает разные результаты. В первом примере число без знака FCh, которое интерпретируется, как 252, умножается на 4, давая в результате число без знака 3F0, т.е. 1008. Во втором примере то же число FCh рассматривается, как число со знаком. В этом случае оно составляет -4. Умножение на 4 дает FFF0h, т.е. -16.

 




- Начало -  - Назад -  - Вперед -



Книжный магазин