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

02-Mar-11  
ĐHBK Tp HCM-Khoa Đ-ĐT  
BMĐT  
Nꢀi dung  
GVPT: Hồ Trung Mỹ  
Môn học: Vi Xử Lý  
2.1 Sꢁ ꢂꢃ KHꢄI CPU 8 BIT Cꢁ BꢅN  
2.2 Tꢆ CHꢇC CÁC THANH GHI  
2.3 Tꢆ CHꢇC Bꢈ NHꢉ  
Chương 2  
2.4 GHÉP NꢄI BUS Hꢊ THꢄNG  
2.5 CHU Kꢋ BUS, CHU Kꢋ MÁY  
2.6 CÁC PHƯꢁNG PHÁP ꢂꢌNH ꢂꢌA CHꢍ  
2.7 TꢎP LꢊNH  
KIẾN TRÚC CPU VÀ TẬP LỆNH  
Vi xử lý  
Bus nội và ngoại  
• Bus nꢀi (Internal bus) là ꢏꢐꢑng dꢒn ꢏꢓ truyꢔn  
dꢕ liꢖu giꢕa các thanh ghi và ALU trong VXL  
• Bus ngoꢗi (External bus) dùng cho bên ngoài  
nꢘi ꢏꢙn RAM, ROM và I/O  
• Có nhiꢀu lꢁai vi xꢂ lý (VXL) tꢃ rꢄt ꢅꢆn giꢇn ꢅꢈn rꢄt  
phꢉc tꢊp  
• Phꢋ thuꢌc vào ꢅꢌ rꢌng bus dꢍ liꢎu và thanh ghi và  
ALU, có các VXL 4 bit , 8 bit , 16bit, 32 bit , 64 bit …  
• Thí dꢋ  
– Z80 là VXL 8 bit  
• ꢂꢀ rꢀng cꢚa bus nꢀi và ngoꢗi có thꢓ khác nhau.  
– 8086/88 là VXL 16 bit  
• Thí dꢛ  
• Tꢄt cꢇ các VXL có  
– 8088: bus nꢀi là 16 bit, bus ngoꢗi là 8 bit  
– Bus ꢅꢏa chꢐ  
– 8086: bus nꢀi là 16 bit, bus ngoꢗi là 16 bit  
– Bus dꢍ liꢎu  
– Các tín hiꢎu ꢅiꢀu khiꢑn: RD, WR, CLK , RST, INT, . . .  
2.1 SƠ ĐỒ KHỐI  
CPU 8 BIT CƠ BẢN  
1
02-Mar-11  
Các ꢏꢐꢑng tín hiꢖu  
Sꢆ ꢅꢒ chꢉc nꢓng và gán chân ꢔ chip Z80  
• Có 6 nhóm tín hiꢖu:  
– Bus ꢏꢜa chꢝ 16 ꢏꢐꢑng (A0 ꢏꢙn A15)  
– Bus dꢕ liꢖu 8 ꢏꢐꢑng (D0 ꢏꢙn D7)  
– 6 ꢏꢐꢑng ꢏiꢔu khiꢓn hꢖ thꢘng  
– 5 ꢏꢐꢑng ꢏiꢔu khiꢓn CPU  
– 2 ꢏꢐꢑng ꢏiꢔu khiꢓn bus CPU (  
)
– 3 ꢏꢐꢑng dành cho nguꢞn cꢟp ꢏiꢖn và xung nhꢜp  
(+5V, GND, và CLK)  
Mô tả chân Z80  
Mô tả chân Z80  
A15-A0 :  
MREQ  
Bus ꢅꢏa chꢐ (xuꢄt, tích cꢕc cao, 3-state).  
Dùng ꢅꢑ truy cꢖp bꢌ nhꢗ va các cꢘng I/O  
Memory Request (output, active Low, 3-state). Indicates  
memory read/write operation. See M1  
Trong chu kꢙ làm tưꢆi I ꢅưꢚc ꢅꢛt trên bus này.  
IORQ  
Input/Output Request(output,active Low,3-state) Indicates  
D7-D0 :  
I/O read/write operation. See M1  
Bus dꢍ liꢎu (nhꢖp/xuꢄt, tích cꢕc cao, 3-state). Dùng ꢅꢑ  
trao ꢅꢘi dꢍ liꢎu vꢗi bꢌ nhꢗ , I/O và ngꢜt.  
M1  
Machine Cycle One (output, active Low).  
RD:  
Together with MREQ indicates opcode fetch cycle  
Together with IORQ indicates an Int Ack cycle  
ꢝꢁc (xuꢄt, tích cꢕc thꢄp, 3-state) cho biꢈt CPU muꢞn ꢅꢁc  
dꢍ liꢎu tꢃ bꢌ nhꢗ hay I/O  
RFSH  
Refresh (output, active Low).  
WR:  
Ghi (xuꢄt, tích cꢕc thꢄp, 3-state) cho biꢈt bus dꢍ liꢎu  
CPU giꢍ dꢍ liꢎu hꢚp lꢎ sꢟ ꢅưꢚc cꢄt vào bꢌ nhꢗ hay thiꢈt  
Together with MREQ indicates refresh cycle.  
Lower 7-bits address is refresh address to DRAM  
bꢏ I/O.  
Mô tả chân Z80  
ꢀINT  
Mô tả chân Z80  
ꢀBUSREQ  
ꢁInterrupt Request (input, active Low).  
ꢁInterrupt Request is generated by I/O  
devices.  
ꢁBus Request (input, active Low).  
ꢁhigher priority than NMI  
ꢁrecognized at the end of the current  
machine cycle.  
ꢁChecked at the end of the current  
instruction  
ꢁIf flip-flop (IFF) is enabled.  
ꢀNMI  
ꢁforces the CPU address bus, data  
bus, and MREQ, IORQ, RD, and WR to  
high-imp.  
ꢁNon-Maskable Interrupt  
ꢁ(Input, negative edge-triggered).  
ꢁHigher priority than INT.  
ꢁRecognized at the end of the current  
Instruction  
ꢁIndependent of the status of IFF  
ꢁForces the CPU to restart at location 0066H.  
ꢀBUSACK  
ꢁBus Acknowledge (output, active,Low)  
ꢁindicates to the requesting device  
that address, data, and control signals  
MREQ, IORQ, RD, and WR have  
entered their high-impedance states.  
2
02-Mar-11  
Mô tả chân Z80  
Kiến trúc hệ thống  
RESET  
Reset (input, active Low).  
RESET initializes the CPU as follows:  
Resets the IFF  
Clears the PC and registers I and R  
Sets the interrupt status to Mode 0.  
During reset time, the address and data  
bus go to a high-impedance state And all  
control output signals go to the inactive  
state.  
must be active for a minimum of three full  
clock cycles before the reset operation is  
complete.  
Z80 CPU  
B
U
F
8
INTERNAL DATA BUS (8 BIT)  
F
E
R
DATA BUS  
MUX  
MUX  
F
A
TMP  
INSTRUCTION  
REGISTER  
W'  
Z'  
W
B
Z
I
R
A'  
F'  
B'  
C'  
C
2.2 TỔ CHỨC CÁC THANH GHI  
D'  
H'  
E'  
L'  
D
H
E
L
ACT  
DECODER  
IX  
IY  
SP  
PC  
ALU  
CONTROLLER  
SEQUENCER  
k
k
CONTROL  
SECTION  
ADDRESS BUS  
CONTROL BUS  
B
U
F
16  
INTERNAL ADDRESS BUS (16 BIT)  
F
E
R
B
U
F
13  
INTERNAL CONTROL BUS  
F
E
R
Mô hình lập trình Z80  
Tập thanh ghi  
• A : Accumulator Register  
• F : Flag register  
• Two sets of six general-purpose registers  
– may be used individually as 8-bit A F B C D E H L (A’ F’ B’ C’ D’ E’  
H’ L’)  
– or in pairs as 16-bit registers AF BC DE HL (AF’ BC’ DE’ HL’)  
• The Alternative registers (A’ F’ B’ C’ D’ E’ H’ L’) not  
visible to the programmer but can access via:  
– EXX  
(BC)<->(BC') , (DE)<->(DE') , (HL)<->(HL')  
– EX AF, AF’ (AF)<->(AF')  
what is this instruction useful for?  
3
02-Mar-11  
Tập thanh ghi (tt)  
Thanh ghi cờ (Flag Register)  
7
6
5
4
3
2
1
0
• 4 16-bit registers hold memory address (pointers)  
– index registers (IX) and (IY) are 16-bit memory pointers  
– 16 bit stack pointer (SP)  
P
S Z X H X  
N C  
V
S Sign Flag (1:negativ)*  
Z Zero Flag (1:Zero)  
– Program counter (PC)  
• Program counter (PC)  
H Half Carry Flag (1: Carry from Bit 3 to Bit 4)**  
P Parity Flag (1: Even)  
– PC points to the next opcode to be fetched from ROM  
– when the µP places an address on the address bus to fetch the  
byte from memory, it then increments the program counter by  
one to the next location  
V Overflow Flag (1:Overflow)*  
N Operation Flag (1:previous Operation was subtraction)**  
C Carry Flag (1: Carry from Bit n-1 to Bit n,  
with n length of operand)  
• Special purpose registers  
– I : Interrupt vector register.  
– R : memory Refresh register  
*: 2-complement number representation  
**:  
used in DAA-operation for BCD-arithmetic  
DAA - Decimal Adjust Accumulator  
Adjusts the content of the Accumulator A for BCD addition and subtraction  
operations such as ADD, ADC, SUB, SBC, and NEG according to the table:  
Stack Pointer (SP)  
Dùng làm con trꢠ chꢐ ꢅꢈn  
stack bꢌ nhꢗ ngoài  
•
•
before DAA  
Bits 4-7  
after DAA  
A=A+..  
Khi ꢅưa dꢍ liꢎu vào  
15  
0
Op  
N
C
H
Bits 0-3  
C
Data  
stack (PUSH), SP giꢇm ꢅi 2  
(toán hꢊng 2 byte).  
0
0
0
0
0
0
0
0
0
1
1
1
1
0
0
0
0
0
0
1
1
1
0
0
1
1
0-9  
0-8  
0-9  
A-F  
9-F  
A-F  
0-2  
0-2  
0-3  
0-9  
0-8  
7-F  
6-F  
0
0
1
0
0
1
0
0
1
0
1
0
1
0-9  
A-F  
0-3  
0-9  
A-F  
0-3  
0-9  
A-F  
0-3  
0-9  
6-F  
0-9  
6-F  
00  
06  
06  
60  
66  
66  
60  
66  
66  
00  
FA  
A0  
9A  
0
0
0
1
1
1
1
1
1
0
0
1
1
•
•
Khi lꢄy dꢍ liꢎu ra khꢠi stack  
(POP), SP tꢓng thêm 2 (toán  
hꢊng 2 byte).  
ADD  
ADC  
Vì Z80 theo little endian nên  
byte thꢄp cꢡa dꢍ liꢎu sꢟ ꢔ ꢅꢏa  
chꢐ thꢄp  
SUB  
SBC  
NEG  
Tꢘ chꢉc bꢌ nhꢗ  
• Tꢘ chꢉc bꢌ nhꢗ tùy theo ꢉng dꢋng khác nhau ta có  
các tꢘ chꢉc khác nhau và tùy theo ROM, SRAM,  
DRAM mà ta có các kꢈt nꢞi tín hiꢎu ꢅiꢀu khiꢑn khác  
nhau.  
2.3 TỔ CHỨC BỘ NHỚ  
• Vꢗi ꢅꢏa chꢐ 16 ꢅưꢢng (A0 ꢅꢈn A15), Z80 có thꢑ làm  
viꢎc ꢅꢈn tꢞi ꢅa 64KB bꢌ nhꢗ.  
• Tám ꢅưꢢng ꢅꢏa chꢐ thꢄp (A0 ꢅꢈn A7) cꢣng ꢅưꢚc dùng  
ꢅꢑ truy cꢖp tꢗi 256 cꢘng I/O.  
• ꢝꢑ minh hoꢊ phꢤn này ta sꢟ khꢇo sát mꢌt sꢞ thí dꢋ.  
4
02-Mar-11  
Giao tiếp ROM 1KB và 2 RAM 256 x 4  
Giao tiếp với RAM  
A9..A0  
A7..A0  
A7..A0  
Ta muꢞn Z80 kꢈt nꢞi vꢗi các bꢌ nhꢗ (vꢗi các chip ROM 1K x 8 và  
RAM 256 x 4) theo bꢇng bꢌ nhꢗ sau  
ROM 1 KB : 0000H–03FFH  
RAM 256 bytes : 0400H–04FFH  
Thí dụ giao tiếp DRAM 8 KB xây dựng  
từ các DRAM 4KB  
Giao tiếp với SRAM 1KB  
Hệ máy tính Z80 tối thiểu  
2.4 GHÉP NỐI BUS HỆ THỐNG  
5
02-Mar-11  
Thí dụ sơ đồ phần cứng một kit dựa trên Z80  
Mở rộng giao tiếp cho Z80  
•
ꢝꢑ có thꢑ mꢔ rꢌng giao tiꢈp cho Z80, hãng Zilog ꢅã phát triꢑn các  
chip hꢥ trꢚ sau:  
– Z80 PIO là bꢌ ꢅiꢀu khiꢑn I/O song song, nó làm cho Z80 mꢔ rꢌng  
thêm thành 2 cꢘng I/O song song 8 bit. Chip còn có thêm ꢅưꢢng  
tꢊo ngꢜt cho Z80 và cho phép nꢞi logic OR các chân này lꢊi.  
– Z80 CTC là mꢊch bꢌ ꢅꢈm-ꢅꢏnh thì (counter-timer circuit) ꢅꢑ cho  
ngưꢢi thiꢈt kꢈ hꢎ thꢞng Z80 sꢂ dꢋng nó thꢕc hiꢎn các chꢉc nꢓng  
ꢅꢈm và ꢅꢏnh thì.  
– Z80 SIO là mꢊch nhꢖp/xuꢄt nꢞi tiꢈp (Serial Input/Output Circuit),  
chip này cung cꢄp cho hꢎ Z80 vꢗi 2 cꢘng nꢞi tiꢈp mà có thꢑ sꢂ  
dꢋng ꢅꢑ liên lꢊc vꢗi các thiꢈt bꢏ ngoꢊi vi nꢞi tiꢈp khác.  
–
Z80 DMA thꢕc hiꢎn viꢎc truy cꢖp bꢌ nhꢗ trꢕc tiꢈp vꢗi thiꢈt bꢏ ngoài.  
Chu kỳ lệnh, chu kỳ máy và các trạng thái T  
• Chu kꢢ lꢖnh là thꢑi gian cꢣn ꢏꢓ hoàn tꢟt viꢖc thꢤc  
thi mꢀt lꢖnh.  
2.5 CHU KỲ BUS, CHU KỲ MÁY  
• Chu kꢢ máy ꢏꢐꢥc ꢏꢜnh nghꢦa là thꢑi gian cꢣn hoàn  
tꢟt mꢀt tác vꢛ truy cꢧp bꢀ nhꢡ, truy cꢧp I/O,…  
(Vꢡi Z80, chu kꢢ máy có thꢓ kéo dài tꢨ 3 ꢏꢙn 6 chu  
kꢢ xung nhꢜp )  
• T-state = 1/f (f: tꢣn sꢘ Clock cꢚa Z80)  
– f= 4MHZ ꢂ T-state=0.25 uS  
Thí dụ định thì CPU Z80  
chu kỳ máy  
Có 7 chu kꢙ máy vꢗi Z80:  
1. Nhꢖn mã lꢎnh (chu kꢙ M1)  
2. ꢝꢁc hoꢛc ghi dꢍ liꢎu bꢌ nhꢗ  
3. ꢝꢁc hoꢛc ghi I/O  
4. Yêu cꢤu/ghi nhꢖn bus (Bus Request/Acknowledge)  
5. Yêu cꢤu/ghi nhꢖn INT  
6. Yêu cꢤu/ghi nhꢖn NMI  
Chú ý;  
7. Thoát khꢠi lꢎnh HALT  
•
•
•
1 chu kꢢ lꢖnh (Instruction Cycle) = 1 ꢂ 6 chu kꢢ máy (Machine Cycle)  
1 chu kꢢ máy (Machine Cycle) = 3 ꢂ 6 chu kꢢ T (T Cycle)  
1 chu kꢢ T = 1/fCLK (fCLK ꢩꢪtꢣn sꢘ cꢚa thꢗch anh gꢫn vào Z80)  
6
02-Mar-11  
Thanh ghi R (Refresh)  
Chu kỳ nhận lệnh (chu kỳ M1)  
• ꢂꢐꢥc tꢠng ꢬ mꢭi chu kꢢ M1.  
• Bit 7 cꢚa nó không bao giꢑ bꢜ thay ꢏꢮi bꢬi M!;  
chꢝ có 7 bit thꢟp tham gia trong phép cꢀng. Vì  
vꢧy bit 7 giꢕ nguyên trꢜ cꢯ.  
• Ta chꢝ có thꢓ thay ꢏꢮi bit 7 bꢰng lꢖnh LD R,A  
• LD A,R và LD R,A truy cꢧp thanh ghi R sau khi  
nó ꢏꢐꢥc tꢠng  
• R thꢐꢑng ꢏꢐꢥc dùng làm giá trꢜ ngꢒu nhiên  
trong chꢐơng trình nhꢐng dꢦ nhiên nó thꢧt sꢤ  
không ngꢒu nhiên.  
Thêm mꢌt trꢊng thái ꢅꢚi vào chu kꢙ T1  
Chu kỳ đọc hoặc ghi bộ nhớ  
Chu kỳ nhập hoặc xuất  
(Input or Ouput Cycle)  
Thêm trạng thái đợi vào bất kỳ  
chu kỳ bộ nhớ nào  
During I/O operations a single wait state is automatically inserted  
7
02-Mar-11  
Chu kỳ yêu cầu/ghi nhận ngắt  
Chu kỳ yêu cầu bus/ ghi nhận  
Two wait states are automatically added to this cycle  
Chu kỳ yêu cầu/ghi nhận bus với NMI  
Chu kỳ làm tươi M1  
• Takes 4T to 6Ts  
• Z80 includes built in circuitry for refreshing  
DRAM  
• This simplifies the external interfacing  
hardware  
• DRAM consists of MOS transistors, which  
store Information as capacitive charges;  
each cell needs to be periodically refreshed  
• During T3 and T4 (when Z80 is performing  
internal ops), the low order address is used  
to supply a 7-bit address for refresh  
Ngắt (Interrupt)  
Tín hiệu Wait  
There are two types of interrupts:  
• the Z80 samples the wait signal during T2 if  
low then Z80 adds wait  
• non mask-able (NMI)  
– Could not be masked  
– Jump to 0066H of memory  
• states to extend the machine cycle  
• mask-able(INT)  
– Has 3 mode  
• used to interface memories with slow  
response time  
– Can be set with the IM x Instruction  
– IM 0 sets Interrupt mode 0  
– IM 1 sets Interrupt mode 1  
– IM 2 sets Interrupt mode 2  
• Slow memory is low cost  
8
02-Mar-11  
Các chế độ ngắt  
• Mode 0:  
– An 8 bit opcode is Fetched from Data BUS and executed  
– The source interrupt device must put 8 bit opcode at data  
bus  
– 8 bit opcode usually is RST p instructions  
• Mode 1:  
– A jump is made to address 0038h  
– No value is required at data bus  
• Mode 2:  
– A jump is made to address (register I × 256 + value from  
interrupting device that puts at bus)  
– I is high 8 bit of interrupt vector  
– Value is low 8 bit of interrupt vector  
ꢂꢜnh thì RESET  
Chu kỳ thoát khỏi HALT  
ꢂiꢔu kiꢖn thoát: INT, NMI, RESET  
CPU Reset  
2.6 CÁC PHƯƠNG PHÁP  
ĐỊNH ĐỊA CHỈ  
9
02-Mar-11  
Định địa chỉ trong Z80  
Phꢤn lꢗn các lꢎnh Z80 làm viꢎc vꢗi dꢍ liꢎu ꢅưꢚc lưu trꢍ trong  
các thanh ghi CPU, bꢌ nhꢗ ngoài, hoꢛc trong các cꢘng I/O. Z80  
có cách ꢅꢏnh ꢅꢏa chꢐ sau:  
ꢀꢁnh ꢂꢁa chꢃ tꢄc thꢅi  
• Byte theo sau mã lꢎnh là toán hꢊng thꢖt.  
•
– ꢀꢁnh ꢂꢁa chꢃ tꢄc thꢅi (hꢆng sꢇ 8 bit)  
– ꢀꢁnh ꢂꢁa chꢃ tꢄc thꢅi mꢈ rꢉng (hꢆng sꢇ 16 bit)  
– ꢀꢁnh ꢂꢁa chꢃ trꢊc tiꢋp (ꢂꢁa chꢃ 8 bit)  
– ꢀꢁnh ꢂꢁa chꢃ trꢊc tiꢋp mꢈ rꢉng (ꢂꢁa chꢃ 16 bit)  
– ꢀꢁnh ꢂꢁa chꢃ trang 0 (có sꢌa ꢂꢍi)  
– ꢀꢁnh ꢂꢁa chꢃ tương ꢂꢇi  
• Thí dꢋ cꢡa loꢊi lꢎnh này là nꢊp hꢦng sꢞ vào  
thanh ghi tích lꢣy.  
– ꢀꢁnh ꢂꢁa chꢃ theo chꢃ sꢇ  
Thí dꢋ:  
LD A, 10H  
– ꢀꢁnh ꢂꢁa chꢃ thanh ghi  
– ꢀꢁnh ꢂꢁa chꢃ hiꢎu ngꢏm  
– ꢀꢁnh ꢂꢁa chꢃ gián tiꢋp qua thanh ghi  
– ꢀꢁnh ꢂꢁa chꢃ cho bit  
ꢀꢁnh ꢂꢁa chꢃ tꢄc thꢅi mꢈ rꢉng  
ꢀꢁnh ꢂꢁa chꢃ trꢊc tiꢋp  
• Cung cꢄp ꢅꢏa chꢐ 8 bit cꢡa toán hꢊng ngay sau  
mã lꢎnh  
• Hai byte theo sau mã lꢎnh là toán hꢊng thꢖt.  
• TD: IN A, (20H)  
• Thí dꢋ cꢡa loꢊi lꢎnh này là nꢊp dꢍ liꢎu 16 bit  
vào cꢛp thanh ghi (thí dꢋ HL).  
Thí dꢋ:  
LD HL, 8010H  
Định địa chỉ [trực tiếp] mở rộng  
ꢀꢁnh ꢂꢁa chꢃ trang 0 (có sꢌa ꢂꢍi)  
• Z80 có lꢎnh CALL ꢅꢛc biꢎt 1 byte ꢅꢑ nhꢇy ꢅꢈn 8 vꢏ trí  
(chꢐ bꢔi nhóm bit b5b4b3) cꢡa trang 0 cꢡa bꢌ nhꢗ. Lꢎnh  
này ꢅưꢚc thꢕc thi như khꢔi ꢅꢌng lꢊi, nó ꢅꢛt PC có giá  
trꢏ ꢅꢏa chꢐ thꢖt ꢔ trang 0. Giá trꢏ cꢡa lꢎnh này là cho  
phép dùng 1 byte ꢅꢑ chꢐ ꢅꢏa chꢐ 16 bit.  
• Cung cꢄp ꢅꢏa chꢐ 16 bit cꢡa toán hꢊng ngay sau  
mã lꢎnh  
• Thí dꢋ:  
RST p  
vꢗi giá trꢏ p có thꢑ là 00H, 08H, 10H, 18H, 20H, 28H,  
30H, hoꢛc 38H.  
10  
02-Mar-11  
ꢀꢁnh ꢂꢁa chꢃ tương ꢂꢇi  
ꢀꢁnh ꢂꢁa chꢃ theo chꢃ sꢇ  
• Sꢂ dꢋng 1 byte dꢍ liꢎu theo sau mã lꢎnh ꢅꢑ chꢐ ꢅꢌ dꢢi  
so vꢗi ꢅꢏa chꢐ lꢎnh kꢈ và lꢎnh ꢅꢏnh nhꢇy ꢅꢈn. ꢝꢌ dꢢi D  
này sꢞ có dꢄu biꢑu diꢧn theo sꢞ bù 2 và ꢅꢏa chꢐ thꢖt  
ꢅưꢚc tính như sau (theo ꢅꢌ dꢢi D và ꢅꢏa chꢐ lꢎnh hiꢎn  
tꢊi A):  
• Byte dꢍ liꢎu theo mã lꢎnh là ꢅꢌ dꢢi D (sꢞ có  
dꢄu bù 2) ꢅưꢚc cꢌng vào vꢗi thanh ghi chꢐ sꢞ  
(IX hoꢛc IY) ꢅꢑ chꢐ ꢅꢈn ô nhꢗ dꢍ liꢎu, nghꢨa là  
EA = IX (hoꢛc IY) + D. Loꢊi lꢎnh này có mã  
lꢎnh dài 2 byte và trong mã lꢎnh có các bit chꢐ  
ra thanh ghi chꢐ sꢞ nào ꢅưꢚc chꢁn IX hoꢛc IY.  
EA = D + A + 2  
ꢝꢌ dꢢi D có thꢑ có giá trꢏ tꢃ -128 ꢅꢈn +127.  
• Thí dꢋ: LD A, (IX + 10H)  
LD B, (IY + 20H)  
• Thí dꢋ:  
JR  
10H  
ꢀꢁnh ꢂꢁa chꢃ thanh ghi  
ꢀꢁnh ꢂꢁa chꢃ hiꢎu ngꢏm  
• Nhiꢀu mã lꢎnh Z80 chꢉa các bit thông tin cho  
biꢈt thanh ghi CPU nào ꢅưꢚc sꢂ dꢋng trong  
lꢎnh.  
• Mã lꢎnh cho biꢈt 1 hay nhiꢀu thanh ghi CPU  
chꢉa toán hꢊng. Thí dꢋ có mꢌt sꢞ lꢎnh hiꢑu  
toán hꢊng ꢅꢑ ꢔ thanh ghi tích lꢣy.  
• Thí dꢋ:  
LD A, B  
ꢀꢁnh ꢂꢁa chꢃ cho bit  
ꢀꢁnh ꢂꢁa chꢃ gián tiꢋp qua thanh ghi  
•
Z80 có nhiꢀu lꢎnh ꢅꢛt bit, xóa bit và kiꢑm tra bit. Các lꢎnh này  
cho phép bꢄt cꢉ vꢏ trí bꢌ nhꢗ nào hoꢛc thanh ghi CPU sꢟ ꢅưꢚc sꢂ  
dꢋng cho các phép toán bit qua mꢌt trong 3 cách ꢅꢏnh ꢅꢏa chꢐ  
trưꢗc (thanh ghi, gián tiꢈp qua thanh ghi và theo chꢐ sꢞ) và 3 bit  
trong mã lꢎnh sꢟ cho biꢈt bit nào trong 8 bit ꢅưꢚc xꢂ lý.  
• Loꢊi ꢅꢏnh ꢅꢏa chꢐ này cho biꢈt cꢛp thanh ghi 16  
bit nào (như HL) ꢅưꢚc dùng làm con trꢠ chꢐ tꢗi  
vꢏ trí ô nhꢗ.  
•
Thí dꢋ:  
LD A, (HL)  
Thí dꢋ:  
BIT 3, A  
SET 0, (HL)  
RES 7, (IX + 10H)  
LD (HL), 10H  
Chú ý là có nhꢍng lꢎnh kꢈt hꢚp mꢌt sꢞ cách ꢅꢏa chꢐ chung trong  
mꢌt lꢎnh.  
11  
02-Mar-11  
• Tꢖp lꢎnh Z80 gꢒm có 158 lꢎnh, trong ꢅó ꢅã bao gꢒm  
78 lꢎnh cꢡa 8080. Các lꢎnh ꢅưꢚc chia làm các nhóm  
chính sau:  
– Nꢊp 8 bit và nꢊp 16 bit  
– Hoán ꢅꢘi, chuyꢑn khꢞi và tìm kiꢈm  
– Sꢞ hꢁc và logic 8 bit  
– Sꢞ hꢁc 16 bit  
2.7 TẬP LỆNH  
– Sꢞ hꢁc ꢅa dꢋng và ꢅiꢀu khiꢑn CPU  
– Xoay và dꢏch bit  
– Xꢂ lý bit (Các phép toán trên bit)  
– Nhꢖp và xuꢄt  
– Nhꢇy, rꢟ nhánh chưꢆng trình  
– Gꢁi chưꢆng trình và quay vꢀ chưꢆng trình gꢁi.  
Pseudo Codes  
• Khi viꢈt chưꢆng trình ꢅꢑ thuꢖn tiꢎn thưꢢng ta  
dùng hꢚp ngꢍ mà lꢎnh có dꢊng như trong thí  
dꢋ sau:  
•
ꢝꢑ có thꢑ viꢈt chưꢆng trình dꢧ dàng hꢆn các trình  
hꢚp ngꢍ thưꢢng cho thêm các tác vꢋ giꢇ (pseudo  
operation) hay còn gꢁi là các lꢎnh giꢇ như: EQU,  
DEFB, DEFW, DEFS, ORG, END, MACRO.  
1. EQU (nghꢨa là equate=bꢦng; dùng ꢅꢑ gán trꢏ)  
–
Thí dꢋ: Nꢌi dung ô nhꢗ SUM = A + 10H  
SUM:  
EQU 1900H  
; SUM = 1900H  
COUNT:  
EQU 10H  
ADD A, COUNT  
LD (SUM), A  
; ADD A, 10H  
2. DEFB (Define Byte = ꢝꢏnh nghꢨa Byte) và DEFW  
(Define Word = ꢝꢏnhnghꢨa Word)  
3. DEFS (Define Storage = ꢝꢏnh nghꢨa vùng lưu  
trꢍ)  
Thí dꢋ:  
CONST:  
EQU  
52H  
ADRS:  
EQU  
1900H  
ADRS  
CONST  
Thí dꢋ: (Giꢇ sꢂ lꢎnh DEFS 10H ꢔ ꢅꢏa chꢐ 1800H)  
TABLE:  
DEFW  
DEFB  
1800H  
1810H  
1811H  
DEFS 10H ; dành 16 byte lưu trữ  
LD  
LD  
HL, 10H  
DE, 20H  
Khi ꢅó các vùng nhꢗ (giꢇ sꢂ ꢅꢏa chꢐ ꢔ TABLE là  
1951H) như sau  
12  
02-Mar-11  
5. MACRO (ꢝꢏnh nghꢨa mꢌt ꢅoꢊn chưꢆng  
trình mà trình hꢚp ngꢍ sꢟ tꢕ ꢅꢌng chèn vào  
toàn bꢌ ꢅoꢊn chưꢆng trình này khi có tham  
chiꢈu tên macro ꢅó và bꢜt ꢅꢤu ꢅoꢊn macro  
bꢦng MACRO và kꢈt thúc bꢦng ENDM)  
4. ORG (Origin = bꢜt ꢅꢤu; ꢅꢏnh nghꢨa ꢅꢏa chꢐ bꢜt ꢅꢤu)  
và END (kꢈt thúc chưꢆng trình)  
Thí dꢋ:  
ORG  
START: LD  
100H ; Chương trình bắt đầu từ 100H  
Thí dꢋ:  
A, 1FH ; bắt đầu chương trình  
REF:  
MACRO  
INC  
A
LD  
LD  
H, (IX+1)  
L, (IY+1)  
OUT  
END  
(11H), A  
; kết thúc chương trình  
INC IX  
INC IY  
ENDM  
• Thí dꢐ: ꢝiꢀn các sꢞ 0 vào các ô nhꢗ có ꢅꢏa chꢐ  
tꢃ 8100H ꢅꢈn 817FH.  
ORG 8000H  
• Thí dꢐ: Nhân 10 lꢤn giá trꢏ ꢅưꢚc cꢄt trong cꢛp  
thanh ghi HL.  
LD HL, 8100H  
MULT10:  
ADD HL, HL  
LD D, H  
LD E, L  
; 2X HL  
LD A, 00H  
; (HL)=>(DE)  
LD C, 80H  
LOOP:  
LD (HL), A  
INC HL  
DEC C  
ADD HL, HL  
ADD HL, HL  
ADD HL, DE  
RET  
; 4 x HL  
; 8 x HL  
; (8+2) x HL  
JP NZ, LOOP  
HALT  
END  
• Thí dꢐ: Chuyꢑn chuꢥi dꢍ liꢎu 737 byte ꢔ vꢏ trí bꢌ  
nhꢗ DATA ꢅꢈn vꢏ trí bꢌ nhꢗ BUFFER, tác vꢋ này  
ꢅưꢚc lꢖp trình như sau  
LD HL, DATA  
; Lấy địa chỉ bắt đầu của DATA  
LD DE, BUFFER ; Lấy địa chỉ bắt đầu của BUFFER  
LD BC, 737  
LDIR  
; Chiều dài của chuỗi ký tự  
; Chuyển chuỗi–Chuyển bộ nhớ chỉ  
; bởi HL vào ô nhớ được chỉ bởi DE  
; tăng HL và DE lên 1  
;Giảm bớt BC đi 1, cho đến khi BC= 0.  
13  
02-Mar-11  
14  
02-Mar-11  
15  
pdf 15 trang myanh 22100 Free
Bạn đang xem 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 1) - 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_1.pdf