Bài giảng Vi xử lý - Z80 Tập lệnh - Hồ Trung Mỹ

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

CCF ; 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

pdf36 trang | Chuyên mục: Vi Xử Lý – Vi Điều Khiển | Chia sẻ: tuando | Lượt xem: 595 | Lượt tải: 0download
Tóm tắt nội dung Bài giảng Vi xử lý - Z80 Tập lệnh - Hồ Trung Mỹ, để xem tài liệu hoàn chỉnh bạn click vào nút "TẢI VỀ" ở trên
ó thể vận dụng phép toán dịch và cộng để thực hiện phép toán nhân/chia!
3/26/2011
21
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
; và kết quả 16 bit được đặt̉ trong cặp thanh ghi DE
ORG 100H
LD A,27
LD C,17
CALL MUL_2NA1
HALT
MUL_2NA1:
LD D,0
LD E,A
DEC C
RET Z
CALL SHIFT_N
ADD A,E
LD E,A
LD A,0
ADC A,D 
RET
; Tinh DE = A x 2^n bang cach dich DE 
; sang trai n bit (dat trong C)
SHIFT_N:
SRL C
RET C
 SLA E ; Dich trái DE
RL D
JR SHIFT_N 
Chú ý:
• SV hãy thêm các lệnh để bão toàn 
AF và BC khi gọi MUL_2NA1
3/26/2011
22
4. Nhóm rẽ nhánh chương trình 
Tác vụ Dạng lệnh Ý nghĩa
Nhảy tuyệt đối không 
điều điện JP target PC  target
Nhảy tuyệt đối có 
điều điện JP cc, nn
Nếu cc đúng thì PC  nn 
ngược lại thì PC  địa chỉ lệnh kế
4.1. Các lệnh nhảy (jump) tuyệt đối
Chú ý:
• target là giá trị địa chỉ 16 bit có thể là hằng số, (HL), (IX), IY)
• cc (codition code= mã điều kiện) có thể là Z,N Z, C, C, P, M, PE, PO, 
TD:
 LOOP: JP NEXT ; có mã máy là C3h, byte thấp của NEXT, và byte cao của NEXT
JP (HL) ; PC  HL
JP (IX) ; PC  IX
JP (IY) ; PC  IY
NEXT: JP PO, LOOP
JP NC, CONTINUE 
Ý nghĩa của các [mã] điều kiện
Điều kiện Ý nghĩa
Z Đúng khi Z=1 (Zero)
NZ Đúng khi Z=0 (Non Zero)
C Đúng khi C=1 (Carry)
NC Đúng khi C=0 (No Carry)
P Đúng khi S=0 (Positive=dương)
M Đúng khi S=1 (Minus = âm)
PE
Đúng khi PV=1 
(Parity Even = parity chẵn hay có tràn)
PO
Đúng khi PV=0 
(Parity Odd= parity lẻ hay không có tràn)
3/26/2011
23
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 
không điều điện JR target_N PC  PC + offset
Nhảy tương đối có 
điều điện JR cond, target_N
Nếu cond đúng thì PC  nn 
ngược lại thì PC  địa chỉ lệnh kế
Nhảy tương đối có 
điều điện với B DJNZ target_N
B  B – 1 
Nếu B  0 thì PC  offset 
ngược lại thì 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à giá 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
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ó giá trị từ 0 đến 255).
TD: Với BASE và 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 giá 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ế
DECB ; B = B – 1 giảm bộ đếm số ô nhớ
JR NZ, CLEAR
HALT
Chú ý:
• Có thể thay 2 lệnh DEC B và JR .. bằng 1 lệnh: DJNZ CLEAR 
• Khi B = 0 thì số byte cần xóa là bao nhiêu?
3/26/2011
24
Phân tích mã máy của lệnh JR
Địa chỉ Mã máy Dòng Hợp ngữ
JR NZ, CLEAR có mã máy có 2 byte là 20h, offset (8bit)
Offset là byte thấp của phép trừ: 
địa chỉ tại CLEAR – địa chỉ lệnh kế = 0107h – 010Ch = FFFBh
Chú ý: Nếu thay JR.. bằng JP NZ, CLEAR thì tại đó ta có mã máy là 3 byte:
 C2 07 01 (vì địa chỉ tại CLEAR là 0107h)
TD: Tính tổng của 1 mảng dữ liệu trong bộ nhớ
org 100H
; Chương trình tính tổng 1 mảng các số 8 bit không dấu với số phần tử 
; trong B và với địa chỉ bắt đầu trong HL
; Kết quả tổng (Sum) được cất vào trong DE
LD A,(N)
 LD B,A ; Lấy số phần tử đặt vào B
LD HL, DATA
LD A, 0
LD DE,0 ; Sum <- 0
LOOP: ADD A,(HL)
 LD E,A ; Cập nhật byte thấp của Sum 
JR NC, NEXT
 INC D ; Cập nhật byte cao của Sum 
NEXT: INC HL
DJNZ LOOP
HALT
DATA: defb 10
defb 20
defb 30
defb 40
defb 50
defb 60
defb 70
defb 80
N: defb $-DATA 
; $ la dia chi hien tai
; do đó $ - DATA = 8
3/26/2011
25
4.3. Các lệnh liên quan chương trình con
Tác vụ Dạng lệnh Ý nghĩa
Gọi chương trình con
CALL nn
CALL cc, nn
SP  SP – 1, (SP)  PC_H
SP  SP – 1, (SP)  PC_L
PC  nn
Quay về từ chương 
trình con 
RET
RET cc
PC_L  (SP) , SP  SP + 1
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 và RET có điều kiện thì lệnh chỉ được thực thi nếu cc đúng, ngược 
lại thì tiếp lục lệnh kế
TD: Điền các khối bộ nhớ với giá 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 trỏ
DJNZ FILL_PROC
RET
3/26/2011
26
TD: Kiểm tra 1 ký tự có thuộc 1 dãi trị số không
Viết chương trình con kiểm tra xem 1 ký tự ASCII ở ô nhớ LOC có phải
là số trong dãi số từ 0 đến 9, nếu đúng thì cho cờ Z=1.
Bài giải.
IS_NUMBER:
LD A, (LOC); lấy ký tự vào A
CP 30H ; so sánh với ASCII của số 0
JR C, EXIT ; nếu A < 30H thì thoát
CP 3AH ; so sánh với ‘9’ + 1
JR NC, EXIT ; nếu A > 39H thì thoát
CP A ; làm cho cờ Z=1
EXIT: RET 
Cách 2: Dùng RET cc
IS_NUMBER:
LD A, (LOC); lấy ký tự vào A
CP 30H ; so sánh với ASCII của số 0
RET C ; nếu A < 30H thì thoát
CP 3AH ; so sánh với ‘9’ + 1
RET NC ; nếu A > 39H thì thoát
CP A ; làm cho cờ Z=1
RET 
3/26/2011
27
5. Nhóm điều khiển CPU
Tác vụ Dạng lệnh Ý nghĩa
Không làm gì NOP
CPU không làm gì cả.
Lệnh này thường dùng để làm trễ 
bằng phần mềm.
Dừng CPU HALT
Đưa CPU vào trạng thái chờ và 
khi đó nó không làm gì cả. Trạng 
thái này sẽ bị phá 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. 
3/26/2011
28
6. Nhóm truy cập cổng xuất/nhập
Tác vụ Dạng lệnh Ý nghĩa
Đọc cổng nhập với địa chỉ trực tiếp IN A, (n) A  (n)
Đọc cổng nhập với địa chỉ ở thanh ghi C IN r, (C) r  (C)
Ghi ra cổng xuất với địa chỉ trực tiếp OUT (n), A (n)  A
Ghi ra cổng xuất với địa chỉ ở thanh ghi C OUT (C), r (C)  r
Chú ý:
• Z80 dùng 8 bit địa chỉ thấp (A7..A0) cho các cổng I/O => có tối đa 256 cổng 
nhập và 256 cổng xuất
• r có thể là A, B, C, D, E, H, L
3/26/2011
29
TD: LED sáng lần lượt từ phải sang trái và 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 thí dụ này, cổng xuất với địa chỉ 03H có gắn 8 LED đơn và khi xuất ra 1 tại bit 
đó thì 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
LD C,PATTERN 
LOOP: IN A,(02H)
BIT 0,A
JR NZ,RIGHT
 RLC C ; chạy sang trái
JR NEXT
RIGHT: RRC C ; chạy sang phải
NEXT: CALL DELAY
LD A,C 
OUT (03H),A
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
• Khi Z = 0 = NOT (LSB của A) hay công tắc 0 có trị là 1 thì LED sáng chạy 
sang phải
3/26/2011
30
TD: Hiển thị liên tục các số từ 0  9 trên LED 7 đoạn
Giả sử các LED 7 đoạn trong hiển thị 4 ký số lần lượt có các địa chỉ là
0AH, 0BH, 0CH, và 0DH cho các ký số tương ứng từ vị trí cao xuống
thấp. Trong TD này ta xuất LED 7 đoạn ở vị trí tận cùng bên phải, nên
dùng địa chỉ 0DH!
ORG 100h
LD L,0 ; chứa số sẽ hiện ra
LOOP: LD A,L
 CALL DEC2LED ; chương trình con đổi BCD sang mã 7 đoạn
OUT (0DH),A ; Xuat ra LED 7 doan tai digit don vi!
CALL DELAY
INC L
LD A,9
CP L
JR NC,LOOP
LD L,0
JR LOOP
; Chuong trinh con DELAY lam tre 
DELAY: LD B,0 ; vong lap voi B la 256 lan!
L1: LD C,100; vong lap voi C la 100 lan!
L2: DEC C
JR NZ,L2 
DJNZ L1
RET
Chương trình con đổi BCD sang mã 7 đoạn
DEC2LED:
PUSH DE 
PUSH IX
AND 0FH
LD E,A
LD D,0
LD IX,XLAT_TAB
ADD IX,DE
LD A,(IX+0)
POP IX
POP DE
RET
XLAT_TAB: 
; LED 7 doan trong mo phong nay co thu
; tu cac doan nhu sau 
; ( 0=LED tắt, 1=LED sáng )
; -hgfedcba
DEFB 00111111B; 0
DEFB 00000110B; 1
DEFB 01011011B; 2
DEFB 01001111B; 3
DEFB 01100110B; 4
DEFB 01101101B; 5
DEFB 01111101B; 6
DEFB 00000111B; 7
DEFB 01111111B; 8
DEFB 01101111B; 9
• Chương trình con này bão toàn nội dung của DE và IX
• IX = địa chỉ đầu bảng tra + chỉ số
• DE = chỉ số (được truyền từ chương trình gọi nó đặt trong A)
• Trị trả về là mã 7 đoạn tương ứng trong thanh ghi A
3/26/2011
31
3/26/2011
32
7. Nhóm xử lý bit
Phép toán Dạng lệnh Ý nghĩa
Lấy đảo 1 bit trong 
toán hạng 8 bit BIT b, m
Z  NOT(mb)
Z = phủ định của bit thứ b trong m
Xóa 1 bit trong toán 
hạng 8 bit về 0 RES b, m
mb 0
Bit thứ b trong m bị xóa (RESet)
Đặt 1 bit trong toán 
hạng 8 bit lên 1 SET b, m
mb 1
Bit thứ b trong m được gán 1 (SET)
Chú ý:
• b có trị là vị trí của bit đang xét, thuộc dải 0  7 (7 = ở MSB và 0 = ở LSB)
• m có thể là A, B, C, D, E, H, L, (HL), (IX+d), (IY+d)
TD: Mạch so sánh bằng nhau
Mô phỏng mạch số so sánh 2 toán hạng 8 bit (trong A và B), nếu chúng
bằng nhau thì đặt LSB của D lên 1, ngược lại thì xóa nó về 0
org 100H
LD A,12
LD B,11
CALL COMP ; kết quả = 0
LD A,11
CALL COMP ; kết quả = 1
HALT
COMP:
CP B
JR Z, A_EQ_B
RES 0,D
RET
A_EQ_B: 
SET 0,D 
RET
3/26/2011
33
3/26/2011
34
8. Nhóm hoán đổi, chuyển khối và tìm kiếm
OP Code
Hex
Mnemonic Tác vụ Mô tả
D9 EXX
BC  B'C'
DE  D'E'
HL  H'L'
Hoán đổi các cặp thanh 
ghi
ED B8 LDDR
(DE)  (HL)
DE  DE - 1
HL  HL - 1
BC  BC - 1
Nạp ô nhớ ở (DE) với ô 
nhớ ở (HL), giảm DE, 
HL, và BC đi 1,
lặp lại cho tới khi BC = 0
ED A1 CPI
A - (HL)
HL  HL + 1
BC  BC - 1
So sánh ô nhớ (HL) với 
A, tăng HL thêm 1, giảm 
BC đi 1, đặt các cờ,
A giữ nguyên
3/26/2011
35
3/26/2011
36
Tóm tắt tập lệnh Z80 với các cờ

File đính kèm:

  • pdfbai_giang_vi_xu_ly_z80_tap_lenh_ho_trung_my.pdf