1. Разработать фрагмент программы, которая в зависимости от вводимого кода ( 00,01,02,03) производит передачу управления на адреса, заданные символическими именами ADR0, ADR1, ADR2, ADR3.
first_address equ 800h
adr0 equ 1000h
adr1 equ 1100h
adr2 equ 1200h
adr3 equ 1300h
defseg d_seg, start = first_address, class=data
seg d_seg
defseg io_seg,start=80h,class=IOspace
seg io_seg ;
adrport ds 1
defseg c_seg, start = 0000h, class=code
seg c_seg
in adrport
CPI 00h
JZ L0
CPI 01h
JZ L1
CPI 02h
JZ L2
CPI 03h
JZ L3
L0:
JMP addr0
L1:
JMP addr1
L2:
JMP addr2
L3:
JMP addr3
end
2. Заполнить область памяти от адреса 2100h объемом 50h кодами 20h. Использовать шаблон
цикл типа ДО
first_address equ 2100h
dlina equ 50h
defseg d_seg, start = first_address, class=data
seg d_seg
ds dlina; zarezerviruem 50h baitov
defseg c_seg, start = 0000h
seg c_seg
LXI H, first_address; ukazatel 4teniia
MVI B, dlina; s4et4ik
L1: MVI A, 20h
MOV M, A
INX H
DCR B
JNZ L1
end
3. Заполнить область памяти от адреса 8000h объемом 125h нарастающими кодами 05,06,07, … . Заполнение идет от начального адреса в сторону уменьшения. (8000h – 8124h)
first_address equ 8000h
dlina equ 125h
defseg d_seg, start = first_address
seg d_seg
ds dlina; zarezerviruem 125h baitov
defseg c_seg, start = 0000h
seg c_seg
LXI H, first_address; ukazatel 4teniia
LXI D, dlina; s4et4ik
MVI C, 05h; narastaiushii kod zapolneniia
L1: MOV A, C
MOV M, A
INR C
INX H
DCX D
; DCX D ne men9et flagi!!! i poetomu:
MOV A, E
ORA D
JNZ L1
End
4. В зависимости от содержимого в ячейке 2101h выполнить одно из трех действий. Если (M(2101h)) <20h заполнить область памяти от адреса 2102h до адреса 2302h кодами 20h, если (M(2101h)) >20h, то кодами 30h и, если (M(2101h)) =20h, то кодами 00h
first_address equ 2101h
defseg d_seg, start = first_address, class=data
seg d_seg
db 30h
ds 200h
defseg c_seg, start = 0000h, class=code
seg c_seg
LXI H, first_address
MOV A, M
INX H
LXI B, 2302h-2102h+1
CPI 20h
JZ L00h
JC L20h
MVI D, 30h
JMP LLL
L00h: MVI D, 00h
JMP LLL
L20h: MVI D, 20h
LLL: MOV M, D
INX H
DCX B
MOV A, B
ORA C
JNZ LLL
end
5. Принять байтовые данные из порта port и записать их буфер в памяти (Buff1) до поступления кода 00h. Объем поступающей информации не превышает 80 байтов
first_address equ 800h
defseg d_seg, start = first_address, class=data
seg d_seg
buff1 ds 80
defseg io_seg,start=80h,class=IOspace
seg io_seg ;
adrport ds 1
defseg c_seg, start = 0000h, class=code
seg c_seg
MVI B, 80+1; s4et4ik
LXI H, buff1; ukazatel
L1:
DCR B
JZ L2
IN adrport
CPI 00h
JZ L2; proverka na 00h
MOV M, A
INX H
JMP L1
L2:
End
7. Вычислить сумму байт буфера BUF1, размером LEN_BUF (не более 80h – не учтено), результат поместить в ячейку памяти по адресу SUMM (формат Word).( команда ADD)
first_address equ 800h
LEN_BUF equ 18h
defseg d_seg, start = first_address, class=data
seg d_seg
buf1: db 43h, 0A3h, 8Ch, 0F3h, 5Ah, 9Bh, 0FCh, 69h
db 13h, 63h, 0BCh, 03h, 15h, 9Fh, 0Ch, 6Ch
db 47h, 0A9h, 2Ch, 83h, 5Ch, 9Ch, 0Fh, 14h
SUMM: ds 2; zarezerv dlia cummi
defseg c_seg, start = 0000h, class=code
seg c_seg
LXI H, buf1
MVI B, LEN_BUF; s4et4ik
MOV A, M
INX H
DCR B
L2: ADD M
JNC L1
INR D
L1: INX H
DCR B
JNZ L2
MOV M, D
INX H
MOV M, A
end
8. Вычислить сумму байт буфера BUF1, размером len_BUF, (более 256) результат поместить в ячейку памяти по адресу SUM, формат суммы - Word.
first_address equ 1000h
dlinaBuf1 equ 1000h
defseg d_seg, start = first_address, class=data
seg d_seg
BUF1: ds dlinaBuf1
SUM: ds 2h
vremA: ds 1h
defseg c_seg, start = 0000h, class=code
seg c_seg
; ZAPOLNIM HUINEI BUFER
LXI H, BUF1
LXI B, dlinaBuf1
MVI D, 00h
L1: MOV M, D
INR D
INX H
DCX B
MOV A, B
ORA C
JNZ L1
; KONEC ZAPOLNENIIA HUINEI
LXI H, BUF1
LXI B, dlinaBuf1
L2: ADD M
JNC L3
INR D
L3: INX H
DCX B
STA vremA
MOV A, B
ORA C
LDA vremA
JNZ L2
MOV M, D
INX H
MOV M, A
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.