Bài giảng Vi xử lý - Chương 2: Z80 Tập lệnh - Hồ Trung Mỹ
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ỉ
• 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ỉ
Bạn đang xem 20 trang mẫu của tài liệu "Bài giảng Vi xử lý - Chương 2: Z80 Tập lệnh - 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:
- bai_giang_vi_xu_ly_chuong_2_z80_tap_lenh_ho_trung_my.pdf
Nội dung text: Bài giảng Vi xử lý - Chương 2: Z80 Tập lệnh - 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 Content Address Mnemonic LD A, 20 Address Memory Machine Code 3EH , 14H Op_code 1000H 3EH 1001H 14H Operand nh) ng) 1002H 1003H 2 1
- 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 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 C, ‘8’ ; BC = ‘A8’ LD SP,3FFFH 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 A B B C C HL LD D D LD SP, IX {}E ,{ E } {}IY H H L L TD: LD A, A TD: LD SP, HL 10 LD E, L LD SP, IX 5
- 23-Mar-11 – ng • DDH,7EH,03H Memory 8000H DDH OP_code AAA ABH 8001H 7EH OP_code 8002H 03H Operand IX 00H IXIX 9090H90 HHH 90 00H 9000H 56HH 9001H 78H IX + d 9002H 9AH 90009000HH + 03 03H03 H 03 = 90039003HHHH 9003H 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 • Ghi vào b nh : d li u 16 bit vào thanh ghi 16 bit v i a ch ( thanh ghi 16 bit rp) v i a 16 bit: ch 16 bit: LD rp, (nn) LD (nn),rp ngh a là 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 • nh a ch hi u ng m qua SP: SP: PUSH rp POP rp Ngh a là Ngh a là SP SP – 1, (SP) rp_H rp_L (SP), SP SP + 1 SP SP – 1, (SP) rp_L 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 • 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_H rp_L14 7
- 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 • Thí d ụ: i n các sô 0 vào các ô nh có a ch t ̀ 8100H n 817FH. 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 DEC C JP NZ, LOOP; n u C ≠ 0 quay l i LOOP HALT END 21 22 11
- 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 SBC HL,DE ; HL <- HL - DE = 1289 - 2578 = -1289 = FAF7H 25 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 LD B,(IY) BIN16_2: DEFW 2578 ; 0A12h ADD A,B RESULT: DEFS 2 LD DE,RESULT END LD (DE),A INC IX ; Pointer chi den byte cao Chú ý: Các ch ỉ d ẫn (directive) INC IY của trình h ợp ng ữ (assembler) INC DE • DEFW hay DW: define word LD A,(IX) • DEFS hay DS: define space LD B,(IY) ADC A,B LD (DE),A HALT 26 13
- 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 Chuy n i n i dung c a A sang phân (BCD) sau DAA BCD nén sau phép toán c ng/tr ̀ phép c ng/tr ̀ v i các toán h ng BCD L y bù 1 CPL A NOT(A) L y bù 2 NEG A 0 – A = – A L y bù c nh CCF C NOT(C) t c nh lên 1 SCF C 1 30 15
- 23-Mar-11 2.4 Nhóm Logic 8 bit Phép toán Dạng l ệnh Ý ngh ĩa AND AND source A A AND source OR OR source A A OR source XOR XOR source A A XOR source 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 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 va ̀ E ( D = 32H va ̀ E = 35H) c ; chuy n thành BCD nén 2 ky sô A = 25H (BCD c a 25) ASCII_HEX: LD A,D ; A = D = 3xH AND 0FH ; A = 0xH RLA RLA RLA RLA LD C,A ; C = A = x0H LD A,E ; A = 3yH AND 0FH ; A =0yH ADD A,C ; A = x0H + 0yH = xyH RET 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 Phép toán Ý ngh ĩa lệnh Xoay trái digit RLD (HL) Xoay ph i RRD digit (HL) 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 Nhân sô không d u X cho v i 1 s có d ng 2n + 1 ; X * (2n + 1) = X*2n + X = d ch X sang trái n bit + X ; Gi s k t qu c a phép nhân s t trong 1 s 16 bit. ; Ch ng trình con MUL_2NA1 nhân 1 sô thanh ghi A v i 1 sô có d ng 2n+1 B ; va ̀ k t qu 16 bit c t ̉ trong c p thanh ghi DE ORG 100H LD A,27 ; Tinh DE = A x 2^n bang cach dich DE LD C,17 ; sang trai n bit (dat trong C) CALL MUL_2NA1 SHIFT_N: HALT SRL C MUL_2NA1: RET C LD D,0 SLA E ; Dich trái DE LD E,A RL D DEC C JR SHIFT_N RET Z CALL SHIFT_N Chú ý: ADD A,E LD E,A • SV hãy thêm các l nh ê ̉ b o toàn AF va ̀ BC khi g i MUL_2NA1 LD A,0 ADC A,D RET 41 42 21
- 23-Mar-11 4.2. Các lệnh nh ảy tươ ng đối Tác vụ Dạng l ệnh Ý ngh ĩa Nh y t ng i JR target_N PC PC + offset không i u i n Nh y t ng i có N u cond úng thi ̀ PC nn JR cond, target_N i u i n ng c l i thi ̀ PC a ch l nh kê B B – 1 Nh y t ng i có DJNZ target_N ≠≠≠ i u i n v i B N u B 0 thi ̀ PC offset ng c l i thi ̀ PC a ch l nh kê Chú ý: • target_N là nhãn mà cách xa t ng i v i a ch l nh kê trong d i (-128 +127) • offset là gia tr có d u 8 bit (-128 +127) c tính theo công th c sau offset = target_N – a ch l nh kê • cond (condition = i u ki n) có thê ̉ là Z, NZ, C, NC. • K t h p DJNZ v i các l nh nh y khác ta có t o nên các c u trúc i u khi n: repeat-until, while-do 45 TD: xóa 1 ph n bô nh Ta mu n xóa n i dung b nh t a ch BASE n a ch BASE + LENGTH -1 v i LENGTH (có gia tr t ̀ 0 n 255). TD: V i BASE va ̀ LENGTH c thê ̉ nh sau ORG 100H BASE EQU 400h LENGTH EQU 32 LD B, LENGTH ; N p vào B chi u dài LENGTH LD A, 0 ; xóa ô nh v i gia tr trong A LD HL, BASE ; ch n BASE CLEAR: LD (HL), A ; xóa ô nh có a ch ch a trong HL INC HL ; HL = HL + 1 ch n ô nh k DEC B ; B = B – 1 gi m b m s ô nh JR NZ, CLEAR HALT Chú ý: • Có thê ̉ thay 2 lệnh DEC B va ̀ JR bằng 1 lệnh: DJNZ CLEAR 46 • Khi B = 0 thi ̀ sô ́ byte cần xóa là bao nhiêu? 23
- 23-Mar-11 4.3. Các lệnh liên quan ch ươ ng trình con Tác vụ Dạng l ệnh Ý ngh ĩa SP SP – 1, (SP) PC_H G i ch ng trình CALL nn SP SP – 1, (SP) PC_L con CALL cc, nn PC nn Quay v t ch ng RET PC_L (SP) , SP SP + 1 trình con RET cc PC_H (SP) , SP SP + 1 Chú ý: • cc (codition code= mã i u ki n) có thê ̉ là Z, N Z, C, NC, P, M, PE, PO • V i CALL va ̀ RET có i u ki n thi ̀ l nh ch c th c thi n u cc úng, ng c l i thi ̀ ti p l c l nh kê 49 TD: i n các kh i bô nh v i gia tr thanh ghi A • HL= a ch b t u • B = chi u dài c a kh i c n i n org 100h LD HL, 400H LD B, 32 LD A,0FFH CALL FILL_PROC ; i n FFh vào 32 byte t ̀ a ch 0400h LD HL, 440H LD B, 16 LD A,055H CALL FILL_PROC ; i n 55h vào 16 byte t ̀ a ch 0440h HALT FILL_PROC: LD (HL), A INC HL; t ng con tro ̉ DJNZ FILL_PROC RET 50 25
- 23-Mar-11 53 5. Nhóm i u khi n CPU Tác vụ Dạng l ệnh Ý ngh ĩa CPU không làm gì c . Không làm gi ̀ NOP L nh này th ng dùng làm tr b ng ph n m m. a CPU vào tr ng thái ch ̀ va ̀ khi o nó không làm gi ̀ c . D ng CPU HALT Tr ng thái này s b pha v khi có ng t (INT, NMI) ho c reset Chú ý: ây ta không kh o sát các l nh liên quan vê ̀ ng t. 54 27
- 23-Mar-11 TD: LED sáng l n l t t ̀ ph i sang trái va ̀ l p l i org 100h PATTERN EQU 01H LD C,PATTERN LOOP: LD A,C OUT (03H),A RLC C ; Dung RRC C se chay sang phai! CALL DELAY JR LOOP ; Chuong trinh con DELAY lam tre DELAY: LD B,0 ; vong lap voi B la 256 lan! L1: LD D,0 ; vong lap voi D la 256 lan! L2: DEC D JR NZ,L2 DJNZ L1 RET Chú ý: Trong thi d này, c ng xu t v i a ch 03H có g n 8 LED n va ̀ khi xu t ra 157 t i bit o thi ̀ LED s sáng TD: i u khi n LED sáng ch y sang trái/ph i theo tr sô 0/1 công t c 0 (LSB c a c ng nh p 02H) PATTERN EQU 01H ORG 100h ; Chuong trinh con DELAY lam tre LD C,PATTERN DELAY: LD B,0 ; vong lap voi B la 256 lan! L1: LD D,0 ; vong lap voi D la 256 lan! LOOP: IN A,(02H) L2: DEC D BIT 0,A JR NZ,L2 JR NZ,RIGHT DJNZ L1 RLC C ; ch y sang trái RET JR NEXT RIGHT: RRC C ; ch y sang ph i NEXT: CALL DELAY LD A,C OUT (03H),A JR LOOP • Khi Z = 0 = NOT (LSB c a A) hay công t c 0 có tr là 1 thi ̀ LED sáng ch y sang ph i 58 29
- 23-Mar-11 61 62 31
- 23-Mar-11 65 66 33
- 23-Mar-11 69 70 35