1. Trang chủ
  2. » Kỹ Thuật - Công Nghệ

Vxl bt ch2 VI XỬ LÝ

6 2 0

Đang tải... (xem toàn văn)

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Tiêu đề Giới thiệu một số nhóm lệnh trong tập lệnh Z80
Người hướng dẫn GVPT: Hồ Trung Mỹ
Trường học Đại Học Bách Khoa Thành Phố Hồ Chí Minh
Chuyên ngành Vi xử lý
Thể loại Bài tập
Thành phố Thành phố Hồ Chí Minh
Định dạng
Số trang 6
Dung lượng 78,4 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Microsoft Word vxl bt ch2 doc BT VXL Ch 2 – trang 1 ÑHBK Tp HCM–BMÑT GVPT Hoà Trung Myõ Baøi taäp Vi Xöû Lyù – Chöông 2 Giôùi thieäu moät soá nhoùm leänh trong taäp leänh Z80 VXL Z80 coù 158 kieåu leä[.]

Trang 1

Đ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 Mã nhị phân (mã máy)

sao chép nội dung của thanh

ghi B vào thanh ghi A

LD A, B 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 Mã nhị phân (mã máy)

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

32

LD B, 32H 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 Mã nhị phân (mã máy)

Nạp vào cặp thanh ghi BC giá trị

16 bit là 2080H LD BC, 2080H 0000 0001 (01H) Byte 1 1000 0000 (80H) Byte 2

0010 0000 (20H) Byte 3

Các lệnh 4 byte

Tác vụ opcode operand Mã nhị phân (mã máy)

Nạp vào thanh ghi chỉ số IX với

địa chỉ 16 bit là 2000H LD IX, 2000H 0010 0001 (21H) Byte2 1101 1101 (DDH) Byte1

0000 0000 (00H) Byte3

0010 0000 (20H) Byte4

Trang 2

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 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à:

Trang 3

• 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)

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 (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ớ

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ế

Trang 4

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

Trang 5

CP 39H ; so sánh với ASCII của số 9

JR NC, EXIT ; nếu A > 39H thì thoát

EXIT: RET

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ế

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:

Trang 6

SUB 30H

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

Ngày đăng: 13/04/2023, 08:05

w