
- •Вариант №16 Лабораторная работа 1
- •Контрольные вопросы:
- •1. Какие бывают команды перехода?
- •3. С помощью каких регистров признаков осуществляется каждая из них?
- •4. Каков формат команд перехода, и к какому способу адресации они относятся?
- •5. По каким условиям записывается 1 в каждый из разрядов регистра состояния мп?
- •Лабораторная работа 2
- •Контрольные вопросы:
- •Лабораторная работа 3
- •2. Программа исследования процесса выполнения команд вызова и возврата из подпрограмм, а также команд работы со стеком.
- •Контрольные вопросы:
- •Укажите порядок выполнения команды ret.
- •Сравните процесс выполнения команд call и ret.
- •В какой последовательности сохраняется и извлекается содержимое регистров мп в подпрограмме?
- •Как будет выполняться программа, если вместо команды popf в ней будет записана команда nop?
- •Лабораторная работа 4
- •Контрольные вопросы:
- •На чем основан алгоритм программы деления чисел?
- •Чем отличается программы 1 и 2?
- •Каким образом организуется образование цифры частного в программах 1 и 2?
- •Объясните организацию неявного счетчика в программе 2?
- •Лабораторная работа 5
- •Приведите примеры существующих алгоритмов умножения.
- •На чем основан алгоритм работы программы умножения?
- •Что такое «сдвиг влево», «сдвиг вправо»?
Вариант №16 Лабораторная работа 1
Организация условных переходов
Из имеющегося массива чисел осуществить выборку тех, которые имеют четное число единиц.
№ вар. |
Исходный массив |
16 |
162,163,164,165,166,167,168,169,170,171 |
Программа:
cdseg segment 'code'
assume cs:cdseg
org 100h
start:
mov cx,(offset dest)-(offset source)
mov si,offset source
mov di,offset dest
m1: mov al,0 ;обнулим ax
add al,[si] ;добавим к al байт по смещению [si]
jnp m3 ;если флаг паритета сброшен, то прыгаем на m3
stosb ;иначе сохраняем al в память по смещению [di]
m3:inc si ; увеличим si, чтобы он указывал на следующий байт
loop m1,
int 20h
;data
source db 162,163,164,165,166,167,168,169,170,171
dest db (offset dest)-(offset source) dup (0)
cdseg ends
end start
Результат:
Числа 163,165,166,169,170
Контрольные вопросы:
1. Какие бывают команды перехода?
Ответ: Команды переходов:
Безусловный переход (Jmp);
Условный переход (Jnnn) (символы nnn мнемонического кода зависят от проверяемого условия). Условные переходы бывают без учета и с учетом знака.
2. Перечислите команды условных переходов.
Ответ:
Без учета знака:
Ja/jnbe – переход, если выше (не ниже и не равно) Z,C
Jae/jnb/jnc – переход, если C=0: выше или равно (не ниже) C
Jb/jnae/jc – переход, если C=1: ниже (не выше и не равно) C
Jbe/jna – переход, если ниже или равно (не выше) A,C
Je/jz – переход, если равно (нуль): Z=1 Z
Jne/jnz – переход, если не равно (не нуль): Z=0 Z
Jp/jpe – переход, если четность: Р=1 P
Jnp/jpo – переход, если нечетность: Р=0 P
C учетом знака:
Jg/jnle – переход, если больше (не меньше и не равно) Z,S,O
Jge/jnl – переход, если больше или равно (не меньше) S,O
Jl/jnge – переход, если меньше (не больше и не равно) S,O
Jle/jng – переход, если меньше или равно (не больше) Z,S,O
Js – переход, если отрицательно: S=1 S
Jns – переход, если положительно: S=0 S
Jo – переход, если переполнение: O=1 O
Jno – переход, если нет переполнения: O=0 O
3. С помощью каких регистров признаков осуществляется каждая из них?
Ответ: Смотрите ответ на предыдущий вопрос.
4. Каков формат команд перехода, и к какому способу адресации они относятся?
Ответ: Формат команд:
Код Операнд
<метка> jmp(jnnn) r, m
В команде может использоваться либо прямая, либо косвенная адресация. При прямой в качестве операнда указывается метка, которому передается управление. При косвенной адресации операнд должен указать либо на регистр, в котором хранится смещение на оператор внутри сегмента, либо на участок памяти, где хранится адрес передачи управления.
5. По каким условиям записывается 1 в каждый из разрядов регистра состояния мп?
Ответ:
Флаг Назначение
O (Переполнение) Указывает на переполнение старшего бита (О=1) при арифметических командах.
D (Направление) Обозначает левое (D=1) или правое (D=0) направление пересылки или сравнения строковых данных.
I (Прерывание) Указывает на возможность внешних прерываний (I=1).
T (Пошаговый режим) Обеспечивает возможность работы процессора в пошаговом режиме (T=1).
S (Знак) Содержит результирующий знак при арифметических операциях (0 - плюс, 1 - минус).
Z (Ноль) Показывает результат арифметических операций и операций сравнения (0 - ненулевой, 1 - нулевой результат).
A (Внешний перенос) Содержит перенос из 3-го бита (А=1) для 8-битовых данных, используется для специальных арифметических операций.
P (Контроль четности) Показывает четность младших 8-битовых данных (1 - четное, 0 - нечетное число).
C (Перенос) Содержит перенос из старшего бита (С=1) после арифметических операций, а также последний бит при сдвигах или циклических сдвигах.