Thiết kế Thiết bò thực tập vi xử lí 8085 Trang 41
* Các chương trình được gọi :
DPFIND ( xem phụ lục )
DPHLM ( xem phụ lục )
KYBRD ( xem chương 4 )
ORMP ( xem phụ lục )
PHIMSO ( xem chương 4 )
STEP : Đây là một chương trình cho phép chạy từng lệnh của chương
trình người sử dụng.
Input : Nhận đòa chỉ hiện hành vào HL.
Output : Chỉ thay đổi thanh ghi HL.
Các chương trình con được gọi :
LMB : Chương trình nhận biết được lệnh sắp thực hiện mấy
byte.
DPHLM : Hiển thò đòa chỉ vào dữ liệu tại đòa chỉ đó.
Chương trình sử dụng các vùng nhớ sau :
9 D 00H
Vùng nhớ
vào sau
ra trước
9 D FFH
( ngăn xếp giả )
Add
ST0
9FDAH
Add
ST1
9FDBH
Nạp lệnh cần chạy
Add
ST2
9FDCH
STEP
Thiết kế Thiết bò thực tập vi xử lí 8085 Trang 42
Add
ST3
9FDDH
Add
ST4
9FDEH
Nạp lệnh nhảy
Add
ST5
9FDFH
Add
ST6
9FE0H
Add
ST7
9FE1H
Add
ST8
9FE2H
Nạp nội dung các
Add
ST9
9FE3H
thanh ghi
Add
STA
9FE4H
Add
STB
9FE5H
Nạp nội dung các
Add
STC
9FE6H
thanh ghi
Add
STD
9FE7H
Add
STE
9FE8H
Add
STF
9FE9H
Add
ST10
9FEAH
Add
ST11
9FEBH
Add
ST12
9FECH
Khi chạy các các lệnh
Add
ST13
9FEDH
nhảy, lệnh gọi và lệnh
Add
ST14
9FEEH
trở về
Add
ST15
9FEFH
Add
ST16
9FF0H
Add
ST7
9FF1H
XEM GIẢI THUẬT STEP CUỐI CHƯƠNG 4
STEP
PUSH B JZ *ST2
MOV A,M CPI 31H
STA Add
STO
JZ *ST2
MVI A,OOH CPI 33H
STA Add
ST17
JZ *ST13
CALL LMB CPI 20H
MOV A,C JZ *ST3
CPI 3OH CPI 10H
JZ *ST1 JZ *ST5
CPI 32H CPI 11H
JZ *ST6
Thieỏt keỏ Thieỏt bũ thửùc taọp vi xửỷ lớ 8085 Trang 43
*ST1: INX H CPI A0H
MOV A,M JZ *ST22
STA Add
ST10
JMP *ST20
INX H *ST22 : STA Add
ST2
MOV A,M SHLD Add
STE
STA Add
ST11
MVI A,C3H
MVI A,_ STA Add
CT79
STA Add
ST1
MVI A,01H
MVI A,_ CALL DELAY 0.1
STA Add
ST2
MVI A,C3H
SHLD Add
ST12
STA Add
ST3
MVI A,C3 MVI A,_
STA Add
ST3
STA Add
ST4
MVI A,_ MVI A,_
STA Add
ST4
STA Add
ST5
MVI A,_ LDA Add
ST8
STA Add
ST5
MOV B,A
JMP *ST21 LDA Add
ST9
*ST2 : MOV A,M MOV C,A
CPI 32H LHLD Add
ST6
JZ *ST10 PUSH H
INX H POP PSW
*ST4 : MOV A,M LHLD Add
STA
STA Add
ST1
XCHG
INX H LHLD Add
STC
*ST20 : MOV A,M JMP Add
STO
STA Add
ST2
*ST12 : SHLD Add
STC
JMP *ST7 PUSH PSW
*ST10 : INX H POP H
MOV A,M SHLD Add
ST6
CPI 00H MOV A,B
JZ *ST11 STA Add
ST8
JMP *ST4 MOV A,C
*ST11: STA Add
ST1
STA Add
ST9
INX H XCHG
MOV A,M SHLD Add
STA
Thieỏt keỏ Thieỏt bũ thửùc taọp vi xửỷ lớ 8085 Trang 44
LHLD Add
STE
MOV H,B
INX H MOV L,C
MVI A,01H INX H
STA Add
TT
JMP *ST9
POP B *ST7 : SHLD Add
STE
RET MVI A,C3H
*ST3 : INX H STA Add
ST3
MOV A,M MVI A,_
STA Add
ST1
STA Add
ST4
MVI A,00H MVI A,_
STA Add
ST2
STA Add
ST5
JMP *ST7 *ST21: LDA Add
ST8
*ST5 : MVI A,00H MOV B,A
STA Add
ST1
LDA Add
ST9
STA Add
ST2
MOV C,A
JMP *ST7 LHLD Add
ST6
*ST6 : SHLD Add
ST15
PUSH H
MVI A,00H POP PSW
STA Add
ST1
LHLD Add
STA
STA Add
ST2
XCHG
MVI A,C3H LHLD Add
STC
STA Add
ST+3
JMP Add
STO
MVI A,_ *ST8 : SHLD Add
STC
STA Add
ST+4
PUSH PSW
MVI A,_ POP H
STA Add
ST+5
SHLD Add
ST6
CALL *ST19 MOV A,B
LDA Add
ST14
STA Add
ST8
MOV L,A MOV A,C
MVI H,9DH STA Add
ST9
MOV B,M XCHG
INX H SHLD Add
STA
MOV C,M LHLD Add
STE
DCRA INX H
DCRA *ST9 : CALL DPHLM
STA Add
ST14
MVI A,01H
Thieỏt keỏ Thieỏt bũ thửùc taọp vi xửỷ lớ 8085 Trang 45
STA Add
TT
INR A
POP B INR A
RET STA Add
ST14
LHLD Add
ST12
*ST13 : INX H MOV B,H
MOV A,M MOV C,L
STA Add
ST10
MOV L,A
INX H MVI H,9DH
MOV A,M MOV M,B
STA Add
ST11
INX H
MVI A,_ MOV M,C
STA Add
ST1
MVI A,01H
MVI A,_ STA Add
ST17
STA Add
ST2
LHLD Add
ST10
SHLD Add
ST12
RET
MVI A,C3
STA Add
ST3
*17 : LDA Add
ST17
MVI A,_ CMP 00H
STA Add
ST4
JZ *ST15
MVI A,_ JMP *ST9
STA Add
ST5
*18 : LHLD Add
ST15
JMP *ST21 INX H
*ST14 : LHLD Add
ST10
JMP *ST9
JMP *ST9
*ST15 : LHLD Add
ST12
*19 : JMP *ST21
INX H
JMP *ST9
*ST16 : LDA Add
ST14
Thiết kế Thiết bò thực tập vi xử lí 8085 Trang 46
LMB : Đây là một chương trình con có nhiệm vụ nhận biết lệnh mấy
byte.
Input : HL là đòa chỉ chứa lệnh đó
Output : C = 32H : Khi lệnh đó thuộc nhóm lệnh nạp tức thời cặp
thanh ghi ( 3 byte )
C = 31H : Khi lệnh đó thuộc nhóm lệnh lưu trữ trực tiếp ( 3
byte )
C = 30H : Khi lệnh đó thuộc nhóm lệnh gọi chương trình
con ( 3 byte )
C = 33H : Khi lệnh đó thuộc nhóm lệnh nhảy ( 3 byte )
C = 20H : Khi lệnh đó thuộc nhóm lệnh 2 byte
C = 11H : Khi lệnh đó thuộc nhóm lệnh trở về từ chương
trình con
C = 10H : Khi lệnh đó thuộc nhóm lệnh 1 byte ( kể cả
những mã không thuộc bộ lệnh )
Ngoài thanh ghi C chương trình không ảnh hưởng tới các thanh
ghi khác.
Do chương trình đơn giản nên chỉ trình bày thuật giải. Được gọi
từ chương trình STEP và chương trình SDC.
PUSH PSW
A (M)
Đ
C (32H)
POP PSW
S
LMB
LMB
Nh
óm nạp tức thời
thanh ghi (3 byte)
1
RET
Thiết kế Thiết bò thực tập vi xử lí 8085 Trang 47
Đ
C (31H)
POP PSW
S
Đ
C (30H)
POP PSW
S
Đ
C (33H)
POP PSW
S
Đ
C (20H)
S POP PSW
Đ
C (11H)
S POP PSW
C (10H)
POP PSW
1
Nhóm lệnh lưu trữ
trực tiếp (3 byte)
RET
Nhóm lệnh gọi
chương trình con (3
byte)
RET
Nhóm lệnh nhảy (3
byte)
RET
Nhóm lệnh 2 byte
RET
Nhóm lệnh trở về từ
chương trình con
RET
RE
T
Thiết kế Thiết bò thực tập vi xử lí 8085 Trang 48
INS : Đây là một chương trình con cho phép chèn dữ liệu tại đòa chỉ
hiện hành và tự sửa đòa chỉ nếu muốn.
Input : Nạp đòa chỉ cuối vùng INS , nghóa là chương trình chỉ có tác
dụng trong khoảng từ đòa chỉ hiện hành đến đòa chỉ cuối mới
nạp. Nếu sửa đòa chỉ thì nạp đòa chỉ lệnh đầu tiên vùng cần
sửa, nghóa là chương trình sửa đòa chỉ chỉ có tác dụng từ đòa chỉ
mới nạp tới đòa chỉ cuối vùng INS
Output : Ngoài AF không thanh ghi nào bò điều chỉnh. Vùng đòa chỉ sử
dụng cho INS :
Add
INS + 0
: 9FDD
Đòa chỉ trở về sau khi
Add
INS + 1
: 9FDE
INS
Add
INS + 2
: 9FDF
Đòa chỉ kế cuối vùng
Add
INS + 3
: 9FE0
INS
Add
INS + 4
: 9FE1
Nạp đòa chỉ ô nhớ
Add
INS + 5
: 9FE2
cần chèn
PUSH B
PUSH D
PUSH H
BC (0000H)
SHLD Add
INS + 0
SHLD Add
INS + 4
DE HL
*1 : Add
tt
(01H)
CALL XADD
A (83H)
Add
CT79
(A)
A (79H)
Add
DT79
(A)
INS
INS
a
Thieỏt keỏ Thieỏt bũ thửùc taọp vi xửỷ lớ 8085 Trang 49
CALL DAUCHAM
*4: CALL KYBRD
S S
ẹ *3
S
*16 : CALL PHIMSO
*4 ẹ
PUSH DE
CALL DEMP
HL DE
HL (HL) - 1
SHLD Add
INS + 2
POP DE
A (H)
S ẹ
*5 ẹ S
A (L)
S S
ẹ ẹ *6
PHIMSO
ADD
(Add
TT
)=00H
A = D
A < D
A = E
A < E
1
a
Thieỏt keỏ Thieỏt bũ thửùc taọp vi xửỷ lớ 8085 Trang 50
Add
TT
(01H)
LHLD Add
INS+ 0
CALL DPHLM
*7 : CASLL KYBRD
S S S
*11 ẹ *10 ẹ *9 ẹ
PUSH HL CALL DOWN Add
TT
(01H)
LHLD Add
INS+2
SHLD Add
INS+0
CALL SDC
CALL SHM DE HL POP H
BC (BC)+1 CALL DPHLM
POP HL Add
TT
(01H)
CALL PHIMSO *12 POP D
CALL KYBRD POP B
S *12
*15 ẹ
CALL PHIMSO
*8 S S S
*13 ẹ *14
POP H CALL UP
CALL DPHLM SHLD Add
INS + 0
Add
TT
(01H) DE HL
POP D
POP B
1
ADD
DOWN
PHIMSO
PHIMSO
RET
INS
UP
RET
Thieỏt keỏ Thieỏt bũ thửùc taọp vi xửỷ lớ 8085 Trang 51
PUSH B JMP *6
PUSH D *5 : MOV A,L
PUSH H CMP E
LXI B,0000H JZ *1
SHLD Add
INS + 0
JM *1
SHLD Add
INS + 4
*6 : MVI A,01H
MOV D,H STA Add
TT
MOV E,L LHLD Add
INS + 0
*1 : MVI A,01 CALL DPHLM
STA Add
TT
*7 : CALL KYBRD
CALL XADD CPI ADD
MVI A,38H JZ *9
STA Add
CT79
CPI DOWN
MVI A,79H JZ *10
STA Add
DT79
CPI 10H
CALL DAUCHAM JM *11
*2 : CALL KYBRD *8 : CPI INS
CPI 10H JZ *13
JM *16 CPI UP
CPI ADD JZ *14
JZ *3 JMP *7
JMP *2 *9 : MVI A,01H
*3 : LDA Add
TT
STA Add
TT
CPI 00H CALL SDC
JZ *4 POP H
JMP *1 CALL DPHLM
*4 : PUSH D MVI A,01H
CALL DEMP STA Add
TT
MOV H,D POP D
MOV L,E POP B
DCX H RET
SHLD Add
INS + 2
*10 : CALL DOWN
POP D SHLD Add
INS +0
MOV A,H MOV D,H
CMP D MOV E,L
JZ *5 JMP *12
JMP
*1