Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Lectures / 10-11

.pdf
Скачиваний:
45
Добавлен:
16.04.2013
Размер:
164.26 Кб
Скачать

Организация ЭВМ и систем

Лекция 10-11

Арифметические и логические команды

Описание целых двоичных чисел

adb 11h

bdw 1122h ; в памяти 22 11

cdd 11223344h ; 44 33 22 11

Сложение двоичных чисел без знака

254 + 5 = 259

 

+

1111 1110

 

 

 

0000

0101

 

 

 

-----------

 

CF =

1

1

0000

0011

Команды:

 

 

 

inc оп

оп = оп+1

add оп1,оп2

оп1=оп1+оп2

adc оп1,оп2

оп1=оп1+оп2+CF

 

 

Сложение длинных чисел без знака

a1

dd

131071

; 1FFFFh

a2

dd

2

; 2h

sum dd

0

 

……………………………………

mov AX, word ptr a1 add AX, word ptr a2 mov word ptr sum, AX mov AX, word ptr a1+2 adc AX, word ptr a2+2 mov word ptr sum+2, AX

0 0 0 1 F F F F

0 0 0 0 0 0 0 2

0 0 0 2 0 0 0 1

CF

01

Сложение двоичных чисел со знаком

12001111000

+4 + 00000100

-----------

124 01111100

Переносов нет (6, 7

 

 

OF = 0

разряды), результат

 

 

 

CF = 0

верный

 

 

 

 

 

 

-120

 

10001000

 

 

+- 10

 

+ 11110110

 

 

---

 

--------

 

 

-130

 

1 01111110

 

 

 

 

 

 

 

 

Перенос из знакового OF = 1

разряда, результат

 

CF = 1

неверный

 

120

 

01111000

+120

 

+ 01111000

---

 

--------

240

 

11110000

 

 

 

Перенос из старшего

 

 

OF = 1

разряда, результат

 

 

 

 

 

 

CF = 0

неверный

 

 

 

 

 

 

-10

11110110

 

 

+-10 + 11110110

--- --------

-20 1 11101100

Перенос из старшего и OF = 0 знакового разрядов, CF = 1 результат верный

Вычитание двоичных чисел без знака

05 - 10 =

 

0000 0101

 

 

- 0000

1010

 

 

-----------

 

CF = 1

1111

1011

Если CF=1, то результат получается в дополнительном коде

Команды:

 

 

 

dec оп

оп = оп-1

sub оп1,оп2

оп1=оп1-оп2

sbb оп1,оп2

оп1=оп1-оп2-CF

 

 

Вычитание чисел без знака: Пример

……………..

mov sub jnc jmp

ok: …… exit: …..

ax,5

ax,10

ok neg ax

; результат неверный

exit

; результат верный

Вычитание двоичных чисел со знаком

45

 

 

 

 

 

0010

1101

(+45)

-(-127)

 

+ 0111

1111

(+127)

---

 

---------

 

172

 

1010

1100= -84

Результат неверный. Переполнение

(-45)

 

 

 

 

-

1101 0011

-(+45)

 

1101

0011

---

 

1

---------

-90

 

1010

0110

OF = 1

OF = 0

Результат верный

Умножение двоичных чисел без знака

mul сомножитель2

Сомножи-

Сомножи-

Результат

тель2

тель1

(reg/mem)

(неявный)

 

 

 

 

Байт

al

ax

(ah - старшая часть)

 

 

 

 

 

Слово

ax

dx:ax

 

 

(dx - старшая часть)

 

 

 

Двойное

eax

edx:eax

слово

(edx-старшая часть)

 

 

 

 

Умножение чисел без знака: 25*45

……

 

 

 

 

res

label word

resl

db

45

 

 

resh db

0

 

 

……

 

 

mov res,ax

 

mov al,25

 

 

 

 

 

 

mul

resl

 

 

 

jnc

m1

; если нет переполнения

mov resh,ah ; старшая часть - в resh m1: mov resl,al

……

Соседние файлы в папке Lectures