Bài tập môn Vi xử lý - Chương 2 - Hồ Trung Mỹ

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

 

doc 6 trang thamphan 28/12/2022 2140
Bạn đang xem tài liệu "Bài tập môn Vi xử lý - Chương 2 - Hồ Trung Mỹ", để tải tài liệu gốc về máy hãy click vào nút Download ở trên.

File đính kèm:

  • docbai_tap_mon_vi_xu_ly_chuong_2_ho_trung_my.doc

Nội dung text: Bài tập môn Vi xử lý - Chương 2 - Hồ Trung Mỹ

  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. Mã nhị phân Tác vụ opcode operand (mã máy) sao chép nội dung của thanh LD A, B 01111000 (78H) ghi B vào thanh ghi A 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. Mã nhị phân Tác vụ opcode operand (mã máy) Nạp vào thanh ghi B số hex LD B, 32H 0000 0110 (06H) Byte1 32 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. Mã nhị phân Tác vụ opcode operand (mã máy) Nạp vào cặp thanh ghi BC giá trị LD BC, 2080H 0000 0001 (01H) Byte 1 16 bit là 2080H 1000 0000 (80H) Byte 2 0010 0000 (20H) Byte 3 Các lệnh 4 byte Mã nhị phân Tác vụ opcode operand (mã máy) Nạp vào thanh ghi chỉ số IX với LD IX, 2000H 1101 1101 (DDH) Byte1 địa chỉ 16 bit là 2000H 0010 0001 (21H) Byte2 0000 0000 (00H) Byte3 0010 0000 (20H) Byte4 BT-VXL-Ch 2 – trang 1
  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) 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 BT-VXL-Ch 2 – trang 3
  3. JR NC, EXIT ; nếu A > 39H thì thoát CP A ; làm cho cờ Z=1 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ế 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 BT-VXL-Ch 2 – trang 5