Команды двоичной арифметики
• команды сложения 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
Популярное: Генезис конфликтологии как науки в древней Греции: Для уяснения предыстории конфликтологии существенное значение имеет обращение к античной... Как распознать напряжение: Говоря о мышечном напряжении, мы в первую очередь имеем в виду мускулы, прикрепленные к костям ... Почему двоичная система счисления так распространена?: Каждая цифра должна быть как-то представлена на физическом носителе... ©2015-2024 megaobuchalka.ru Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. (590)
|
Почему 1285321 студент выбрали МегаОбучалку... Система поиска информации Мобильная версия сайта Удобная навигация Нет шокирующей рекламы |