Отметим также, что результат сложения влияет и на другие флаги. Так, если
результат нулевой, то флаг нуля ZF устанавливается в 1, иначе — в 0. Это относится
и к другим командам арифметических операций.
Для сложения чисел со знаком в процессоре и спользуются также команды
inc, add, adc. Но на самом деле процессор не подозревает о различии между числами
со знаком и без знака. Вместо этого у него есть средство фиксации возникновения
характерных ситуаций, складывающихся в процессе вычислений, например, флаг
переноса CF. Для фиксирования случаев, когда при сложении двух положительных
чисел получается отрицательный результат, или когда два отрицательных
слагаемых дают результат положительный, используется флаг переполнения OF.
Рассмотрим пример сложения однобайтовых чисел:
При сдвиге очередного бита влево или вправо он переходит во флаг CF, при
этом значение предыдущего сдвинутого бита теряется.
Код программы:
Листинг программы:
Turbo Assembler Version 4.1 05/27/20 22:08:43 Page 1
lab5.asm
1
2 0000 code segment
3 assume DS:data
4 0000 begin:
5 0000 B8 0000s mov AX, data
6 0003 8E D8 mov DS,AX
7 0005 33 C0 xor AX,AX
8
9 0007 A1 0000r mov AX,x
10 000A 8B 1E 0002r mov BX,y
11 000E 03 C3 add AX,BX
12 0010 33 DB xor BX,BX
13 0012 BB 0004 mov BX,4h
14 0015 F7 FB idiv BX
15 0017 33 DB xor BX,BX
16 0019 8B 1E 0004r mov BX,z
17 001D 2B C3 sub AX,BX
18 001F B8 4C00 mov AX, 4C00h
19 0022 CD 21 int 21h
20 0024 code ends
21 0000 data segment
22 0000 000F x dw 15
23 0002 000B y dw 11
24 0004 0001 z dw 1
25 0006 data ends
26
27 0000 stk segment stack
28 0000 80*(00) db 128 dup(0)
29 0080 stk ends
30 end begin
Turbo Assembler Version 4.1 05/27/20 22:08:43 Page 2
Symbol Table