Vxl bt ch2 VI XỬ LÝ

6 0 0
Vxl bt ch2 VI XỬ LÝ

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

Thông tin tài liệu

ÑHBK Tp HCM–BMÑT Ñ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änh; noù bao goàm taát caû nhöõng le[.]

ĐHBK Tp HCM–BMĐT GVPT: Hồ Trung Mỹ Bài tập Vi Xử Lý – Chương Giới thiệu số nhóm lệnh tập lệnh Z80 VXL Z80 có 158 kiểu lệnh; bao gồm tất lệnh VXL 8085 (Intel) Mỗi lệnh có phần: tác vụ (công việc) thực (như nạp [Load], cộng [Add], nhảy [Jump] ) gọi mã tác vụ hay mã lệnh (opcode); phần thứ hai liệu làm việc với tác vụ gọi toán hạng (toán hạng) Các lệnh byte Trong lệnh byte mã lệnh toán hạng byte Tác vụ opcode operand chép nội dung ghi B vào ghi A LD A, B Mã nhị phân (mã máy) 01111000 (78H) Các lệnh byte Trong lệnh byte byte đầu mã lệnh byte thứ hai toán hạng Tác vụ opcode operand Nạp vào 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 byte Trong lệnh byte byte đầu mã lệnh byte địa hay liệu 16 bit theo thứ tự ngược: byte thấp trước tới byte cao Tác vụ opcode operand Nạp vào cặp ghi BC giá trị 16 bit 2080H LD BC, 2080H Tác vụ opcode operand Nạp vào ghi số IX với địa 16 bit 2000H LD IX, 2000H Các lệnh byte Mã nhị phân (mã máy) 0000 0001 (01H) Byte 1000 0000 (80H) Byte 0010 0000 (20H) Byte Mã nhị phân (mã máy) 1101 1101 (DDH) Byte1 0010 0001 (21H) Byte2 0000 0000 (00H) Byte3 0010 0000 (20H) Byte4 Tập lệnh Z80 chia làm nhóm chính: BT-VXL-Ch – trang 1 Các tác vụ nạp (Load) chép liệu (chuyển liệu) Các tác vụ số học Các tác vụ logic Xử lý bit Tác vụ rẽ nhánh chương trình Các tác vụ điều khiển máy Các tác vụ chép liệu – Từ ghi sang ghi khác (Td: LD A, B) (a) Byte liệu cụ thể vào ghi hay ô nhớ (Td: LD B, 32H) (b) Dữ liệu cụ thể 16 bit vào cặp ghi (Td: LD HL, 2050H) – Từ ô nhớ vào ghi ngược lại (Td: LD A, (2080H)) – Từ cổng nhập có địa bit vào ghi A (Td: IN A, (01H)) – Từ ghi A cổng xuất có địa bit (Td: OUT (07H), A) – Từ ghi Z80 vào ô nhớ stack ngược lại (Td: PUSH BC) – Hoán đổi nội dung ghi (Td: EX DE, HL) Nhóm chép bit (nạp bit) Dạng lệnh: LD op1, op2 Lệnh thực chép giá trị toán hạng op2 vào toán hạng op1 Với op1 op2 là:  r hay r’ ghi bit (như A, B, )  n số nguyên byte (như 20H) (chỉ có với op2)  ô nhớ có địa nn (như (2050H)) cặp ghi (như (HL), (BC), (DE)) ghi số (IX IY) với độ dời d Thí dụ: LD A, B LD A, 15H LD (HL), A LD B, (IX+19H) ; địa ô nhớ trị IX cộng với 19H LD (1010H), A Nhóm chép 16 bit (nạp 16 bit) Dạng lệnh: LD op1, op2 Lệnh thực chép giá trị toán hạng op2 vào toán hạng op1 Với op1 op2 là:  dd cặp ghi 16 bit (nhö BC, DE, HL, SP) BT-VXL-Ch – trang  nn số nguyên byte (như 2030H) (chỉ có với op2)  ô nhớ bit có địa đầu nn (như (2050H))  cặp ghi số (như IX, IY) Thí dụ: LD HL, 5000H LD HL, (4545H) ; ô nhớ 4545H chứa trị 37H ô nhớ 4546H chứa A1H HL chứa giá trị 16 bit A137H LD IX, (6564H) LD (4392H), HL ; HL chứa A530H ô nhớ 4392H chứa trị 30H ô nhớ 4393H chứa trị A5H Các thí dụ lập trình: Thí dụ 1: Xoá phần nhớ Ta muốn xóa nội dung nhớ từ địa BASE đến địa BASE + LENGTH với LENGTH nhỏ 256 Bài giải ZEPROM: LD B, LENGTH ; Nạp vào B chiều dài LENGTH LD A, ; xóa A LD HL, BASE ; đến BASE CLEAR: LD (HL), A ; xóa ô nhớ có địa chứa HL INC HL ; HL = HL + để đến ô nhớ kế DEC B ; B = B – giảm đếm số ô nhớ JR NZ, CLEAR RET Chú ý:  Sau thực thi lệnh DEC B cờ Z đặt theo giá trị B (Z=1 B Z=0 B khác 0)  Lệnh JR NZ, CLEAR lệnh nhảy tương đối (R=Relative=tương đối) đến nhãn chương trình CLEAR điều kiện NZ (NZ=Not Zero, nghóa Z=0)  RET lệnh return (quay từ chương trình con) Ta viết lại đoạn chương trình gọn hơn: ZEPROM: LD B, LENGTH ; Nạp vào B chiều dài LENGTH LD HL, BASE ; đến BASE LOOP: LD (HL), ; xóa ô nhớ có địa chứa HL INC HL ; HL = HL + để đến ô nhớ kế DJNZ LOOP RET Chú ý: BT-VXL-Ch – trang Ý nghóa lệnh DJNZ LOOP tương đương với nhóm lệnh DEC B JR NZ, LOOP Nghóa trước hết cho B = B – 1, sau kiểm tra B=0 (Z=1) thực thi lệnh kế, B  (Z=0) nhảy đến nhãn LOOP Thí dụ 2: Kiểm tra ký tự Ta kiểm tra xem ký tự ô nhớ LOC có 0, 1, không? Bài giải Đoạn chương trình sau thực việc kiểm tra trị số ô nhớ LOC có 0, 1, hay không? ZOT: LD A, (LOC) ; lấy nội dung ô nhớ LOC chép vào A CP ; so sánh A với 0? JP Z, ZERO ; A = nhảy đến nhãn ZERO CP ; so sánh A với 1? JP Z, ONE ; A = nhảy đến nhãn ZERO CP ; so sánh A với 1? JP Z, TWO ; A = nhảy đến nhãn ZERO JP NOTFND ; khác 0, 1, nhảy đến nhãn NOTFND Chú ý:  Lệnh CP operand thực so sánh toán hạng operand (có thể ghi byte khác B, C, số byte) với ghi A: A = operand cờ Z=1, A < operand cờ C=1  Lệnh JP cond, true lệnh nhảy (JP=Jump=nhảy) đến nhãn true điều kiện cond thực lệnh kế điều kiện cond sai Với điều kiện 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, cờ S=0: số dương), M (Minus, cờ S=1: số âm) Thí dụ 3: Kiểm tra ký tự có thuộc dãi trị số không Viết chương trình kiểm tra xem ký tự ASCII ô nhớ LOC có phải số dãi số từ đến 9, 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 số JR C, EXIT ; A < 30H thoát CP 39H ; so sánh với ASCII số JR NC, EXIT ; A > 39H thoát CP A ; làm cho cờ Z=1 EXIT: RET BT-VXL-Ch – trang Thí dụ: Tìm phần tử lớn bảng Địa bắt đầu bảng chứa địa BASE Phần tử đầu bảng số byte có bảng Chương trình sau tìm phần tử lớn bảng (giả sử bảng chứa số nguyên dương) Giá trị lớn cất vào A, vị trí cất vào ô nhớ INDEX Chương trình sử dụng ghi A, F, B, H L, sử dụng định địa chỉ số để tìm kiếm bảng chỗ nhớ MAX: LD HL, BASE ; Địa bảng LD B, (HL) ; số byte bảng LD A, ; xóa giá trị max INC HL ; khởi trị cho số phần tử thứ LD (INDEX), HL ; phần tử kế LOOP: CP (HL) ; so sánh với phần tử kế JR NC, NOSW ; nhảy nhỏ A LD A, (HL) ; nạp giá trị max LD (INDEX), HL ; nạp số NOSW: INC HL ; đến phần tử kế DEC B ; giảm đếm JR NZ, LOOP ; lặp lại chưa duyệt hết bảng RET 2.1 Viết chương trình kiểm tra nhớ sau: xóa khối 256 byte (nghóa gán trị 00H), sau kiểm tra lại xem ô nhớ có không? Lần 2: Lặp lại công việc với số (nghóa gán trị FFH) Lần 3: Lặp lại công việc với số 01010101 (nghóa gán trị 55H) Và cuối lần với số 10101010 (nghóa gán trị AAH) 2.2 Viết lại chương trình 2.1 với trị kiểm tra byte 00H FFH xen kẻ Đoạn chương trình sau có tương đương với đoạn chương trình thí duï 3: LD A, (CHAR) SUB 30H JP M, OUT SUB 10 JP P, OUT ADD 10 BT-VXL-Ch – trang 2.3 Viết chương trình kiểm tra xem ký tự ASCII ô nhớ LOC có phải chữ dãi ký tự chữ từ A đến Z, cho cờ Z=1 2.4 Viết chương trình kiểm tra xem ký tự ASCII ô nhớ LOC có phải chữ dãi ký tự chữ từ A đến Z từ a đến z, cho cờ Z=1 2.5 Sửa lại thí dụ tìm kiếm phần tử lớn bảng để làm việc với số âm dạng bù 2.6 Sửa lại thí dụ tìm kiếm phần tử lớn bảng để thành chương trình tìm phần tử nhỏ bảng 2.7 Viết chương trình thứ tự số bảng theo thứ tự tăng daàn BT-VXL-Ch – trang

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

Tài liệu cùng người dùng

  • Đang cập nhật ...

Tài liệu liên quan