Меняя команду JMP 8414h, расположенную по адресу 840Сh, на последовательность команд NOP, NOP, NOP и команду JNZ 840Fh, расположенную по адресу 8406h на команды, представленные в Табл.4., получен следующий результат:
Табл.4. Результат выполнения программы в зависимости от команд по адресам 8406h и 840Ch.
Содержимое ячейки 8600h |
Команда по адресу 8406h |
Содержимое ячейки 8601h (JMP есть) |
Содержимое ячейки 8415h (JMP есть) |
Содержимое ячейки 8601h (JMP нет) |
Содержимое ячейки 8415h (JMP нет) |
FFh F7h FFh F7h FFh F7h |
JZ 840Fh JZ 840Fh JPO 840Fh JPO 840Fh JPE 840Fh JPE 840Fh |
0Fh не менялось не менялось 0Fh 0Fh не менялось |
не менялось 33h 33h не менялось не менялось 33h |
0Fh не менялось не менялось 0Fh 0Fh не менялось |
33h 33h 33h 33h 33h 33h |
При выполнении программы в пошаговом режиме были отслежены изменения содержимого программно-доступных регистров A, H, L и ячеек памяти 8601h и 8415h.
3. Исследование программы записи в ячейку памяти числа по результату сложения/вычитания двух чисел.
Листинг программы представлен ниже:
Адрес |
Код |
Мнемокод |
Примечание |
8400h 8401h 8402h 8403h 8404h 8405h 8406h 8407h 8408h 8409h 840Ah 840Bh 840Ch 840Dh 840Eh 840Fh 8410h 8411h 8412h 8413h 8414h |
21h 00h 86h 3Eh ACh 86h D2h 0Fh 84h 23h 36h 0Fh C3h 14h 84h 3Eh 33h 32h 15h 84h E7h |
LXI 00h 86h MVI A ACh ADD M JNC 0Fh 84h INX H MVI M 0Fh JMP 14h 84h MVI A 33h STA 15h 84h RST 4 |
Запись в регистровую пару HL числа 8600h Записать в аккумулятор число ACh Сложение с памятью Переход на адрес 850Fh, если не было переполнения. Инкремент пары HL Записать число 0Fh в память по [HL] Безусловный переход на адрес 8414h Запись числа 33h в аккумулятор Запись числа из аккумулятора в ячейку с адресом 8415h Конец и вызов монитора. |
В качестве 1-ого тестового значения по адресу 8600h было помещено число 25h. Результатом выполнения программы стало число 33h, расположенное по адресу 8415h. В ячейку памяти с адресом 8601h запись не производилась. 25h + ACh = D1h (без переноса).
В качестве 2-ого тестового значения по адресу 8600h было помещено число C7h. Результатом выполнения программы стало число 0Fh, расположенное по адресу 8601h. В ячейку памяти с адресом 8415h запись не производилась. С7h + ACh = 73h (с переносом).
Заменив команду JNC 840Fh, расположенную по адресу 8406h на команду JC 840Fh, был получен следующий результат: для 1-ого тестового значения - число 0Fh, расположенное по адресу 8601h (в ячейку памяти с адресом 8415h запись не производилась); для 2-ого - число 33h, расположенное по адресу 8415h (в ячейку памяти с адресом 8601h запись не производилась).
Заменив команду ADD M, расположенную по адресу 8405h, на команду SUB M, и восстановив команду JNC 840Fh по адресу 8406h, получили следующий результат:
- для 1-ого тестового значения - число 33h, расположенное по адресу 8415h (в ячейку памяти с адресом 8601h запись не производилась). ACh – 25h = 87h (без заема).
- для 2-ого тестового значения - число 0Fh, расположенное по адресу 8601h (в ячейку памяти с адресом 8415h запись не производилась) ACh – C7h = E5h (с заемом).
При выполнении программы в пошаговом режиме были отслежены изменения содержимого программно-доступных регистров A, H, L и ячеек памяти 8601h и 8415h.
4. Исследование программы записи в ячейку памяти числа по результату десятичной коррекции после сложения двух чисел.
Листинг программы представлен ниже:
Адрес |
Код |
Мнемокод |
Примечание |
8400h 8401h 8402h 8403h 8404h 8405h 8406h 8407h 8408h 8409h 840Ah 840Bh 840Ch 840Dh 840Eh 840Fh 8410h 8411h 8412h 8413h 8414h 8415h |
21h 00h 86h 3Eh 70h 86h 27h D2h 10h 84h 23h 36h 0Fh C3h 15h 84h 3Eh 33h 32h 16h 84h E7h |
LXI 00h 86h MVI A 70h ADD M DAA JNC 10h 84h INX H MVI M 0Fh JMP 15h 84h MVI A 33h STA 16h 84h RST 4 |
Запись в регистровую пару HL числа 8500h Записать в аккумулятор число 70h Сложение с памятью Десятичная коррекция Переход на адрес 8510h, если не было переполнения. Инкремент пары HL Записать число 0Fh в память по [HL] Безусловный переход на адрес 8415h Запись числа 33h в аккумулятор Запись числа из аккумулятора в ячейку с адресом 8416h Конец и вызов монитора. |
В качестве 1-ого тестового значения по адресу 8600h было помещено число 25h. Результатом выполнения программы стало число 33h, расположенное по адресу 8415h. В ячейку памяти с адресом 8601h запись не производилась. DAA(70h + 25h) = 95h, CY=0
В качестве 2-ого тестового значения по адресу 8600h было помещено число 35h. Результатом выполнения программы стало число 0Fh, расположенное по адресу 8601h. В ячейку памяти с адресом 8415h запись не производилась. DAA(70h + 35h) = 05h, CY=1.
При выполнении программы в пошаговом режиме были отслежены изменения содержимого программно-доступных регистров A, H, L и ячеек памяти 8601h и 8415h.
Выводы.
В ходе выполнения лабораторной работы были изучены программные способы организации условных и безусловных переходов, а также методы маскирования данных. Исследованы программы:
- маскирования отдельных разрядов числа;
- проверки содержимого третьего разряда числа, записанного в ячейке памяти 8600h;
- записи в ячейку памяти числа по результату сложения/вычитания двух чисел;
- записи в ячейку памяти числа по результату десятичной коррекции результата после сложения/вычитания двух чисел;
Во время отладки были выявлены и устранены все ошибки, встретившиеся во время выполнения. При выполнении программ в пошаговом режиме были отслежены изменения содержимого программно-доступных регистров и ячеек памяти.
Изучены операции маскирования: логическое умножение, логическое сложение, логическое «исключающее ИЛИ», а также команды условных переходов.
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.