
- •Вариант №16 Лабораторная работа 1
- •Контрольные вопросы:
- •1. Какие бывают команды перехода?
- •3. С помощью каких регистров признаков осуществляется каждая из них?
- •4. Каков формат команд перехода, и к какому способу адресации они относятся?
- •5. По каким условиям записывается 1 в каждый из разрядов регистра состояния мп?
- •Лабораторная работа 2
- •Контрольные вопросы:
- •Лабораторная работа 3
- •2. Программа исследования процесса выполнения команд вызова и возврата из подпрограмм, а также команд работы со стеком.
- •Контрольные вопросы:
- •Укажите порядок выполнения команды ret.
- •Сравните процесс выполнения команд call и ret.
- •В какой последовательности сохраняется и извлекается содержимое регистров мп в подпрограмме?
- •Как будет выполняться программа, если вместо команды popf в ней будет записана команда nop?
- •Лабораторная работа 4
- •Контрольные вопросы:
- •На чем основан алгоритм программы деления чисел?
- •Чем отличается программы 1 и 2?
- •Каким образом организуется образование цифры частного в программах 1 и 2?
- •Объясните организацию неявного счетчика в программе 2?
- •Лабораторная работа 5
- •Приведите примеры существующих алгоритмов умножения.
- •На чем основан алгоритм работы программы умножения?
- •Что такое «сдвиг влево», «сдвиг вправо»?
В какой последовательности сохраняется и извлекается содержимое регистров мп в подпрограмме?
Ответ: Сохраняется и извлекается содержимое регистров МП в подпрограмме по принципу: последний зашел, первый вышел (FIFO) (First input, first output).
Как будет выполняться программа, если вместо команды popf в ней будет записана команда nop?
Ответ: POPF – чтение содержимого регистра признаков из стека;
NOP -- отсутствие операции, т.е. МП остановит действия по выполнению программы, до тех пор пока не поступит новая операция для выполнения.
Лабораторная работа 4
Программная реализация деления
целых двоичных чисел
ЦЕЛЬ РАБОТЫ: освоение способов программной реализации деления целых двоичных чисел.
№ вар. |
Делимое |
Делитель |
||
16 |
69 |
6 |
а) с явным счетчиком
cdseg segment 'code'
assume cs:cdseg
org 100h
start:
mov ax,69 ; делимое
dltl equ 6 ; делитель (константа)
mov dx,0 ; chastnoe
mov bx,0 ; ostatok
mov cx,16 ; счётчик
m0:
sal ax,1 ;сдвиг делимого влево
rcl bx,1 ;с переносом старшего бита в остаток
sub bx,dltl ; вычитаем из остатка делитель
jns m1 ; если рез-т отрицательный, то
add bx,dltl ; vosst ostatok
m1:
cmc ;invert cf
rcl dx,1 ; получаем очередной разряд частного
loop m0 ; если деление не закончено, то идём на m0
int 20h
cdseg ends
end start
Частное 11, остаток 3.
б) С неявным счетчиком:
cdseg segment 'code'
assume cs:cdseg
org 100h
start:
mov ax,69 ; delimoe
mov cx,6 ; delitel
mov dx,1 ; chastnoe
mov bx,0 ; ostatok
m0:
sal ax,1 ;сдвиг делимого влево
rcl bx,1 ;с переносом старшего бита в остаток
sub bx,cx ; вычитаем из остатка делитель
jns m1 ; если рез-т отрицательный, то
add bx,cx ; vosst ostatok
m1:
cmc ;invert cf
rcl dx,1 ; получаем очередной разряд частного
jnc m0 ; если деление не закончено, то идём на m0
int 20h
cdseg ends
end start
Частное 11, остаток 3.
Контрольные вопросы:
На чем основан алгоритм программы деления чисел?
Ответ: Процесс деления заключается в многократных сдвигах влево и сложении в дополнительном коде. При организации автоматического процесса деления все операции должны выполнятся явно.
Чем отличается программы 1 и 2?
Ответ: Отличие программ с явным счетчиком (1) и с неявным (2) в том, что назначение регистра СХ в них различно. В первом случае в регистр СХ записывается величина, которую отчитывает счетчик, а во втором случае значение делителя.
Каким образом организуется образование цифры частного в программах 1 и 2?
Ответ: В программах 1,2 разряды частного при делении чисел на машине определяются (начиная со старшего) путем последовательного вычитания делителя из остатка, полученного от предыдущего вычитания. Если остаток после вычитания получается положительный, в разряд частного записывается 1, если отрицательный, то 0. На практике обычно отрицательный остаток не записывается, просто делитель дополнительно сдвигается на один разряд вправо и вычитается из последнего положительного остатка.