Мегаобучалка Главная | О нас | Обратная связь


Команды двоичной арифметики



2016-09-16 590 Обсуждений (0)
Команды двоичной арифметики 0.00 из 5.00 0 оценок




• команды сложения add и adc; inc; xadd;

• команды вычитания sub и sbb; dec;

• команды умножения mul и imul;

• команды деления div и idiv;

• команда изменения знака neg.

 

Форматы арифметических команд

команда add:

add reg/mem, imm; размер 8/16/32 бита

add reg, reg/mem; размер 8/16/32 бита

add mem/reg, reg; размер 8/16/32 бита

add reg/mem16, imm8; получатель 16 бит, источник 8 бит

add reg/mem32, imm8; получатель 32 бит, источник 8 бит

 

команда adc:

adc reg/mem, imm; размер 8/16/32 бита

adc reg, reg/mem; размер 8/16/32 бита

adc mem/reg, reg; размер 8/16/32 бита

adc reg/mem16, imm8; получатель 16 бит, источник 8 бит

adc reg/mem32, imm8; получатель 32 бит, источник 8 бит

 

команда xadd:

xadd reg/mem, reg; размер 8/16/32 бита

 

команда sub:

sub reg/mem, imm; размер 8/16/32 бита

sub reg, reg/mem; размер 8/16/32 бита

sub mem/reg, reg; размер 8/16/32 бита

sub reg/mem16, imm8; получатель 16 бит, источник 8 бит

sub reg/mem32, imm8; получатель 32 бит, источник 8 бит

 

команда sbb:

sbb reg/mem, imm; размер 8/16/32 бита

sbb reg, reg/mem; размер 8/16/32 бита

sbb mem/reg, reg; размер 8/16/32 бита

sbb reg/mem16, imm8; получатель 16 бит, источник 8 бит

sbb reg/mem32, imm8; получатель 32 бит, источник 8 бит

 

команда imul:

imul reg/mem; размер 8/16/32 бита

imul reg16, imm8; произведение 16 бит

imul reg16, imm16; произведение 16 бит

imul reg32, imm8; произведение 32 бита

imul reg32, imm32; произведение 32 бита

imul reg16, reg/mem16; произведение 16 бит

imul reg32, reg/mem32; произведение 32 бита

imul reg16, reg/mem16, imm8/16; произведение 16 бит

imul reg32, reg/mem32, imm8/32; произведение 32 бит

 

команда mul:

mul reg/mem; размер 8/16/32 бита

команда idiv:

idiv reg/mem; размер 8/16/32 бита

 

команда div:

div reg/mem; размер 8/16/32 бита

 

команда inc:

inc reg/mem; размер 8/16/32 бита

 

команда dec:

dec reg/mem; размер 8/16/32 бита

 

команда neg:

neg reg/mem; размер 8/16/32 бита

Двоично-десятичный формат целых чисел

• упакованный: XXXX XXXX ;

• неупакованный: 0000 XXXX .

Четыре бита XXXX представляют десятичную цифру 0-9.

Все обычные операции над такими числами приводят к неправильным результатам.

Команды десятичной арифметики

1. команда BCD-коррекции после сложения DAA;

Пример: 19h + 1h = 1Ah; после DAA: 20h.

2. команда BCD-коррекции после вычитания DAS;

Пример: 20h - 1h = 1Fh; после DAS: 19h.

3. команда ASCII-коррекции после сложения AAA;

Пример: 05h + 06h = 0Bh; после AAA: 0101h.

4. команда ASCII-коррекции после вычитания AAS;

5. команда ASCII-коррекции после умножения AAM;

Пример: mov AL, 5; mov BL, 5; mul BL; aam; 0019h -> 0205h

6. команда ASCII-коррекции перед делением AAD;

Пример: mov AX, 0205h; mov BL, 5; aad; AX = 19h; div BL; AX = 05h

Арифметические команды воздействуют на следующие флаги

• CF(перенос);

• PF(чётность);

• AX(вспомогательный перенос);

• ZF(нуль);

• SF(знак);

• OF(переполнение).

Ситуация переноса\заема (CF) возникает, когда результат сложения \вычитания не помещается в приёмнике.

Пример:

FF = 11111111 = 255

+FF = 11111111 = 255

--------------------

1FE = 111111110 = 510

 

перенос

PF -> 1, когда результат арифметической операции имеет чётное число 1 в младших 8-ми битах.

Ситуация вспомогательного переноса\заема (AX) возникает при переносе из 3-го бита в 4-й.

Полезна в операциях десятичной арифметике.

ZF -> 1, когда результат арифметической операции 0.

SF -> 1, когда 1 в старшем разряде результата (результат отрицательный).

Ситуация переполнения (OF) возникает, когда результат умножения не помещается в приёмнике.

Пример

Пример c_e_l_l_s_программы, вычисляющей следующее арифметическое выражение:

где X и Y - двойное слово.

CodeSg segment 'CODE'

Assume CS:CodeSg, DS:DataSg, SS:StackSg

Begin: mov AX, DataSg

mov DS, AX;

mov BX, X ; X -> BX ( BX=10=Ah )

mov AX, BX ; X -> AX ( AX=10=Ah )

mul AX ; AX = X^2 ( AX=100=64h )

mov CX, AX ; X^2 -> CX ( CX=100=64h )

mov AX, BX ; X -> AX ( AX=10=Ah )

mov BX, Y ; Y -> BX ( BX=3 )

mul BX ; AX = X*Y ( AX=30=1Eh )

sub AX, 2 ; AX = X*Y - 2 ( AX=28=1Ch )

add AX, CX ; AX = (X*Y - 2) + X^2 ( AX=128=80h )

mov CX, AX ; (X*Y - 2) + X^2 -> CX ( CX=128=80h )

;

inc BX ; Y + 1 ( BX=4 )

mov AX, BX ; (Y+1) -> AX ( AX=4 )

mul AX ; AX = (Y+1)^2 ( AX=16=10h )

mul BX ; AX = (Y+1)^2 * (Y+1) ( AX=64=40h )

mov BX, AX ; (Y+1)^3 -> BX ( BX=64=40h )

;

mov AX, CX ; (X*Y - 2) + X^2 -> AX ( AX=128=80h )

mov DX, 0 ; 0 -> DX ( DX=0 )

div BX ; AX = AX / BX ( AX=2 )

;

neg AX ; -AX ( AX=-2=FFFEh )

;

mov Z, AX ; AX -> Z

;

Mov AX, 4C00h

Int 21h

CodeSg ends

;------------------------------------

DataSg segment 'DATA'

X DW 10

Y DW 3

Z DW ?

DataSg ends

;------------------------------------

StackSg segment stack 'STACK'

Db 256 dup(0)

StackSg ends

;------------------------------------

End begin

Задание

Выполните 5 (пять) упражнений из ниже приведенного списка, выбирая по следующему принципу: пусть номер студента с списке группы N, тогда выполняются упражнения с номерами N, N+1, N+2, N+3, N+4.

Написать программу, вычисляющую Z для заданных X и Y двумя способами (с помощью команд двоичной и двоично-десятичной арифметики).

1. Z = (X^2 + 2*Y - 45) / (X^3);

2. Z = 1 / Y + X^3 - 32;

3. Z = (3 + X/Y) / (X-Y+1);

4. Z = X / (X - Y + X*Y);

5. Z = ( 4 - (X+3)/(Y-1))*(-XY);

6. Z = ((X+1)/Y - 1)*2X;

7. Z = Y*( 2-(Y+1)/X );

8. Z = (XY - 1)/(X+Y);

9. Z = X^3 + Y -1;

10.Z = (XY + 1)/ X^2;

11.Z = (X+Y)/(X-Y);

12.Z = - 1/X^3 + 3;

13.Z = X - Y/X +1;

14.Z = ((X+Y)/Y^2 - 1)*X;

15.Z = (X-Y)/(XY+1);

16.Z = - X/Y+Y^2 +3;

17.Z = Y^2 + XY + X/Y;

18.Z = (1 + X * Y )/2;

19.Z = -(1-Y)/(1+X);

20.Z = -X*(1-XY);

21.Z = Y+X/Y-1;

22.Z = 5/XY+X^3;

23.Z = -X + Y^3 - 1;

24.Z = X^3 / (X-Y);

25.Z = X^3 -2X^2*Y+1;

26.Z = -3X + Y^2 +1;

27.Z = -(X/Y +1)/Y^2;

28.Z = 1+X^2/3Y;

29.Z = Y-X/3+1;

30.Z = (XY)^3 +1/Y.

5 Контрольные вопросы

1. Двоичная форма представления целых чисел.

2. Дополнительный код.

3. Шестнадцатиричная форма представления целых чисел.

4. BCD и ASCII-форматы целых чисел;

5. Как объявляются поля данных размера DB, DW, DD.

6. Структура флагового регистра.

7. Форматы, предназначение и алгоритмы работы арифметических команд целочисленного устройства: add, adc, xadd, sub, sbb, imul, mul, idiv, div, inc, dec, neg; aaa, aas, aam, aad; or, xchg.

 

 

Лабораторная работа №5



2016-09-16 590 Обсуждений (0)
Команды двоичной арифметики 0.00 из 5.00 0 оценок









Обсуждение в статье: Команды двоичной арифметики

Обсуждений еще не было, будьте первым... ↓↓↓

Отправить сообщение

Популярное:
Генезис конфликтологии как науки в древней Греции: Для уяснения предыстории конфликтологии существенное значение имеет обращение к античной...
Как распознать напряжение: Говоря о мышечном напряжении, мы в первую очередь имеем в виду мускулы, прикрепленные к костям ...
Почему двоичная система счисления так распространена?: Каждая цифра должна быть как-то представлена на физическом носителе...



©2015-2024 megaobuchalka.ru Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. (590)

Почему 1285321 студент выбрали МегаОбучалку...

Система поиска информации

Мобильная версия сайта

Удобная навигация

Нет шокирующей рекламы



(0.008 сек.)