Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
2012 ЛР Ассемблер Архитектура ВС 6 семестр.doc
Скачиваний:
7
Добавлен:
03.05.2019
Размер:
454.66 Кб
Скачать

Исследование команд, выполняемых процессором. Программирование операций с помощью отладчика языка Assembler..

ADC целочисленное деление с переносом.

Команда осуществляет сложение первого и второго операндов, прибавляя к результату значение флага переноса CF. Исходное значение первого операнда (приемника) теряется, замещаясь результатом сложения. Второй операнд не изменяется. В качестве операндов можно указать регистр (кроме сегментного) или ячейку памяти, а в качестве второго операнда еще и непосредственное значение, однако не допускается определять оба операнда одновременно как ячейки памяти. Операнды могут быть байтами или словами и представлять числа со знаком или без знака.

ADD Целочисленное сложение.

Команда осуществляет сложение первого и второго операндов. Исходное значение первого операнда (приемника) теряется, замещаясь результатом сложения. Второй операнд не изменяется. В качестве операндов можно указывать регистр (кроме сегментного) или ячейку памяти, а в качестве второго операнда еще и непосредственное значение, однако не допускается определять оба операнда в качестве ячейки памяти одновременно. Операнды могут быть байтами или словами и представлять числа со знаком или без знака.

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

Команда MUL выполняет умножение целого беззнакового числа, находяще­гося в регистре AL (в случае умножения на байт) или АХ (в случае умножения на слово), на операнд-источник (целое число без знака). Размер произведения в два раза больше размера сомножителей.

Для однобайтовых операций один из сомножителей помещается в регистр AL; после выполнения операции произведение записывается в регистр АХ.

Для двухбайтовых операций один из сомножителей помещается в регистр АХ; после выполнения операции произведение записывается в регистры DX:AX (в DX - старшая часть, в АХ - младшая).

В качестве операнда-сомножителя можно указывать регистр данных или ячейку памяти; не допускается умножение на непосредственное значение.

RCL Циклический сдвиг влево через бит переноса

Команда RCL осуществляет сдвиг влево всех бит операнда. Если команда за­писана в формате

RCL операнд,1

выполняется сдвиг на 1 бит. В младший бит операнда заносится значение флага CF; старший бит операнда загружается в CF. Если команда записана в формате

RCL операнд,CL

сдвиг осуществляется на число бит, указанное в регистре-счетчике CL, при этом в процессе последовательных сдвигов старшие биты операнда поступают сначала в CF, а оттуда - в младшие биты операнда.

В качестве операнда можно указывать любой регистр (кроме сегментного) или ячейку памяти размером как в байт, так и в слово. В качестве операнда нель­зя использовать непосредственное значение.

RCR Циклический сдвиг вправо через бит переноса

Команда RCR осуществляет сдвиг вправо всех бит операнда. Если команда записана в формате

RCR операнд,1

сдвиг осуществляется на 1 бит. В старший бит операнда заносится значение фла­га CF; младший бит операнда загружается в CF. Если команда записана в форма­те

RCL операнд,CL

сдвиг осуществляется на число бит, указанное в регистре-счетчике CL, при этом в процессе последовательных сдвигов младшие биты операнда поступают снача­ла в CF, а оттуда - в старшие биты операнда.

В качестве операнда можно указывать любой регистр (кроме сегментного) или ячейку памяти размером как в байт, так и в слово. В качестве операнда нель­зя использовать непосредственное значение.

ROL Циклический сдвиг влево

Команда ROL осуществляет сдвиг влево всех бит операнда. Если команда за­писана в формате

ROL операнд,1

сдвиг осуществляется на 1 бит. Старший бит операнда загружается в его млад­ший разряд. Если команда записана в формате

ROL операнд,CL

сдвиг осуществляется на число бит, указанное в регистре-счетчике CL, при этом в процессе последовательных сдвигов старшие биты операнда перемещаются в его младшие разряды.

В качестве операнда можно указывать любой регистр (кроме сегментного) или ячейку памяти размером как в байт, так и в слово. Не допускается использо­вать в качестве операнда непосредственное значение.

ROR Циклический сдвиг вправо

Команда ROR осуществляет циклический сдвиг вправо всех бит операнда. Если команда записана в формате

ROR операнд, 1

сдвиг осуществляется на 1 бит. Младший бит операнда записывается в его стар­ший разряд. Если команда записана в формате

ROR операнд,CL

сдвиг осуществляется на число бит, указанное в регистре-счетчике CL, при этом в процессе последовательных сдвигов младшие биты операнда перемещаются в его старшие разряды.

В качестве операнда можно указывать любой регистр (кроме сегментного) или ячейку памяти размером как в байт, так и в слово. Нельзя использовать в ка­честве операнда непосредственное значение.

SAL Арифметический сдвиг влево

Команда SAL осуществляет сдвиг влево всех битов операнда. Старший бит операнда поступает в флаг CF. Если команда имеет форму

SAL операнд,1

сдвиг осуществляется на 1 бит. В младший бит операнда загружается 0. Если ко­манда записана в формате

SAL операнд,CL

сдвиг осуществляется на число битов, указанное в регистре-счетчике CL, при этом в процессе последовательных сдвигов старшие биты операнда, пройдя через флаг CF, теряются, а младшие заполняются нулями.

В качестве операнда можно указывать любой регистр (кроме сегментного) или ячейку памяти размером как в байт, так и в слово. Нельзя использовать в ка­честве операнда непосредственное значение.

Каждый сдвиг влево эквивалентен умножению знакового числа на 2, поэтому команду SAL удобно использовать для возведения операнда в степень 2.

SAR Арифметический сдвиг вправо

Команда SAR осуществляет сдвиг вправо всех битов операнда. Младший бит операнда поступает в флаг CF. Если команда записана в формате

SAR операнд,1

сдвиг осуществляется на 1 бит. Старший бит операнда сохраняет свое значение. Если команда записана в формате

SAR операнд,CL

сдвиг осуществляется на число бит, указанное в регистре-счетчике CL, при этом в процессе последовательных сдвигов младшие биты операнда, пройдя через флаг CF, теряются, а старший бит расширяется вправо.

В качестве операнда можно указывать любой регистр (кроме сегментного) или ячейку памяти размером как в байт, так и в слово. Нельзя использовать в ка­честве операнда непосредственное значение.

Каждый сдвиг вправо эквивалентен делению знакового числа на 2, поэтому команду SAR удобно использовать для деления операнда на целые степени 2.

SHL Логический сдвиг влево

Команда SHL выполняет те же действия, что и SAL.

SHR Логический сдвиг вправо

Команда SHR осуществляет сдвиг вправо всех бит операнда. Младший бит операнда поступает в флаг CF. Если команда имеет форму

SHR операнд,1

сдвиг осуществляется на 1 бит. В старший бит операнда загружается 0, а млад­ший теряется. Если команда имеет форму

SHR операнд,CL

сдвиг осуществляется на число бит, указанное в регистре-счетчике CL, при этом в процессе последовательных сдвигов старшие биты операнда заполняются ну­лями, а младшие, пройдя через флаг CF, теряются.

В качестве операнда можно указывать любой регистр (кроме сегментного) или ячейку памяти размером как в байт, так и в слово. Нельзя использовать в ка­честве операнда непосредственное значение.

SUB Вычитание целых чисел

Команда SUB вычитает второй операнд (источник) из первого (приемника) и помещает результат на место первого операнда. Исходное значение первого операнда (уменьшаемое) теряется. Таким образом, если команду вычитания записать в общем виде

sub операнд_1, операнд_2

то ее действие можно условно изобразить следующим образом:

о леранд_1 - операнд_2 операнд_1

В качестве операндов можно указывать регистр (кроме сегментного) или ячейку памяти, в качестве второго операнда еще и непосредственное значение, однако не допускается определять оба операнда одновременно как ячейки памя­ти. Операнды могут быть байтами или словами и представлять числа со знаком или без знака.

SBB Целочисленное вычитание с займом

Команда SBB вычитает второй операнд (источник) из первого (приемника). Результат замещает первый операнд, предыдущее значение которого теряется. Если установлен флаг CF, из результата вычитается еще 1. Таким образом, если команду вычитания записать в общем виде

sbb операнд_1, операнд_2

то ее действие можно условно изобразить следующим образом:

о перанд_1 - операнд_2 - CF операнд_ 1

В качестве операндов можно указывать регистр (кроме сегментного) или ячейку памяти, а в качестве второго операнда еще и непосредственное значение, однако не допускается определять оба операнда одновременно как ячейки памя­ти. Операнды могут быть байтами или словами и представлять числа со знаком или без знака.

  1. Найти сумму двух заведомо известных шестнадцатеричных чисел.

а) 50h и 12h;

Программа – решение:

;add.asm

.model tiny ;код, данные и стек размещаются в одном и ;том же сегменте размером до 64 Кб

.code ;имя сегмента

.286

org 100h ;высвобождение 100h байтов

start:

mov ah,12h

mov al,50h

add al,ah ;складывает источник с приемником и сумму ;помещает в приемник

mov dh,al

and dh,0fh ;логическое И,в DH-младшие 4 бита

shr al, 4 ;в AL-старшие

call m2 ;вывести старшую цифру

mov al,dh ; в AL-младшие 4 бита

m2: cmp al,10 ;Три команды, переводящие в AL

sbb al,69h ;в соответствующий ASCII-код

das

mov dl,al ;в DL помещаем код символа

mov ah,2 ;номер в AH

int 21h

ret

end start

Варианты заданий:

1. Найти произведение двух заведомо известных шестнадцатеричных чисел.

а) 50h и 12h;

б) 10h и 8h.

2. Найти разность двух заведомо известных шестнадцатеричных чисел.

а) 50h и 12h

б) 20h и 6h

3. Произвести операцию циклического сдвига влево через флаг переноса на 2 бита над числами:

а) 00001111b

б) 01001101b

4. Произвести операцию циклического сдвига вправо через флаг переноса на 3 бита над числами:

а) 00001111b

б) 00110011b

5. Произвести операцию циклического сдвига влево на 2 бита над числами:

а) 00111011b

б) 00001111b

6. Произвести операцию циклического сдвига вправо на 3 бита над числами:

а) 00111011b

б) 00001111b

7. Произвести операцию арифметического сдвига влево на 2 бита над числами:

а) 00100101b

б) 00001111b

8. Произвести операцию арифметического сдвига вправо на 3 бита над числами:

а) 00111011b

б) 00001111b

9. Произвести операцию логического сдвига вправо на 3 бита над числами:

а) 01001011b

б) 00001111b

10. Произвести операцию логического сдвига влево на 2 бита над числами:

а) 00111011b

б) 00001111b

Лабораторная работа №3.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]