Министерство образования Российской Федерации
Санкт-Петербургский Государственный Электротехнический Университет «ЛЭТИ»
Кафедра МОЭВМ
Отчет по лабораторной работе №3 «Реализация разветвлений в эвм пк»
Вариант 3
Выполнили:
студенты гр. 3352
Воронин С.
Сергеев М.
Проверил:
Улитовский В.А.
Санкт-Петербург
2005 г.
Текст задания
Составить программу, сравнивающую переменную с константой и выдающую на терминал одно из двух сообщений. Переменная хранится в одном из POH, а константа описана директивой EQU. Тип переменной должен совпадать с типом константы.
Вариант задания назначается студенту по двум последним цифрам зачетной книжки. Задание содержит тип переменной, ее длину, способ сравнения константы с переменной, исследуемую операцию перехода. Рекомендуется текст программы составить на основе текста LR1.asm так, чтобы иметь небольшие изменения текста. Тестированию подлежат только команды сравнения и перехода, но для всех вариантов флагов, влияющих на переход. Для перебора всех комбинаций флагов следует заранее разработать тестовый набор данных (константы и переменной).Как переменную, так и константу рекомендуется изменять вручную при отладке. При этом команды сравнения и перехода отлаживаются в пошаговом режиме, а все остальные - не отлаживаются. Некоторые комбинации флагов не могут быть достигнуты при корректной комбинации данных и методов сравнения, но могут появиться в некорректных ситуациях. Для таких ситуаций следует:
-
доказать в отчёте невозможность генерации данной комбинации флагов при любых комбинациях данных;
-
применить установку флагов вручную, изменяя значения флагов в регистре флагов.
Индивидуальный вариант
Вариант 4
Операция сравнения CMP
Операция перехода JNE
Тип данных Беззнаковый
Значение данных Символ
Длина байт 1
Описание операции сравнения
CMP приемник, источник
Сравнивает приемник и источник и устанавливает флаги. Сравнение осуществляется путем вычитания источника (число, регистр или переменная) из приемника (регистр или переменная; приемник и источник не могут быть переменными одновременно), причем результат вычитания никуда не записывается, единственным результатом работы этой команды оказывается изменение флагов CF, OF, SF, ZF, AF и PF.
Описание операции перехода
JNE метка
Команда выполняет переход (типа short или near), если состояние флага ZF = 0. При использовании этого оператора после CMP переход происходит, если операнды CMP не равны.
Логическое выражение: NOT (ZF)
Таблица истинности переходов
Переход JNE |
1 |
0 |
ZF |
0 |
1 |
Пример
MOV AX,0
MOV DX,1
CMP AX,DX
JNE mismatch
RET
mismatch:
Тестовый набор исходных данных
Переход JNE |
ZF |
Константа |
Переменная |
0 |
1 |
10 |
10 |
1 |
0 |
10 |
9 |
Текст программы
EOFLine EQU '$' ; Определение символьной константы
const EQU 'c' ; "Конец строки"
; Стек программы
AStack SEGMENT STACK
DW 12 DUP(?) ; Отводится 12 слов памяти
AStack ENDS
; Данные программы
DATA SEGMENT
; Директивы описания данных
m_mess DB 'Peremennaya i constanta sovpadaut$'
mism_mess DB 'Peremennaya i constanta NE sovpadaut$'
varbl DB 'c'
DATA ENDS
; Код программы
CODE SEGMENT
ASSUME CS:CODE, DS:DATA, SS:AStack
; Процедура печати строки
WriteMsg PROC NEAR
mov AH,9
int 21h ; Вызов функции DOS по прерыванию
ret
WriteMsg ENDP
; Головная процедура
Main PROC FAR
push DS ;\ Сохранение адреса начала PSP в стеке
sub AX,AX ; > для последующего восстановления по
push AX ;/ команде ret, завершающей процедуру.
mov AX,DATA ; Загрузка сегментного
mov DS,AX ; регистра данных.
cmp varbl, const
jne mismatch
mov DX, OFFSET m_mess
call WriteMsg
ret
mismatch:
mov DX, OFFSET mism_mess
call WriteMsg
ret
Main ENDP
CODE ENDS
END Main