- •354000 «Прикладная информатика»
- •Idiv Деление целых знаковых чисел
- •Imul Умножение целых знаковых чисел
- •In Ввод из порта
- •Inc Инкремент (увеличение на 1)
- •Int Программное прерывание
- •I into Прерывание по переполнению
- •Iret Возврат из программы обработки прерывания
- •Xchg Обмен данными между операндами
- •Xlat Табличная трансляция
- •Xor Логическое исключающее или
- •Загрузка и выполнение программ
- •Составление программы на языке Assembler и её размещение в памяти компьютера. Стандартное распределение памяти под программные сегменты.
- •Оператор Текст
- •Имя Операнд_1 ;
- •Имя Операнд_1
- •Загрузка и выполнение программ
- •Mov dl,10 ;Позиция X
- •In Считать данные из порта.
- •Исследование команд, выполняемых процессором. Программирование операций с помощью отладчика языка Assembler..
- •Исследование операций с памятью компьютера. Программирование на языка Assembler в операционной системе ms-dos. Обычная память
- •Косвенная адресация
- •Адресация по базе со сдвигом
- •Косвенная адресация с масштабированием
- •Адресация по базе с индексированием
- •Программирование прерываний на языке Assembler в операционной системе ms-dos.
- •Исследование механизмов работа с видеопамятью персонального компьютера типа ibm. Тестирование и отладка ассемблерных программ.
Исследование команд, выполняемых процессором. Программирование операций с помощью отладчика языка 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
В качестве операндов можно указывать регистр (кроме сегментного) или ячейку памяти, а в качестве второго операнда еще и непосредственное значение, однако не допускается определять оба операнда одновременно как ячейки памяти. Операнды могут быть байтами или словами и представлять числа со знаком или без знака.
Найти сумму двух заведомо известных шестнадцатеричных чисел.
а) 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.