Логический сдвиг влево (shift left): SHL ⇐ ПредыдущаяСтр 7 из 7
Логический сдвиг вправо (shift right): SHR Например: mov al, 01000111b shl al,1 ;CF=0, al=10001110b mov al, 01000111b shr al,1 ;CF=1, al=00100011b mov bh, 0011100b mov cl,3 shl bh,cl ;CF=1, al=11000000b
Арифметические сдвиги - предназначены для реализации быстрого умножения и деления знаковых чисел на степени двойки. Арифметический сдвиг влево (shift arithmetic left): SAL Арифметический сдвиг вправо (shift arithmetic right): SAR Например: mov ah,10001110b sar ah,1 ;CF=0, al=11000111b mov ah,10001110b sal ah,1 ;CF=1, al=0011100b Примечание. Команда sal при трансляции будет воспринята как shl, так как это разные мнемонические названия одной и той машинной команды. Циклические сдвиги. Особенность циклических сдвигов в том, что "уходящий" бит не теряется, а возвращается в операнд, но с другого конца. Циклический сдвиг влево (shift arithmetic left): ROL Циклический сдвиг вправо (shift arithmetic right): ROR Например: mov ah,11000011b rol ah,1 ;CF=1, al=10000111b mov ah,11100010b ror ah,1 ;CF=0, al=01110001b Задание Задача заключается в вычислении результата выполнения арифметического выражения, в котором некоторые числа постоянны, а другие переменные. Формула вычислений: X = (A * 2 + B * C ) / (D - 3) Приведенная Программа сначала резервирует ячейки памяти под переменные, затем выполняет умножение однобайтовых чисел (A * 2), результат умножения - двухбайтовое число в регистре AX, сохраняется в регистре СХ, далее выполняется умножение однобайтовых чисел (В * С), результат - двухбайтовое число хранится в аккумуляторе AX. После сложения двух сомножителей и вычисления знаменателя (D-3) выполняется деление. Результат присваивается переменной Х. 1. Наберите приведенную программу 1, запишите исходный файл с расширением *.ASM, получите файл с расширением *.EXE. 2. Загрузите программу в отладчик TURBODEBUG (команда TURBODEBUG *.exe). Выполните программу по шагам, команда F7(F8), посмотрите, как она работает, получите результат. 3. Выполните программу с 5 вариантами различных начальных значений переменных A,B,C,D по шагам (см. таблицу 1) и запишите результат выполнения в таблицу 2 (в регистре AL - частное, AH - остаток). Переведите результат в десятичную систему. Таблица 1
;программа 1 ;x =(a*2+b*c)/(d-3) Model small Stack 100h Data A db ? B db ? c db ?;Резервируем память для переменных d db ?; A,B,C,D,X X dw ? Code start: mov ax,@data Mov ds,ax Mov a,3 Mov b,4 Mov c,2 Mov d,5 Mov al,2 Mul a Mov cx,ax Mov al,b Mul c Add ax,cx Mov cl,d Sub cl,3 Div cl Mov x,ax Mov ah,4ch Int 21h End start
4. Наберите приведенную программу 2, запишите исходный файл с расширением *.ASM, получите файл с расширением *.EXE. 5. Загрузите программу в отладчик TURBODEBUG (команда TURBODEBUG *.exe). Выполните программу по шагам, команда F7(F8), посмотрите, как она работает, получите результат. Обратите внимание на флаг CF. 6. Выполните программу с 5 вариантами различных начальных значений регистра al. Переведите результат запишите в таблицу 2 в двоичной и десятичной системе. ;программа 2 Model tiny Stack 100h Code start: Mov ah, 01001101b Shr ah,1 Mov ah, 01001101b Shl ah,1 Mov ah, 01001101b Sar ah,1 Mov ah, 01001101b Ror ah,1 Mov ah, 01001101b Rol ah,1 Mov ax,4c00h Int 21h End start
Контрольные вопросы: 1. Чем отличается выполнение арифметических операций на языке ассемблера от языков высокого уровня? 2. По какому биту регистра флагов можно установить, что предшествующее вычитание привело к отрицательному результату? 3. По какому биту регистра флагов можно установить, что в результат арифметической операции превысил разрядную сетку? 4. В чем особенность выполнения арифметических операций с знаковыми и безнаковыми числами? 5. Назначение команды IMUL и ее основное отличие от команды MUL? 6. В чем особенность битовых команд от других команд языка ассемблера? 7. Как отражается на регистре флагов выполнение логических команд? 8. Опишите схематически работу одну из команд сдвигов? 9. В каком регистре необходимо указывать величину сдвига в команда сдвига? ©2015 arhivinfo.ru Все права принадлежат авторам размещенных материалов.
|