Tải bản đầy đủ (.pdf) (6 trang)

Vxl bt ch2 VI XỬ LÝ

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (78.4 KB, 6 trang )

ĐHBK Tp HCM–BMĐT
GVPT: Hồ Trung Mỹ
Bài tập Vi Xử Lý – Chương 2
Giới thiệu một số nhóm lệnh trong tập lệnh Z80
VXL Z80 có 158 kiểu lệnh; nó bao gồm tất cả những lệnh của VXL
8085 (Intel). Mỗi lệnh có 2 phần: một là tác vụ (công việc) sẽ được thực
hiện (như nạp [Load], cộng [Add], nhảy [Jump]...) và được gọi là mã tác vụ
hay mã lệnh (opcode); phần thứ hai chỉ dữ liệu làm việc với tác vụ và được
gọi là toán hạng (toán hạng).
Các lệnh 1 byte
Trong lệnh 1 byte thì mã lệnh và toán hạng trong cùng 1 byte.
Tác vụ

opcode

operand

sao chép nội dung của thanh
ghi B vào thanh ghi A

LD

A, B

Mã nhị phân
(mã máy)
01111000 (78H)

Các lệnh 2 byte
Trong lệnh 2 byte thì byte đầu chỉ mã lệnh và byte thứ hai chỉ toán hạng.
Tác vụ



opcode

operand

Nạp vào thanh ghi B số hex
32

LD

B, 32H

Mã nhị phân
(mã máy)
0000 0110 (06H) Byte1
0011 0010 (32H) Byte2

Các lệnh 3 byte
Trong lệnh 3 byte thì byte đầu chỉ mã lệnh và 2 byte tiếp theo chỉ địa chỉ
hay dữ liệu 16 bit theo thứ tự ngược: byte thấp trước rồi mới tới byte cao.
Tác vụ

opcode

operand

Nạp vào cặp thanh ghi BC giá trị
16 bit là 2080H

LD


BC, 2080H

Tác vụ

opcode

operand

Nạp vào thanh ghi chỉ số IX với
địa chỉ 16 bit là 2000H

LD

IX, 2000H

Mã nhị phân
(mã máy)
0000 0001 (01H) Byte 1
1000 0000 (80H) Byte 2
0010 0000 (20H) Byte 3

Các lệnh 4 byte

BT-VXL-Ch 2 – trang 1

Mã nhị phân
(mã maùy)
1101 1101 (DDH) Byte1
0010 0001 (21H) Byte2

0000 0000 (00H) Byte3
0010 0000 (20H) Byte4


Tập lệnh Z80 có thể được chia làm 6 nhóm chính:
1. Các tác vụ nạp (Load) hoặc sao chép dữ liệu (chuyển dữ liệu)
2. Các tác vụ số học
3. Các tác vụ logic
4. Xử lý bit
5. Tác vụ rẽ nhánh chương trình
6. Các tác vụ điều khiển máy
Các tác vụ sao chép dữ liệu
– Từ thanh ghi này sang thanh ghi khác (Td: LD A, B)
(a) Byte dữ liệu cụ thể vào thanh ghi hay ô nhớ (Td: LD B, 32H)
(b) Dữ liệu cụ thể 16 bit vào cặp thanh ghi (Td: LD HL, 2050H)
– Từ ô nhớ vào thanh ghi hoặc ngược lại (Td: LD A, (2080H))
– Từ cổng nhập có địa chỉ 8 bit vào thanh ghi A (Td: IN A, (01H))
– Từ thanh ghi A ra cổng xuất có địa chỉ 8 bit (Td: OUT (07H), A)
– Từ các thanh ghi Z80 vào các ô nhớ stack và ngược lại (Td: PUSH
BC)
– Hoán đổi nội dung giữa những thanh ghi (Td: EX DE, HL).
Nhóm sao chép 8 bit (nạp 8 bit)
Dạng lệnh: LD
op1, op2
Lệnh này thực hiện sao chép giá trị của toán hạng op2 vào toán
hạng op1. Với op1 và op2 có thể là:
• r hay r’ chỉ thanh ghi 8 bit (như A, B,...)
• n chỉ hằng số nguyên 1 byte (như 20H) (chỉ có với op2)
• ô nhớ có địa chỉ nn (như (2050H)) hoặc được chỉ bởi cặp thanh
ghi (như (HL), (BC), (DE)) hoặc được chỉ bởi thanh ghi chỉ số (IX

hoặc IY) với độ dời d.
Thí dụ:
LD
A, B
LD
A, 15H
LD
(HL), A
LD
B, (IX+19H) ; địa chỉ ô nhớ là trị của IX cộng với 19H
LD
(1010H), A
Nhóm sao chép 16 bit (nạp 16 bit)
Dạng lệnh: LD
op1, op2
Lệnh này thực hiện sao chép giá trị của toán hạng op2 vào toán
hạng op1. Với op1 và op2 có thể là:

BT-VXL-Ch 2 – trang 2


dd chỉ cặp thanh ghi 16 bit (như BC, DE, HL, SP)
nn chỉ hằng số nguyên 2 byte (như 2030H) (chỉ có với op2)
2 ô nhớ 8 bit có địa chỉ đầu là nn (như (2050H))
cặp thanh ghi chỉ số (như IX, IY)
LD
HL, 5000H
LD
HL, (4545H) ; nếu ô nhớ ở 4545H chứa trị 37H và ô nhớ
ở 4546H chứa A1H thì HL sẽ chứa giá trị 16 bit là A137H.

LD
IX, (6564H)
LD
(4392H), HL ; nếu HL chứa A530H thì ô nhớ ở 4392H sẽ
chứa trị 30H và ô nhớ ở 4393H sẽ chứa trị A5H.




Thí dụ:

Các thí dụ lập trình:
Thí dụ 1: Xoá 1 phần bộ nhớ
Ta muốn xóa nội dung bộ nhớ từ địa chỉ BASE đến địa chỉ BASE +
LENGTH với LENGTH nhỏ hơn 256.
Bài giải.
ZEPROM: LD
B, LENGTH ; Nạp vào B chiều dài LENGTH
LD
A, 0
; xóa 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
RET
Chú ý:
• Sau khi thực thi lệnh DEC B thì cờ Z sẽ được đặt theo giá trị ở B
(Z=1 nếu B là 0 và Z=0 nếu B khác 0).
• Lệnh JR NZ, CLEAR là lệnh nhảy tương đối (R=Relative=tương
đối) đến nhãn chương trình CLEAR khi điều kiện NZ đúng
(NZ=Not Zero, nghóa là khi Z=0)
• RET là lệnh return (quay về từ chương trình con).
Ta có thể viết lại đoạn chương trình trên gọn hơn:
ZEPROM: LD
B, LENGTH ; Nạp vào B chiều dài LENGTH
LD
HL, BASE ; chỉ đến BASE
LOOP:
LD
(HL), 0
; xóa ô nhớ có địa chỉ chứa
trong HL
INC HL
; HL = HL + 1 để chỉ đến ô nhớ kế
DJNZ LOOP

BT-VXL-Ch 2 – trang 3


RET
Chú ý:

Ý nghóa của lệnh DJNZ LOOP tương đương với nhóm lệnh DEC B
rồi JR NZ, LOOP. Nghóa là trước hết cho B = B – 1, sau đó kiểm tra nếu
B=0 (Z=1) thì thực thi lệnh kế, nếu B ≠ 0 (Z=0) thì nhảy đến nhãn LOOP.
Thí dụ 2: Kiểm tra 1 ký tự
Ta sẽ kiểm tra xem ký tự ở ô nhớ LOC có bằng 0, 1, hoặc 2 không?
Bài giải.
Đoạn chương trình sau sẽ thực hiện việc kiểm tra trị số ở ô nhớ LOC có
bằng 0, 1, hoặc 2 hay không?
ZOT: LD
A, (LOC)
; lấy nội dung ô nhớ LOC chép vào A
CP
0
; so sánh A với 0?
JP
Z, ZERO
; nếu A = 0 thì nhảy đến nhãn ZERO
CP
1
; so sánh A với 1?
JP
Z, ONE
; nếu A = 1 thì nhảy đến nhãn ZERO
CP
2
; so sánh A với 1?
JP
Z, TWO
; nếu A = 2 thì nhảy đến nhãn ZERO
JP

NOTFND ; nếu khác 0, 1, 2 thì nhảy đến nhãn NOTFND
Chú ý:
• Lệnh CP operand thực hiện so sánh toán hạng operand (có
thể là thanh ghi 1 byte khác như B, C,... hoặc hằng số 1 byte) với
thanh ghi A: nếu A = operand thì cờ Z=1, nếu A < operand thì cờ
C=1.
• Lệnh JP cond, true là lệnh nhảy (JP=Jump=nhảy) đến nhãn
true khi điều kiện cond đúng và thực hiện lệnh kế khi điều kiện
cond sai. Với điều kiện có thể là NZ (Not Zero=khác không), Z
(Zero=bằng không), NC (No Carry=không có nhớ), C (Carry=có
nhớ), PO (Parity Odd=parity lẽ), PE (Parity Even = parity chẳn),
P (Positive hay Plus, khi cờ S=0: số dương), M (Minus, khi cờ
S=1: số âm)
Thí dụ 3: 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.
BRACK:
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

BT-VXL-Ch 2 – trang 4



EXIT:

CP
39H
JR
NC, EXIT
CP
A
RET

; so sánh với ASCII của số 9
; nếu A > 39H thì thoát
; làm cho cờ Z=1

Thí dụ: Tìm phần tử lớn nhất trong bảng
Địa chỉ bắt đầu của bảng được chứa ở địa chỉ BASE. Phần tử đầu của
bảng là số byte có trong bảng. Chương trình sau sẽ tìm phần tử lớn nhất
trong bảng (giả sử bảng chứa các số nguyên dương). Giá trị lớn nhất được
cất vào A, và vị trí của nó được cất vào ô nhớ INDEX.
Chương trình này sử dụng các thanh ghi A, F, B, H và L, và sẽ sử
dụng định địa chỉ chỉ số để có thể tìm kiếm bảng ở bất cứ chỗ nào trong
bộ nhớ.
MAX:
LD
HL, BASE ; Địa chỉ bảng
LD
B, (HL)
; số byte trong bảng
LD

A, 0
; xóa giá trị max
INC HL
; khởi trị cho chỉ số là phần tử thứ nhất
LD
(INDEX), HL
; phần tử kế
LOOP:
CP
(HL)
; so sánh với phần tử kế
JR
NC, NOSW ; nhảy nếu nhỏ hơn A
LD
A, (HL)
; nạp giá trị max mới
LD
(INDEX), HL
; nạp chỉ số mới
NOSW:
INC HL
; chỉ đến phần tử kế
DEC B
; giảm bộ đếm
JR
NZ, LOOP ; lặp lại nếu chưa duyệt hết bảng
RET
2.1 Viết chương trình kiểm tra bộ nhớ như sau: đầu tiên xóa 1 khối 256
byte (nghóa là gán trị 00H), sau đó kiểm tra lại xem các ô nhớ đó có bằng
không?. Lần 2: Lặp lại công việc trên với các số 1 (nghóa là gán trị FFH).

Lần 3: Lặp lại công việc trên với các số 01010101 (nghóa là gán trị 55H).
Và cuối cùng lần 4 với các số 10101010 (nghóa là gán trị AAH).
2.2 Viết lại chương trình 2.1 với trị kiểm tra lần lượt là byte 00H và FFH
xen kẻ nhau.
2.3 Đoạn chương trình sau có tương đương với đoạn chương trình trong thí
dụ 3:
LD
A, (CHAR)

BT-VXL-Ch 2 – trang 5


SUB
JP
SUB
JP
ADD

30H
M, OUT
10
P, OUT
10

2.4 Viết chương trình con kiểm tra xem 1 ký tự ASCII ở ô nhớ LOC có
phải là chữ trong dãi ký tự chữ từ A đến Z, nếu đúng thì cho cờ Z=1.
2.5 Viết chương trình con kiểm tra xem 1 ký tự ASCII ở ô nhớ LOC có
phải là chữ trong dãi ký tự chữ từ A đến Z hoặc từ a đến z, nếu đúng thì
cho cờ Z=1.
2.6 Sửa lại thí dụ tìm kiếm phần tử lớn nhất trong bảng để làm việc với cả

các số âm dạng bù 2.
2.7 Sửa lại thí dụ tìm kiếm phần tử lớn nhất trong bảng để thành chương
trình tìm phần tử nhỏ nhất trong bảng.
2.8 Viết chương trình sắp thứ tự các số trong bảng theo thứ tự tăng dần

BT-VXL-Ch 2 – trang 6



Tài liệu bạn tìm kiếm đã sẵn sàng tải về

Tải bản đầy đủ ngay
×