Bài giảng Vi xử lý - Chương 2: Kiến trúc CPU và tập lệnh (Phần 2) - Hồ Trung Mỹ

23-Mar-11  
ꢀHBK Tp HCM-Khoa ꢀ-ꢀT  
BMꢀT  
GVPT: Hꢁ Trung Mꢂ  
Môn hꢃc: Vi Xꢄ Lý  
Z80  
Tập lệnh  
1
ꢅꢆꢇꢈꢉꢊꢋꢈꢌꢍꢈꢎꢏꢈꢐꢑy  
• ꢒꢊꢓꢉꢈꢉꢊꢋꢈꢊꢆꢔꢈꢉꢕꢖꢈꢗꢎꢉꢘꢐꢙꢉꢔꢚꢈꢛꢜꢉꢊꢝꢜꢊꢘꢞꢈꢟꢈꢕꢆꢇꢈꢉꢊꢋꢈ  
(assembly language)  
• ꢒꢊꢓꢉꢈꢉꢊꢋꢈꢐꢑꢠꢈꢗꢎꢜꢚꢕꢔꢉꢘꢈꢛꢜꢉꢊꢝꢜꢊꢘꢞꢈꢟꢈꢐꢏꢈꢐꢑy  
(machine code)  
• TD:  
org 1000h  
LD A, 20  
1000H  
1001H  
1002H  
1003H  
3EH  
14H  
ꢡꢇꢢꢚꢙꢣꢘꢈꢗꢐꢏꢈꢛꢤnh)  
ꢡꢇꢘꢥꢜꢉꢣꢈꢗꢦꢙꢑꢉꢈꢕꢧng)  
2
1
                                                                                                                                                           
                                                                                                                                                           
                                                                                                                                                           
                                                                                                                                             
                                                                                                                                                           
23-Mar-11  
ꢨꢩꢝꢈꢦꢥꢪꢚꢈꢛꢤnh  
ꢎꢃꢔꢈꢛꢤꢉꢕꢈꢊꢁꢐꢈꢚꢫꢈꢐꢏꢈꢛꢤꢉꢕꢈꢌꢍꢈꢉꢬꢝꢈꢚꢭꢉꢮꢈꢯꢈꢇꢕꢭꢉꢈꢰꢱꢜꢈꢚꢕꢲꢈꢚꢳꢜꢈꢗꢚꢑꢚꢞꢈꢦꢙꢑꢉꢈꢕꢧng.  
OP-Code  
Address(es)  
Operand(s)  
ꢡꢴ-ꢨꢙꢣꢘꢈꢚꢳꢜꢈꢵꢶꢷꢈꢦꢕꢸꢹꢉꢊꢈꢦꢕꢺꢈꢯꢈꢻꢠꢦꢘꢈꢗꢉꢊꢙꢧꢔꢈꢦꢥꢼꢈꢦꢥꢙꢉꢊꢈꢚꢑꢚꢈꢦꢑꢚꢈꢌꢽꢈ  
ꢣꢾꢉꢊꢈꢚꢑꢚꢈꢦꢕꢜꢉꢕꢈꢊꢕꢔꢈꢚꢕꢲꢈꢿꣀꢈꢦꢕꢺꢈꢐꢏꢈꢛꢤꢉꢕꢈꢚꢕꢔꢬm 2 byte)  
ꣁꣀꢈꢰꢱꢜꢈꢚꢕꢲ:  
0
1
2
3
R1 op R2  
(A) op R  
(A1) op (A2)  
(A1) op (A2)  
→
→
→
→
R3  
R
R
(A3)  
Chú ý: (A): nd cꢳa A, op: tác vꢽ, →: chuyꣂn, A: ꢰꢱa chꢲ, R: thanh ghi  
ꢀ
ꢀ
ꢀ
ꢀ
3
Các ký hiꢤu ꢰꢸꢆc dùng trong t꣄p lꢤnh  
• d = ꢰꣅ dꢹi (sꣀ có dꢩu 8 bit = -128 ꢁ +127)  
• n = h꣆ng sꣀ 8 bit  
• nn = h꣆ng sꣀ 16 bit  
• r,r’ = thanh ghi 8 bit  
• dd, qq, ss, rr = thanh ghi 16 bit  
4
2
23-Mar-11  
Các nhóm lꢤnh  
• Chuyꣂn dꢋ liꢤu (data transfer Group)  
• Sꣀ hꢃc và Logic (Arithmetic and Logical Group)  
• Xoay và dꢱch (Rotate and Shift Group)  
• R꣇ nhánh (Branch Group)  
• ꢀi꣈u khiꣂn ng꣉n xꢬp, I/O và máy  
(Stack, I/O, and Machine Contol Group)  
• Trao ꢰ꣊i, chuyꣂn khꣀi và tìm kiꢬm  
(Exchange, Block Transfer, and Search Group)  
• Xꢄ lý bit (Bit Manipulation Group)  
Chú ý:  
• Z80 có 158 lꢤnh và 10 cách ꢰꢱnh ꢰꢱa chꢲ  
5
1. Nhóm chuyển dữ liệu  
• Dꢧng t꣊ng quát:  
LD op1, op2  
– Sao chép nꣅi dung cꢳa toán hꢧng 2 (op2) vào toán hꢧng 1  
(op1)  
– 2 toán hꢧng ph꣋i cùng chi꣈u dài (8 hay 16 bit)  
– Có nhi꣈u cách ꢰꢱnh ꢰꢱa chꢲ cho các toán hꢧng  
– toán hꢧng op1 không thꣂ là h꣆ng sꣀ  
• Chꢲ có 1 toán hꢧng: vꢖi stack  
– PUSH rp  
-> cꢩt nꣅi dung cꢳa thanh ghi 16 bit vào stack qua con tr꣌ SP  
– POP rp  
-> lꢩy nꣅi dung cꢳa phꢭn tꢄ ꢰꢲnh stack (qua con tr꣌ SP) cꢩt  
vào thanh ghi 16 bit  
6
3
23-Mar-11  
Nhóm chuyển dữ liệu – Nạp hằng số cho thanh ghi  
• Nꢧp h꣆ng sꣀ 8 bit cho thanh ghi 8 bit: LD r, n  
• Nꢧp h꣆ng sꣀ 16 bit cho thanh ghi 16 bit: LD rr, n  
LD r, n  
LD rr, n  
A
B
C
D
BC  
DE  
HL  
, nn  
LD  
, n  
LD  
SP  
{ }  
{ }  
E
IX  
IY  
H
L
7
TD: Nꢧp h꣆ng sꣀ 8 bit cho thanh ghi  
• TD:  
LD A,-24; decimal  
LD A,15; decimal  
LD A, ‘B’; ASCII  
LD A, 11001010b;  
binary  
LD A,0F7H; hex  
LD A, 123Q ; Octal  
• TD: Hãy viꢬt mã máy cho lꢤnh LD A,-24  
• ꢀS: Tra t꣄p lꢤnh ta thꢩy lꢤnh này có 2 byte và opcode  
nhꢸ sau: ( r = A = 111, và n = -24 = bù 2 cꢳa 24 = ECh)  
Nhꢸ v꣄y mã máy là: byte 1 = 00111110 = 3Eh  
byte 2 = ECh  
8
4
23-Mar-11  
TD: Nꢧp h꣆ng sꣀ 16 bit cho thanh ghi 16 bit  
(c꣎p thanh ghi 8 bit)  
•
•
TD:  
LD HL,-24  
LD B, ‘A’  
LD DE, 11001010b  
LD SP,3FFFH  
LD C, ‘8’ ; BC = ‘A8’  
LD IX, 1234h  
TD: Hãy viꢬt mã máy cho lꢤnh LD HL,-24  
-24 biꣂu di꣍n sang sꣀ 16 bit bù 2 là FF E8h  
Nhꢸ v꣄y mã máy là: byte 1 = 0010 0001 = 21h  
byte 2 = E8h  
9
byte 3 = FFh  
Nhóm chuyển dữ liệu – Sao chép giữa các thanh ghi  
• Sao chép nꣅi dung thanh ghi 8 bit (r r’) : LD r, r’  
• Sao chép nꣅi dung thanh ghi 16 bit (SP rr): LD SP, rr  
LD r, r’  
LD SP, rr  
A
B
C
D
A
B
C
D
E
H
L
HL  
IX  
{ }  
IY  
LD SP,  
LD  
{ },{  
}
E
H
L
TD: LD SP, HL  
LD SP, IX  
TD: LD A, A  
10  
LD E, L  
5
23-Mar-11  
Nhóm chuyển dữ liệu – Đọc/ghi bộ nhớ dữ liệu 8 bit  
•
ꢀꢃc bꣅ nhꢖ: dꢋ liꢤu 8 bit cꢩt  
•
Ghi vào bꣅ nhꢖ: nꣅi dung thanh  
ghi 8 bit (r) ho꣎c dꢋ liꢤu 8 bit  
(n) vꢖi con tr꣌ là thanh ghi 16  
bit rp có thꣂ là HL, IX,và IY:  
vào thanh ghi 8 bit vꢖi con tr꣌  
là thanh ghi 16 bit rp có thꣂ là  
HL, IX,và IY:  
LD r, (HL)  
LD r, (IX+d)  
LD (HL), r  
LD (HL), n  
LD (IX+d), n  
LD (IY+d), n  
LD (IX+d), r  
LD (IY+d), r  
LD r, (IY+d)  
•
Riêng vꢖi r = A có thêm:  
LD A,(BC)  
•
Riêng vꢖi r = A có thêm:  
LD (BC),A  
LD A,(DE)  
LD (DE),A  
LD A,(nn)  
LD (nn), A  
Chú ý:  
• r là 1 trong các thanh ghi A, B, C, D, E, H và L  
• (rp) : ꢰꢱnh ꢰꢱa chꢲ gián tiꢬp qua thanh ghi HL, BC, ho꣎c DE  
• (IX+d) hay (IY+d) : ꢰꢱnh ꢰꢱa chꢲ chꢲ sꣀ vꢖi d là h꣆ng sꣀ có dꢩu 8 bit ꢁ tra b꣋ng  
• (nn) : ꢰꢱnh ꢰꢱa chꢲ tr꣏c tiꢬp  
11  
꣕꣑꣖ꢈꢈꢀꢃꢚ꣗ꢊꢕꢔꢈ꣘ꣅꢈꢉꢕꢖꢈꢣꢋꢈꢛꢔꢤu 8 bit  
• TD: ꣐꣑ꢈ꣒ꢮꢗ꣓ꢷꢷꢷꢅꢞ꣔ꢈꢐꢏꢈꢐꢑꢠꢈꢛꢍꢈꢈꢈꢈ3AH,00H,90H  
3AH  
00H  
90H  
8000H  
8001H  
8002H  
8003H  
9000H  
33H  
• TD: ꣐꣑ꢈ꣒ꢮꢗꢅ꣐ꢞ꣔ꢈꢐꢏꢈꢐꢑꢠꢈꢛꢍꢈ7Eh  
8000H  
8001H  
7EH  
56H  
9000H  
12  
6
23-Mar-11  
꣕꣑꣖ꢈꢈꢀꢃꢚ꣗ꢊꢕꢔꢈ꣘ꣅꢈꢉꢕꢖꢈꢣꢋꢈꢛꢔꢤꢝꢈꢶꢈ꣘ꢔꢦꢈ–ꢈ꣕ꢥꢜꢈ꣘꣋ng  
•ꢈ꣕꣑꣖ꢈꢈ꣐꣑ꢈ꣒ꢮꢗ꣚꣛ꢈ꣜ꢈ꣝ꢞꢈꢈꢈꢈꢚꢫꢈꢐꢏꢈꢐꢑꢠꢈꢛꢍꢈDDH,7EH,03H  
DDH  
7EH  
03H  
8000H  
8001H  
8002H  
56HH  
78H  
9000H  
9001H  
9002H  
9003H  
9AH  
ABH  
•ꢈ꣞ꢖꢔꢈꢚꢾꢉꢊꢈꢿ꣟ꢈꢰꢁꢈꢦꢥ꣠ꢉꢮꢈꢕꢏꢠꢈꢚꢕꢙꢈ꣘ꢔꢬꢦꢈꢉꣅꢔꢈꢣꢝꢉꢊꢈꢚꢳꢜꢈꢦꢕꢜꢉꢕꢈ  
ꢊꢕꢔꢈ꣒ꢈꢿꢜꢝꢈ꣡ꢕꢔꢈꢦꢕ꣏ꢚꢈꢦꢕꢔꢈꢚꢑꢚꢈꢛꢤnh sau:  
LD IX,9003H  
LD A,(IX-2)  
13  
Nhóm chuyển dữ liệu – Đọc/ghi bộ nhớ dữ liệu 16 bit  
•
•
ꢀꢃc bꣅ nhꢖ: dꢋ liꢤu 16 bit cꢩt  
vào thanh ghi 16 bit vꢖi ꢰꢱa chꢲ  
16 bit:  
•
Ghi vào bꣅ nhꢖ: dꢋ liꢤu 16 bit  
(꣣ thanh ghi 16 bit rp) vꢖi ꢰꢱa  
chꢲ 16 bit:  
LD rp, (nn)  
ngh꣢a là  
LD (nn),rp  
ngh꣢a là  
rp_L (nn) và rp_H (nn+1)  
(nn) rp_L và (nn+1) rp_H  
ꢀꢱnh ꢰꢱa chꢲ hiꣂu ngꢭm qua SP:  
PUSH rp  
ꢀꢱnh ꢰꢱa chꢲ hiꣂu ngꢭm qua  
SP:  
•
POP rp  
Ngh꣢a là  
Ngh꣢a là  
SP SP – 1, (SP) rp_H  
SP SP – 1, (SP) rp_L  
rp_L (SP), SP SP + 1  
rp_H (SP), SP SP + 1  
Chú ý:  
15  
8 7  
0
• rp_L là byte thꢩp cꢳa rp và rp_H là byte cao cꢳa rp  
• rp là 1 trong các thanh ghi 16 bit: BC, DE, HL, SP, IX, và IY  
• (nn) : ꢰꢱnh ꢰꢱa chꢲ [tr꣏c tiꢬp] m꣣ rꣅng (vì dꢋ liꢤu 16 bit)  
rp  
rp_H rp_L  
14  
7
23-Mar-11  
꣕꣑꣖ꢈꢈꢀꢃꢚ꣗ꢊꢕꢔꢈ꣘ꣅꢈꢉꢕꢖꢈꢣꢋꢈꢛꢔꢤu 16 bit  
•ꢈꢈ꣐꣑ꢈꢻꢨꢮꢈꢗ꣓ꢷꢷꢷꢅꢞꢈꢈꢈꢈꢈꢚꢫꢈꢐꢏꢈꢐꢑꢠꢈꢛꢍꢈꢈEDH, 4BH, 00H, 90H  
9000H  
56H  
9001H  
34H  
•ꢈꢈ꣐꣑ꢈꢗ꣓ꢷꢷꢷꢅꢞꢮꢈꢻꢨꢈꢈꢈꢈꢈꢚꢫꢈꢐꢏꢈꢐꢑꢠꢈꢛꢍꢈꢈEDH, 43H, 00H, 90H  
9000H  
78H  
9001H  
56H  
•ꢈꢈꢴ꣤ꣁꢅꢈꢻꢨꢈꢈꢚꢫꢈꢐꢏꢈꢐꢑꢠꢈꢛꢍꢈꢈꢨ꣥ꢅꢈꢗꢊꢔ꣋ꢈꢿꢄꢈꢦꢥꢸꢖꢚꢈ꣡ꢕꢔꢈꢦꢕ꣏c thi: SP = FEFDH)  
FEFAH  
FEFBH  
FEFCH  
FEFDH  
78H  
56H  
15  
16  
8
23-Mar-11  
17  
2. Nhóm số học và logic  
ꢀa sꣀ các lꢤnh thuꣅc nhóm này ꣋nh hꢸ꣣ng ꢰꢬn các  
cꢹ (mã ꢰi꣈u kiꢤn) trong thanh ghi F (Flag)  
• S (Sign) : sau phép toán thì nó S=MSB cꢳa kꢬt  
qu꣋=1(âm)/0(dꢸ꣟ng)  
• Z (Zero) : nꢬu kꢬt qu꣋ là 0 thì Z=1, ngꢸꢆc lꢧi Z=0  
• H (Half carry) : sꣀ nhꢖ tꢧi vꢱ trí bit th꣦ 3 trong phép toán +/-  
• P/V (Parity/Overflow) (kiꣂm tra ch꣧n l꣨/tràn trên)  
–P (với phép toán Logic): 1 (nꢬu sꣀ bit 1 trong A là ch꣧n = Even  
parity), ngꢸꢆc lꢧi thì P/V= 0(Odd)  
–V (với phép toán số học): = 1 khi có tràn vꢖi phép toán +/-  
• N: 1(sub)/0(add)  
• C (Carry): sꣀ nhꢖ tꢧi vꢱ trí bit th꣦ 7 trong phép toán +/-  
18  
9
23-Mar-11  
2.1 Nhóm số học 8 bit  
Phép toán  
Cꣅng  
Dạng lệnh  
Ý nghĩa  
ADD A,source A A + source  
ADC A,source A A + source + C  
Cꣅng có nh꣟  
Trꢼ  
SUB source  
A A – source (A hiꣂu ngꢭm)  
Trꢼ có mꢸꢆn  
So sánh  
SBC A,source A A – source – C  
CP source  
INC source  
DEC source  
Th꣏c hiꢤn A – source ꢰê  
source source + 1  
source source – 1  
̉ ꢰ꣎t các c꣟̀  
T꣉ng thêm 1  
Gi꣋m bꢖt 1  
Chú ý:  
• source có thꣂ là h꣆ng sꣀ, thanh ghi 8 bit (A,B,C,D,E,H,L) , (HL), (IX+d), (IY+d)  
• Các lꢤnh INC và DEC: source không ꢰꢸꢆc là h꣆ng sꣀ và Cꢹ C không bꢱ ꣋nh  
hꢸ꣣ng  
19  
• Cꢹ N = 1 sau các lꢤnh SUB, SBC, và DEC  
TD: Cꣅng/trꢼ 8 bit  
꣔ꢈꢀꢱnh ngh꣢a các h꣆ng sꣀ  
NUM1 EQU 25 ; NUM1 = 19H  
NUM2 EQU -17 ꣔ꢈNUM2 = EFH (bù 2 cꢳa 17)  
꣔ꢈThꢄ lꢤnh ADD vꢖi toán hꢧng 8 bit  
LD A,NUM1  
LD B,NUM2  
ADD A,B ; A A + B = 25 + (-17) = 8  
꣔ꢈThꢄ lꢤnh SUB vꢖi toán hꢧng 8 bit  
LD A,NUM1  
LD B,NUM2  
SUB B  
; A A - B = 25 - (-17) = 42  
20  
10  
23-Mar-11  
• Thí dụ: ꢀi꣈n các sô 0 vào các ô nh꣟ có ꢰꢱa chꢲ tꢸ  
ꢰꢬn 817FH.  
̀ 8100H  
ORG 8000H  
LD HL, 8100H  
LD A, 00H ;h꣆ng sô cꢭn nꢧp  
LD C, 80H ;Sꣀ lꢭn l꣎p = 817Fh – 8100h +1 =80h  
LOOP: LD (HL), A  
INC HL  
DECC  
JP NZ, LOOP; nꢬu C ≠ 0 quay lꢧi LOOP  
HALT  
END  
21  
22  
11  
23-Mar-11  
2.2 Nhóm số học 16 bit  
Phép toán  
Dạng lệnh  
Ý nghĩa  
ADD HL,ss  
ADD IX,pp  
ADD IY,rr  
HL HL + ss  
IX IX + pp  
IY IY + rr  
Cꣅng  
Cꣅng có nh꣟  
Trꢼ có mꢸꢆn  
T꣉ng thêm 1  
Gi꣋m bꢖt 1  
Chú ý:  
ADC HL,ss  
SBC HL,ss  
INC source  
DEC source  
HL HL+ ss + C  
HL HL+ ss – C  
source source + 1  
source source – 1  
• source có thꣂ là 1 trong các thanh ghi 16 bit (BC,DE,HL, SP, IX và IY)  
• ss có thꣂ là 1 trong các thanh ghi 16 bit (BC,DE,H,L, SP)  
• pp có thꣂ là 1 trong các thanh ghi 16 bit (BC,DE,IX, SP)  
• rr có thꣂ là 1 trong các thanh ghi 16 bit (BC,DE,IY, SP)  
23  
• Cꢹ C không bꢱ ꣋nh hꢸ꣣ng b꣣i các lꢤnh INC và DEC  
• Thí dụ: Viꢬt chꢸ꣟ng trình con MULT10 ꢰꣂ nhân 10 lꢭn giá trꢱ  
ꢰꢸꢆc cꢩt trong c꣎p thanh ghi HL và kꢬt qu꣋ cꢩt lꢧi vào HL (gi꣋  
sꢄ kꢬt qu꣋ tính không bꢱ tràn).  
MULT10:  
ADD HL, HL; HL 2 x HL  
LD  
LD  
D, H  
E, L  
; (HL)=>(DE)  
ADD HL, HL; 4 x HL  
ADD HL, HL; 8 x HL  
ADD HL, DE  
; (8+2) x HL = 10 x HL  
RET  
24  
12  
23-Mar-11  
TD: Cꣅng/trꢼ 16 bit vꢖi h꣆ng sꣀ  
꣔ꢈꢀꢱnh ngh꣢a h꣆ng sꣀ  
BIN16_1 EQU 2578 ; = 0A12H  
BIN16_2 EQU 1289 ; = 0509H  
; Thu lenh ADD voi toan hang 16 bit dung cap thanh ghi HL, DE  
LD DE,BIN16_1  
LD HL,BIN16_2  
ADD HL,DE ; HL <- HL + DE = 1289 + 2578 = 3867 = 0F1BH  
; Thu lenh SBC voi toan hang 16 bit dung cap thanh ghi HL, DE  
SCF ;set cꢹ Carry  
CCF ;lꢩy bù cꢹ Carry= Xoa co Carry (CF=0)  
꣔
ho꣎c có thꣂ dùng 1 lꢤnh AND A  
LD DE,BIN16_1  
LD HL,BIN16_2  
25  
SBC HL,DE ; HL <- HL - DE = 1289 - 2578 = -1289 = FAF7H  
TD: Cꣅng/trꢼ 16 bit vꢖi biꢬn sꣀ (1)  
; Thu lenh ADD voi toan hang 16 bit dung  
thanh ghi 8 bit  
LD IX,BIN16_1 ; Lay byte thap truoc  
LD A,(IX)  
꣔ꢈꢰꢱnh ngh꣢a các biꢬn  
LD IY,BIN16_2  
BIN16_1: DEFW 1289 ; 0509h  
BIN16_2: DEFW 2578 ; 0A12h  
RESULT: DEFS 2  
LD B,(IY)  
ADD A,B  
LD DE,RESULT  
LD (DE),A  
END  
Chú ý: Các chỉ dẫn (directive)  
của trình hợp ngữ (assembler)  
INC IX  
; Pointer chi den byte cao  
INC IY  
INC DE  
LD A,(IX)  
LD B,(IY)  
ADC A,B  
LD (DE),A  
HALT  
• DEFW hay DW: define word  
• DEFS hay DS: define space  
26  
13  
23-Mar-11  
TD: Cꣅng/trꢼ 16 bit vꢖi biꢬn sꣀ (2)  
; Thu lenh ADD voi toan hang 16 bit dung cap thanh ghi HL, DE  
LD DE,(BIN16_2)  
LD HL,(BIN16_1)  
;
;
DE = 2578 = 0A12h  
HL = 1289 = 0509h  
ADD HL,DE ; HL <- HL + DE = 1289 + 2578 = 3867 = 0F1BH  
LD (RESULT_1),HL  
; Thu lenh SBC voi toan hang 16 bit dung cap thanh ghi HL, DE  
SCF  
CCF ꣔ꢈXoa co Carry (CF=0) ho꣎c có thꣂ dùng 1 lꢤnh AND A  
LD DE,(BIN16_2)  
LD HL,(BIN16_1)  
SBC HL,DE ; HL <- HL - DE = 1289 - 2578 = -1289 = FAF7H  
LD (RESULT_2),HL  
HALT  
꣔ꢈꢰꢱnh ngh꣢a các biꢬn  
BIN16_1:  
DEFW 1289 ; 0509h  
DEFW 2578 ; 0A12h  
BIN16_2:  
RESULT_1:  
RESULT_2:  
DEFS 2  
DEFS 2  
27  
END  
28  
14  
23-Mar-11  
29  
2.3 Nhóm số học đa dụng  
Phép toán  
Dạng lệnh  
Ý nghĩa  
ꢀi꣈u chꢲnh th꣄p  
phân (BCD) sau  
Chuyꣂn ꢰ꣊i nꣅi dung cꢳa A sang  
BCD nén sau phép toán cꣅng/trꢸ  
DAA  
̀
phép cꣅng/trꢸ  
̀
vꢖi các toán hꢧng BCD  
Lꢩy bù 1  
CPL  
NEG  
CCF  
SCF  
A NOT(A)  
Lꢩy bù 2  
A 0 – A = – A  
C NOT(C)  
C 1  
Lꢩy bù cꢹ nhꢖ  
ꢀ꣎t cꢹ nhꢖ lên 1  
30  
15  
23-Mar-11  
TD: Cꣅng 2 sꣀ BCD 4 digit  
; Cong 2 so BCD 4 digits  
LD IX,BIN16_1 ; Lay byte thap truoc  
LD A,(IX)  
LD IY,BIN16_2  
LD B,(IY)  
ADD A,B  
DAA  
LD DE,RESULT  
LD (DE),A ; Cat 2 ky so BCD thap truoc cua ket qua  
INC IX  
; Pointer chi den byte cao  
INC IY  
INC DE  
LD A,(IX)  
LD B,(IY)  
ADC A,B  
DAA  
LD (DE),A ; Cat 2 ky so BCD cao truoc cua ket qua  
HALT  
BIN16_1: DEFW 1289H; Bieu dien BCD cua 1289  
BIN16_2: DEFW 2578H; Bieu dien BCD cua 2578  
RESULT: DEFS 2  
31  
END  
TD: Tính bù 2 cꢳa 1 sꣀ 16 bit trong bꣅ nhꢖ  
org 100H  
; Lay bu 2 cua 1 so 16 bit NUM1 trong bo nho o dia chi 200H  
; va cat lai vao bien 16 bit NUM2 trong bo nho o dia chi 202H  
LD HL,(NUM1) ; Neu (NUM1) = 56D3H  
LD A,L  
CPL  
; tinh bu 1 cua byte thap  
LD L,A  
LD A,H  
CPL  
; tinh bu 1 cua byte cao  
LD H,A  
INC HL  
LD (NUM2),HL ; thi bu 2 cua no o (NUM2) = A92DH  
HALT  
org 200H  
NUM1: defw 56D3H  
NUM2: defs 2꣔ꢈbù 2 cꢳa 56D3H là A92DH  
NUM3: defs 2  
END  
32  
16  
23-Mar-11  
2.4 Nhóm Logic 8 bit  
Phép toán  
AND  
Dạng lệnh  
AND source  
OR source  
XOR source  
Ý nghĩa  
A A AND source  
A A OR source  
A A XOR source  
OR  
XOR  
Chú ý:  
• Thanh ghi A là toán hꢧng hiꣂu ngꢭm  
• source có thꣂ là h꣆ng sꣀ, thanh ghi 8 bit (A,B,C,D,E,H,L) , (HL), (IX+d), (IY+d)  
• Th꣏c hiꢤn phép toán logic cho tꢼng c꣎p bit tꢸ꣟ng ꣦ng cꢳa 2 toán hꢧng  
• Cꢹ PV cho biꢬt trꢱ parity ch꣧n (=1 nꢬu sꣀ bit 1 trong kꢬt qu꣋ là sꣀ ch꣧n)  
• Cꢹ C luôn luôn = 0 sau lꢤnh logic! => dùng ꢰꣂ xóa cꢹ C  
33  
TD: Các lꢤnh Logic  
; Hieu ung cap nhat co Parity sau lenh LOGIC  
LD A,1  
AND 0FFH ꣔P/V=0 (do sꣀ bit 1 cꢳa kꢬt qu꣋ AND là l꣨ = 00000001b)  
LD A,3  
AND 0FFH ꣔P/V=1 (do sꣀ bit 1 cꢳa kꢬt qu꣋ AND là ch꣧n=00000011b)  
꣔ꢈTính bù 1 cꢳa 1 sꣀ nhꢱ phân trong thanh ghi A  
LD A,24  
; A = 18h  
XOR 0FFh ; A = 18h XOR FFh = E7h  
꣔ꢈꢀ꣎t 1 bit lên 1 b꣆ng cách OR vꢖi 1 tꢧi vꢱ trí ꢰó  
LD A,25h  
; A = 00100101b  
OR 01001000b  
; A = A OR 48h = 01101101b = 6Dh  
34  
17  
23-Mar-11  
3. Nhóm xoay và dịch bit  
3.1 Nhóm xoay bit  
Phép toán  
Dạng lệnh  
RLCA  
Ý nghĩa  
Xoay tròn  
qua trái  
RLC X  
RRCA  
Xoay tròn  
qua ph꣋i  
RRC X  
RLA  
Xoay trái  
RL  
X
X
RRA  
RR  
Xoay ph꣋i  
Chú ý:  
• X có thꣂ là A, B, C, D, E, H, L, (HL), (IX+d), (IY+d)  
• Vꢖi xoay trái cꢹ C = MSB c꣩ cꢳa toán hꢧng  
• Vꢖi xoay ph꣋i cꢹ C = LSB c꣩ cꢳa toán hꢧng  
35  
TD: ꢀ꣊i sô BCD 2 ky sô (nén) sang biꣂu di꣍n ASCII tꢸ꣟ng ꣦ng  
; TD: A = 25H (BCD cꢳa 25) thi  
; trong D va E ( D = 32H va E = 35H)  
BCD_ASCII:  
LD C,A  
̀ chuyꣂn sang ASCII là 32H (‘2’) và 35H (‘5’)  
̀
̀
; C = A = xyH vꢖi x,y = 0 ꢁ 9  
AND 0F0H  
RRA  
; A = x0H  
RRA  
RRA  
RRA  
; lay nua byte cao: A = 0xH  
OR 30H  
LD D,A  
LD A,C  
AND 0FH  
OR 30H  
LD E,A  
RET  
; Doi sang ASCII tuong duong: A = 3xH  
; D = 3xH  
; A = xyH  
; lay nua byte thap: A = 0yH  
; Doi sang ASCII tuong duong: A = 3yH  
; E = 3yH  
Chú ý:  
• Nꣅi dung cꢳa thanh ghi A bꢱ thay ꢰ꣊i trong chꢸ꣟ng trình con này!  
• Lꢤnh OR 30H có thê ꢰꢸꢆc thay b꣆ng lꢤnh ADD A,30H có cùng kꢬt qu꣋!  
36  
̉
18  
23-Mar-11  
TD: ꢀ꣊i sang biꣂu di꣍n ASCII cꢳa 2 ky sô BCD sang  
sô BCD 2 ky sô (nén)  
; TD: Biꣂu di꣍n ASCII cꢳa 25 trong D và E ( D = 32H và E = 35H) ꢰꢸꢆc  
; chuyꣂn thành BCD nén 2 ky sô ꣣ A = 25H (BCD cꢳa 25)  
ASCII_HEX:  
LD A,D  
AND 0FH  
RLA  
; A = D = 3xH  
; A = 0xH  
RLA  
RLA  
RLA  
LD C,A  
LD A,E  
AND 0FH  
ADD A,C  
RET  
; C = A = x0H  
; A = 3yH  
; A =0yH  
; A = x0H + 0yH = xyH  
Chú ý:  
•
Chꢸ꣟ng trình này làm thay ꢰ꣊i nꣅi dung các thanh ghi A và C.  
37  
3.2 Nhóm xoay digit  
Dạng  
lệnh  
Phép toán  
Ý nghĩa  
Xoay trái digit  
RLD  
(HL)  
(HL)  
Xoay ph꣋i  
digit  
RRD  
Chú ý:  
• Tác ꢰꣅng thanh ghi A và nꣅi dung bꣅ nhꢖ có ꢰꢱa chꢲ trong HL  
• Có ý ngh꣢a khi xoay trái/ph꣋i sꣀ BCD nén có 3 ký sꣀ (digit)  
38  
19  
23-Mar-11  
3.3 Nhóm dịch bit  
Phép toán  
Dạng lệnh  
Ý nghĩa  
Dꢱch trái sô hꢃc SLA X  
Dꢱch ph꣋i sꣀ hꢃc SRA X  
Dꢱch ph꣋i logic  
SRL  
X
Chú ý:  
• X có thꣂ là A, B, C, D, E, H, L, (HL), (IX+d), (IY+d)  
• Không có lꢤnh dꢱch trái logic SLL vì hiꢤu ꣦ng giꣀng nhꢸ SLA  
39  
TD: Hiꢤu ꣦ng cꢳa các lꢤnh dꢱch bit  
LD  
A, 11  
A
A
A
A
; A = 0000 1011b = 11  
SLA  
SLA  
SRA  
SRA  
SRA  
LD  
; A = 0001 0110b = 22 = 11 x 2  
; A = 0010 1100b = 44 = 22 x 2  
; A = 0001 0110b = 22 = 44 /2  
; A = 0000 1011b = 11 = 22 /2  
; A = 0000 0101b = 05 = 11 /2  
A
A, -22 ; A = 1110 1010b = -22  
SRA  
SRA  
SLA  
SRL  
SRL  
A
A
A
A
A
; A = 1111 0101b = -11 = -22/2  
; A = 1111 1010b = -6 = -11/2  
; A = 1111 0100b = -12 = -6x2  
; A = 0111 1010b = 123  
; A = 0011 1101b = 61 =123/2  
NX:  
– Có thê  
ph꣋i ꢰê  
– Vꢖi có dꢩu thi  
̉
chia nguyên cho 2: dùng dꢱch trái ꢰê  
chia ꢰôi.  
ph꣋i dùng SLA va  
v꣄n dꢽng phép toán dꢱch va  
nhân/chia!  
̉
nhân ꢰôi ho꣎c dꢱch  
̉
̀
̀
SRA  
cꣅng ꢰê  
– Có thê  
̉
̀
̉ th꣏c hiꢤn phép toán  
40  
20  
Tải về để xem bản đầy đủ
pdf 36 trang myanh 22300 Free
Bạn đang xem 20 trang mẫu của tài liệu "Bài giảng Vi xử lý - Chương 2: Kiến trúc CPU và tập lệnh (Phần 2) - Hồ Trung Mỹ", để tải tài liệu gốc về máy hãy click vào nút Download ở trên

File đính kèm:

  • pdfbai_giang_vi_xu_ly_chuong_2_kien_truc_cpu_va_tap_lenh_phan_2.pdf