
лабораторная работа / лабораторные работы по ASSAMBLER / задание по лабе №6
.doc
Лабораторная работа №6
Флаговый регистр
Девять из 16 битов флагового регистра являются активными и определяют текущее состояние машины и результатов выполнения. Многие арифметические команды и команды сравнения изменяют состояние флагов. Назначение флаговых битов:
Для всех флагов 1- истинно, 0- ложно.
-
Флаг
№ бита
0
1
Назначение
C (Перенос)
0
NC
CY
Содержит перенос из старшего бита, после арифметических операций, а также последний бит при сдвигах или циклических сдвигах.
O (Переполнение)
11
NV
OV
Указывает на переполнение старшего бита при арифметических командах.
D (Направление)
10
Обозначает левое или правое направление пересылки или сравнения строковых данных (данных в памяти превышающих длину одного слова).
I (Прерывание)
9
Указывает на возможность внешних прерываний
T (Пошаговый режим)
8
Обеспечивает возможность работы процессора в пошаговом режиме. На пример, программа DOS DEBUG устанавливает данный флаг так, что возможно пошаговое выполнение каждой команды для проверки изменения содержимого регистров и памяти.
S (Знак)
7
PL
NG
Содержит результирующий знак после арифметических операций (0 - плюс, 1 - минус).
Z (Ноль)
6
NZ
ZR
Показывает результат арифметических операций и операций сравнения (0 - ненулевой, 1 - нулевой результат).
A (Внешний перенос)
4
Содержит перенос из 3-го бита для 8-битных данных, используется для специальных арифметических операций.
P (Контроль четности)
2
Показывает четность младших 8-битовых данных (1 - четное и 0 - нечетное число).
При программировании на ассемблере наиболее часто используются флаги O, S, Z, и C для арифметических операций и операций сравнения, а флаг D для обозначения направления в операциях над строками
Циклический сдвиг влево с переносом
Инструкция ассемблера RCL BL,1 производит сдвиг младшего байта регистра BX влево: переносит значение флага С в младший бит регистра и переносит значение старшего бита BL в флаг С, все остальные биты регистра смещаются на один влево.
Задание 1.
Поместите инструкцию RCL BL,1 по адресу 100, занесите в регистр число B7, выполняйте инструкцию циклического сдвига, каждый раз записывая значения флага С и содержимого BL в шестнадцатеричном и двоичном формате в таблицу до восстановления исходного значения регистра.
С |
Значения битов регистра BL |
BL |
|||||||
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
Сложение с использованием флага переноса.
Инструкция ассемблера ADC AX,<слагаемое> складывает значения AX, слагаемого (значения регистра или напрямую указанного числа) и бит флага переноса. Результат помещается в AX.
Задание 2.
Напишите инструкции, выполнение которых приведет к выводу на экран значения бита переноса в виде цифры (символы 0 и 1, соответствующие коды 30h и 31h).
Оператор цикла
Инструкция ассемблера LOOP <смещение> позволяет организовать циклическое исполнение инструкций, расположенных начиная со значения <смещение> до этой инструкции. В регистре CX определяется количество повторений, каждое выполнение инструкции LOOP уменьшает значение CX на 1.
Задание 3
Напишите программу, которая выводит на экран в двоичном представлении число, записанное в регистре BL.
Задание 4.
Используя операцию вычитания, проанализируйте изменение значения флага Z в зависимости от равенства 0 результата операции.
Проанализируйте изменение значения флага S в зависимости от знака результата операции вычитания.
Используя операцию сложения, проанализируйте изменение значения флага O в зависимости от того, привела ли операция к переполнению (несоответствующему изменению знакового флага S)
Операции условных переходов
Условный переход по значению Z:
JZ <смещение> - если результат последней арифметической операции – 0- переход по адресу <смещение>. В противном случае выполняется следующая операция.
JNZ <смещение> - - переход по адресу в случа, если результат последней операции – не ноль
Задание 5.
Составьте программу обнуления регистра AX, в котором исходно записано некоторое число.
Операция сравнения
CMP AX,BX - результатом сравнения являются значения флагов, значения регистров не изменяются
Задание 6.
Проанализируйте изменения флагов при сравнении разных чисел и составьте таблицу:
AX |
BX |
Флаги-значения |
|
|
|
Инструкция условного перехода
JL <смещение> Переход, если меньше. Эта инструкция выполняет переход по <адресу>, если в результате выполнения предшествующей инструкции CMP первый операнд этой инструкции меньше, чем второй.
Задание 7.
Составьте блок-схему и напишите на ассемблере программу, которая берет одну цифру младшего разряда из регистра BL (в BX записано число Аh) и выводит ее на экран (в шестнадцатеричном представлении).
Перешлите блок-схему и файл программы в качестве отчета.
Инструкция сдвига вправо
SHR DL,CL DL-это младший байт регистра DX, сдвиг вправо в котором нужно выполнить. CL- это счетчик сдвига. В этом регистре указано число бит, на который производится сдвиг в регистре DL
Задание 8.
Занесите в регистр DX число 72h
Проанализируйте результат выполнения оператора SHR DL,CL при значениях в регистре CL равных 1, 2,4, представьте результат в виде таблицы.
CL=
№ выполнения сдвига |
Биты DL |
Флаг C |
|||||||
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Какой сдвиг нужно выполнить, чтобы перевести цифру старшего разряда числа 72h в позицию младшего разряда? Какая цифра будет при этом записана в старшем разряде числа BL?
Логика
AND <регистр>,<операнд>.Операция выполняет побитовое логическое сложение операндов и заносит результат в регистр.
Каким будет результат логического сложения числа 0Fh и каким-либо двузначным числом?
Задание 9.
Составьте программу, которая выводит на экран двузначное число из регистра BL, записанное в шестнадцатеричном формате.