Организация условных и безусловных переходов в программах и маскирование данных, страница 2

Меняя команду 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;

- записи в ячейку памяти числа по результату сложения/вычитания двух чисел;

- записи в ячейку памяти числа по результату десятичной коррекции результата после сложения/вычитания двух чисел;

Во время отладки были выявлены и устранены все ошибки, встретившиеся во время выполнения. При выполнении программ в пошаговом режиме были отслежены изменения содержимого программно-доступных регистров и ячеек памяти.

Изучены операции маскирования: логическое умножение, логическое сложение, логическое «исключающее ИЛИ», а также команды условных переходов.