Tải bản đầy đủ (.doc) (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 (62.52 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

Các lệnh 4 byte

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


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:

BT-VXL-Ch 2 – trang 1


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à:
 dd chỉ cặp thanh ghi 16 bit (nhö BC, DE, HL, SP)
BT-VXL-Ch 2 – trang 2




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)
Thí dụ:
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.
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
RET
Chú ý:

BT-VXL-Ch 2 – trang 3


Ý 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
CP
39H
; so sánh với ASCII của số 9
JR
NC, EXIT
; nếu A > 39H thì thoát

CP
A
; làm cho cờ Z=1
EXIT:
RET
BT-VXL-Ch 2 – trang 4


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.
Đ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)
SUB 30H
JP
M, OUT
SUB 10
JP
P, OUT
ADD 10

BT-VXL-Ch 2 – trang 5


2.3 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.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 hoặc từ
a đến z, nếu đúng thì cho cờ Z=1.
2.5 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.6 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.7 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
×