- •1.2. Составили программу обмена данными между регистрами a и c с применением регистра m(0820) (Таблица 2)
- •1.3. Записали последовательно элементы массива в регистры e, d, l, h. Исходный массив: 0a00 (0516), 0a01 (0216), 0a02 (0716), 0a03 (0116) (Таблица 3).
- •1.5. Составили программу обмена данными между двумя ячейками памяти 0830 (7816) и 0831 (e316) (Таблица 5).
- •1.6. Составить программу обмена данными между ячейкой памяти 0820 (7816) и регистром d. Для промежуточного хранения данных использовали регистр m(0840) (Таблица 6).
- •3. Составили программу с предложенной блок – схемой, проверить корректность её работы (Таблица 8)
- •4. Для исследования команд jmp addr, call addr, rz addr, nop и hlt (Таблицы 9).
- •4.2. Исследовали команды управления pchl и jz addr.
- •6. Разработали программу деления двух однобайтных чисел с раздельной записью целого и остатка от деления (таблица 12).
6. Разработали программу деления двух однобайтных чисел с раздельной записью целого и остатка от деления (таблица 12).
Таблица 12
Адрес |
Машинный код |
Мнемоника команды |
Операнд |
Комментарий |
0800 |
16 00 |
MVI D, |
00 |
Записали в регистр D число 00 |
0802 |
1E 00 |
MVI E, |
00 |
Записали в регистр E число 00 |
0804 |
78 |
MOV A, B |
|
Содержимое регистра B переслали в аккумулятор |
0805 |
B9 |
CMP C |
|
Вычли из содержимого аккумулятора содержимое регистра С |
0806 |
DA 17 08 |
JC |
0817 |
Выполнить переход на ячейку памяти М(0817), если признак С=1 |
0809 |
91 |
SUB C |
|
Вычли из содержимого аккумулятора содержимое регистра С, результат записали в аккумулятор |
080B |
CA 15 08 |
JZ |
0815 |
Выполнить переход на ячейку памяти М(0815), если признак Z=1 |
Окончание таблицы 12
080D |
DA 14 08 |
JC |
0814 |
Выполнить переход на ячейку памяти М(0814), если признак С=1 |
080F |
14 |
INR D |
|
Инкрементировали содержимое регистра D |
0812 |
C3 09 08 |
JMP |
0809 |
Выполнили переход на ячейку памяти М(0809) |
0814 |
81 |
ADD C |
|
Сложили содержимое аккумулятора и содержимое регистра С, результат записали в аккумулятор |
0815 |
5F |
MOV E, A |
|
Содержимое аккумулятора переслали в регистр Е |
0816 |
14 |
INR D |
|
Инкрементировали содержимое регистра D |
0817 |
FF |
RST 7 |
|
Прервали выполнение программы |
Перед началом запуска программы делитель нужно записать в регистр B, а делимое нужно записать в регистр C. Целое число записывается в регистр D, а остаток от деления записывается в регистр E. Так же в программе присутствует защита от рационального результата.
7. Разработали программу, включающую в себя три отдельные подпрограммы – изменение знака числа, определение модуля числа, поиск максимального числа в массиве. В основной программе предусмотрел загрузку всех регистров блока POH, A и регистра флагов F данными, их сохранение в стеке и последующее извлечение данных из стека в соответствующие регистры после выполнения указанных подпрограмм. (таблица 13)
Таблица 13
Адрес |
Машинный код |
Мнемоника команды |
Операнд |
Комментарий |
0800 |
31 00 09 |
LXI SP, |
0900 |
Записали в (SP) число 0900 |
0803 |
3E 07 |
MVI A, |
07 |
Записали 07 в аккумулятор |
0805 |
06 1F |
MVI B, |
1F |
Записали в регистр B число 1F |
0807 |
0E 45 |
MVI C, |
45 |
Записали в регистр C число 45 |
0809 |
16 01 |
MVI D, |
01 |
Записали в регистр D число 01 |
080B |
1E 00 |
MVI E, |
00 |
Записали в регистр E число 00 |
Продолжение таблицы 13
080D |
F5 |
PUSH PSW |
|
Загрузили содержимое регистров A и F в стек |
080E |
C5 |
PUSH B |
|
Загрузили содержимое регистров B и C в стек |
080F |
D5 |
PUSH D |
|
Загрузили содержимое регистров D и E в стек |
0810 |
E5 |
PUSH H |
|
Загрузили содержимое регистров H и L в стек |
0811 |
CD 60 08 |
CALL |
0860 |
Безусловный вызов подпрограммы по адресу 0860 |
0814 |
CD 70 08 |
CALL |
0870 |
Безусловный вызов подпрограммы по адресу 0870 |
0817 |
CD 90 08 |
CALL |
0890 |
Безусловный вызов подпрограммы по адресу 0890 |
081A |
E1 |
POP H |
|
Выгрузили данные из стека в регистры H и L |
081B |
D1 |
POP D |
|
Выгрузили данные из стека в регистры D и E |
081C |
С1 |
POP B |
|
Выгрузили данные из стека в регистры B и C |
081D |
F1 |
POP PSW |
|
Выгрузили данные из стека в регистры A и F |
081E |
FF |
RST 7 |
|
Прервали выполнение программы |
0860 |
21 00 0А |
LXI H, |
0А00 |
Записали в регистровую пару (HL) число 0А00 |
0863 |
7E |
MOV A, M |
|
Содержимое ячейки памяти, адрес которой находится в регистровой паре (HL) переслали в аккумулятор |
0864 |
2F |
CMA |
|
Инвертировали содержимое аккумулятора |
0865 |
3C |
INR A |
|
Инкрементировали содержимое аккумулятора |
0866 |
23 |
INX H |
|
Инкрементировали содержимое регистровой пары (HL) |
0867 |
77 |
MOV M, A |
|
Содержимое аккумулятора загрузили в ячейку памяти адрес которой находится в регистровой паре (HL) |
0868 |
C9 |
RET |
|
Вышли из подпрограммы |
Продолжение таблицы 13
0870 |
21 02 0A |
LXI H, |
0A02 |
Записали в регистровую пару (HL) число 0A02 |
0873 |
7E |
MOV A, M |
|
Содержимое ячейки памяти, адрес которой находится в регистровой паре (HL) переслали в аккумулятор |
0874 |
B7 |
ORA A |
|
Логически сложили содержимое аккумулятора с содержимым аккумулятор и результат в аккумулятор |
0875 |
F2 7B 08 |
JP |
|
Выполнить переход на ячейку памяти M(087B) если признак S=0, |
0878 |
2F |
CMA |
|
Инвертировали содержимое аккумулятора |
0879 |
3C |
INR A |
|
Инкрементировали содержимое аккумулятора |
087A |
23 |
INX H |
|
Инкрементировали содержимое регистровой пары (HL) |
087B |
77 |
MOV M, A |
|
Содержимое аккумулятора загрузили в ячейку памяти адрес которой находится в регистровой паре (HL) |
087C |
C9 |
RET |
|
Вернулись из подпрограммы на ячейку памяти 0817 |
0890 |
21 04 0A |
LXI H, |
0A04 |
Записали в регистровую пару (HL) число 0A04 |
0893 |
0E 06 |
MVI C, |
06 |
Записали в регистр C число 06 |
0895 |
7E |
MOV A, M |
|
Содержимое ячейки памяти адрес которой находится в регистровой паре (HL) переслали в аккумулятор |
0896 |
23 |
INX H |
|
Инкрементировали содержимое регистровой пары (HL) |
Окончание таблицы 13
0897 |
BE |
CMP M |
|
Вычли из содержимого аккумулятора содержимое ячейки памяти, адрес которой находится в регистровой паре (HL) |
0898 |
D2 9C 08 |
JNC |
089C |
Выполнить переход на ячейку памяти M(089C) если признак C=0 |
089B |
7E |
MOV A, M |
|
Содержимое ячейки памяти адрес которой находится в регистровой паре (HL) переслали в аккумулятор |
089C |
0D |
DCR C |
|
Декрементировали содержимое регистра С |
089D |
C2 96 08 |
JNZ |
|
Выполнить переход на ячейку памяти М(0896), если признак Z=0 |
08A0 |
23 |
INX H |
|
Инкрементировали содержимое регистровой пары (HL) |
08A1 |
77 |
MOV M, A |
|
Содержимое аккумулятора загрузили в ячейку памяти адрес которой находится в регистровой паре (HL) |
08A2 |
C9 |
RET |
|
Вернулись из подпрограммы |
Вывод.
Закрепили теоретические знания по изучению различных команд пересылки данных, управление, ввода – вывода, работы со стеком языка программирования ассемблера МП КР580ВМ80А.