- •Отчет по лабораторной работе
- •3. Система команд микропроцессора к580
- •4. Программа работы
- •5. Вводные программы
- •5.1. Программа 1
- •5.2. Программа 2
- •5.3. Программа 3
- •5.4. Программа 4
- •5.5. Программа 5
- •5.6. Программа 6
- •5.7. Программа 7
- •5.8. Программа 8
- •5.9. Программа 9
- •5.10. Программа 10
- •5.11. Программа 11
- •6. Самостоятельная программа 1
- •7. Самостоятельная программа 2
- •8. Заключение
5. Вводные программы
5.1. Программа 1
Программа позволяет загрузить в регистры В и С данные 010 и 001. Текст программы представлен в Таблице 1.
Таблица 1
Адреса |
Команды |
Мнемоника команд |
Комментарии |
L=000 |
041 |
LXIH |
; Загрузка начального адреса памяти |
001 |
200 |
В2 |
; мл.байт адреса |
002 |
000 |
В3 |
; ст.байт адреса |
003 |
001 |
LXIB |
; Запись исходных данных в регистры В и С |
004 |
001 |
В2 |
; B2 --> (C) |
005 |
010 |
В3 |
; B3 --> (B) |
006 |
160 |
МОV М,В |
; Запоминание (В) |
007 |
043 |
INX H |
; Формирование следующего адреса памяти |
010 |
161 |
МОV М,С |
; Запоминание (С) |
011 |
166 |
HLT |
; Останов |
Выполнение команды по адресу 006 осуществляется за 2 такта: первый такт – считывание команды (на световых индикаторах Шина адреса и Шина данных отображается адрес 006 и данные160), второй такт – запись в ячейку М, т.е. по адресу в регистрах HL= 000 200 данных из регистра В (на световых индикаторах Шина адреса и Шина данных отображается адрес 200 и данные 010). Аналогично происходит выполнение команды МОV М,С по адресу 010.
Результат выполнения программы: по адресу 000 200 записано число 010, по адресу 000 201 записано число 001.
5.2. Программа 2
Программа позволяет занести в стек (выбранный участок памяти ОЗУ) содержимое регистров В и С, в которых записаны данные 010 и 001 соответственно. Текст программы представлен в Таблице 2.
Таблица 2
Адреса |
Команды |
Мнемоника |
Комментарии команд |
L=000 |
061 |
LXI SP |
; Установка указателя стека: |
001 |
202 |
В2 |
; мл. байт адреса |
002 |
000 |
В3 |
; ст. байт адреса |
003 |
001 |
LXI B |
; Запись исходных данных в регистры В и С: |
04 |
001 |
В2 |
; B2 --> (C) |
005 |
010 |
В3 |
; B3 --> (B) |
006 |
305 |
PUSH B |
; Запоминание содержимого регистров В и С стеке |
007 |
166 |
HLT |
; Останов |
Результат выполнения программы: в ячейку памяти с адресом L = 200 записано число 001 – содержимое регистра С, в ячейку памяти с адресом L = 201 записано число 010 – содержимое регистра В. Таким образом при записи в стек содержимого регистровой пары ВС сначала в стек было записано содержимое регистра В, затем содержимое регистра С. Так как в стек было записано 2 байта, содержимое указателя стека уменьшилось на два.
При выполнении команды PUSH RP несколько раз содержимое указателя стека уменьшается, это значит, что стек «растет» в сторону уменьшения адресов памяти.
5.3. Программа 3
Программа позволяет извлечь (вызвать) данные, предварительно записанные в стек, изменить их на единицу (используя операцию инкремента-декремента) и занести скорректированные данные снова в стек. Текст программы представлен в Таблице 3.
Таблица 3
Адреса |
Команды |
Мнемоника |
Комментарии команд |
L=000 |
061 |
LXI SP |
; Загрузка начального адреса в указатель стека |
001 |
200 |
В2 |
; мл.байт адреса |
002 |
000 |
В3 |
; ст.байт адреса |
003 |
301 |
РОР В |
; Извлечение данных из стека и загрузка их в регистровую пару В и С |
004 |
004 |
INR B |
; Увеличение на 1 содержимого регистра В |
005 |
015 |
DCR C |
; Уменьшение на 1 содержимого регистра С |
006 |
305 |
PUSH B |
; Запоминание содержимого регистров В и С в стеке |
007 |
166 |
HLT |
; Останов |
Перед началом выполнения программы в ячейки памяти с адресами H=000 L=200 и H=000 L=201 были записаны числа 001 и 010 соответственно. В результате по адресу 000 200 записано число 000, по адресу 000 201 записано число 011. Содержимое стека было записано в регистровую пару ВС, т.е. в регистр В записано число 010, в регистр С – 001, затем содержимое регистра В было инкрементировано, содержимое регистра С – декрементировано, после этого содержимое регистровой пары было записано обратно в стек, т.е. по тем же адресам, откуда данные были первоначально извлечены.
При выполнении команды PUSH RP загружаются ячейки с адресами (УС-1) и (УС-2), т.е. УС содержит. При выполнении команды POP RP информация извлекается из ячеек памяти с адресами УС и (УС+1), т.к. УС содержит адрес ячейки памяти, следующей за первой ячейкой для записи, т.е. указывает на вторую записанную ячейку.
При включении ЭВМ указатель стека показывает на произвольную неизвестную ячейку памяти, именно поэтому для работы со стеком надо инициализировать УС командой LXI SP.