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ỉ 
pdf 36 trang thamphan 28/12/2022 1080
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:

  • pdfbai_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ỹ

  1. 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
  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) • iu 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 lnh và 10 cách nh a ch 5 1. Nhóm chuy ển d ữ li ệu • Dng t ng quát: LD op1, op2 – Sao chép n i dung ca toán hng 2 (op2) vào toán hng 1 (op1) – 2 toán hng 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 hng – toán hng op1 không th là hng s • Ch có 1 toán hng: vi stack – PUSH rp -> ct n i dung ca thanh ghi 16 bit vào stack qua con tr SP – POP rp -> ly n i dung ca ph n t nh stack (qua con tr SP) ct vào thanh ghi 16 bit 6 3
  3. 23-Mar-11 TD: Np h ng s 16 bit cho thanh ghi 16 bit (cp 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
  4. 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) vi 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 ca rp và rp_H là byte cao ca 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 rng (vì d li u 16 bit) rp_H rp_L14 7
  5. 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ã iu ki n) trong thanh ghi F (Flag) • S (Sign) : sau phép toán thì nó S=MSB ca k t qu =1(âm)/0(d ng) • Z (Zero) : nu k t qu là 0 thì Z=1, ng c li 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 (nu s bit 1 trong A là ch n = Even parity), ng c li 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
  6. 23-Mar-11 • Thí d ụ: in các sô 0 vào các ô nh có a ch t̀ 8100H n 817FH. ORG 8000H LD HL, 8100H LD A, 00H ;hng sô cn np LD C, 80H ;S ln lp = 817Fh – 8100h +1 =80h LOOP: LD (HL), A INC HL DEC C JP NZ, LOOP; nu C ≠ 0 quay li LOOP HALT END 21 22 11
  7. 23-Mar-11 TD: Cng/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 lnh AND A LD DE,BIN16_1 LD HL,BIN16_2 SBC HL,DE ; HL <- HL - DE = 1289 - 2578 = -1289 = FAF7H 25 TD: Cng/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
  8. 23-Mar-11 29 2.3 Nhóm s ố h ọc đa dụng Phép toán Dạng l ệnh Ý ngh ĩa iu ch nh th p Chuy n i ni dung ca A sang phân (BCD) sau DAA BCD nén sau phép toán cng/tr ̀ phép cng/tr ̀ vi các toán hng BCD Ly bù 1 CPL A  NOT(A) Ly bù 2 NEG A  0 – A = – A Ly bù c nh CCF C  NOT(C) t c nh lên 1 SCF C  1 30 15
  9. 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 hng hi u ng m • source có th là hng 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 ca 2 toán hng • C PV cho bi t tr parity ch n (=1 nu 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 ca k t qu AND là l = 00000001b) LD A,3 AND 0FFH P/V=1 (do s bit 1 ca k t qu AND là ch n=00000011b) Tính bù 1 ca 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 bng cách OR v i 1 ti v trí ó LD A,25h ; A = 00100101b OR 01001000b ; A = A OR 48h = 01101101b = 6Dh 34 17
  10. 23-Mar-11 TD: i sang bi u di n ASCII ca 2 ky sô BCD sang sô BCD 2 ky sô (nén) ; TD: Bi u di n ASCII ca 25 trong D va ̀ E ( D = 32H va ̀ E = 35H) c ; chuy n thành BCD nén 2 ky sô A = 25H (BCD ca 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 ni 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à ni 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
  11. 23-Mar-11 Nhân sô không du X cho vi 1 s có dng 2n + 1 ; X * (2n + 1) = X*2n + X = dch X sang trái n bit + X ; Gi s kt qu ca 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 vi 1 sô có dng 2n+1 B ; va ̀ kt qu 16 bit c t ̉ trong cp 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 lnh ê ̉ bo toàn AF va ̀ BC khi gi MUL_2NA1 LD A,0 ADC A,D RET 41 42 21
  12. 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 iu in Nh y t ng i có Nu cond úng thi ̀ PC  nn JR cond, target_N iu in ng c li thi ̀ PC  a ch lnh kê B  B – 1 Nh y t ng i có DJNZ target_N ≠≠≠ iu in v i B Nu B 0 thi ̀ PC  offset ng c li thi ̀ PC  a ch lnh kê Chú ý: • target_N là nhãn mà cách xa t ng i vi a ch lnh kê trong di (-128 +127) • offset là gia tr có du 8 bit (-128 +127) c tính theo công th c sau offset = target_N – a ch lnh kê • cond (condition = iu ki n) có thê ̉ là Z, NZ, C, NC. • Kt hp DJNZ vi các lnh nh y khác ta có to nên các cu trúc iu khi n: repeat-until, while-do 45 TD: xóa 1 ph n bô nh Ta mu n xóa ni dung b nh t a ch BASE n a ch BASE + LENGTH -1 vi LENGTH (có gia tr t̀ 0 n 255). TD: Vi BASE va ̀ LENGTH c thê ̉ nh sau ORG 100H BASE EQU 400h LENGTH EQU 32 LD B, LENGTH ; Np vào B chi u dài LENGTH LD A, 0 ; xóa ô nh vi 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
  13. 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 Gi 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ã iu ki n) có thê ̉ là Z, N Z, C, NC, P, M, PE, PO • Vi CALL va ̀ RET có iu ki n thi ̀ lnh ch c th c thi nu cc úng, ng c li thi ̀ ti p lc lnh kê 49 TD: in các kh i bô nh vi gia tr thanh ghi A • HL= a ch bt u • B = chi u dài ca kh i cn in org 100h LD HL, 400H LD B, 32 LD A,0FFH CALL FILL_PROC ; in FFh vào 32 byte t̀ a ch 0400h LD HL, 440H LD B, 16 LD A,055H CALL FILL_PROC ; in 55h vào 16 byte t̀ a ch 0440h HALT FILL_PROC: LD (HL), A INC HL; tng con tro ̉ DJNZ FILL_PROC RET 50 25
  14. 23-Mar-11 53 5. Nhóm iu 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 Lnh này th ng dùng làm tr bng ph n m m. a CPU vào tr ng thái ch ̀ va ̀ khi o nó không làm gi ̀ c . Dng 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 lnh liên quan vê ̀ ng t. 54 27
  15. 23-Mar-11 TD: LED sáng ln l t t̀ ph i sang trái va ̀ lp li 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, cng xu t vi a ch 03H có gn 8 LED n va ̀ khi xu t ra 157 ti bit o thi ̀ LED s sáng TD: iu khi n LED sáng ch y sang trái/ph i theo tr sô 0/1 công tc 0 (LSB ca cng 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 ca A) hay công tc 0 có tr là 1 thi ̀ LED sáng ch y sang ph i 58 29
  16. 23-Mar-11 61 62 31
  17. 23-Mar-11 65 66 33
  18. 23-Mar-11 69 70 35