Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 200 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
200
Dung lượng
2,9 MB
Nội dung
Giáo trình vi xử lý LỜI NĨI ĐẦU Giáo trình Vi xử lý biên soạn nhằm cung cấp cho sinh viên kiến thức vi xử lý, cấu trúc hệ vi xử lý cách thức lập trình điều khiển thiết bị dựa sở Vi xử lý 8086/8088 Giáo trình sử dụng cho khóa học 60 tiết dành cho sinh viên hệ đại học Khoa Điện Điện tử trường Đại học Dân lập Kỹ thuật Công nghệ TPHCM Bố cục giáo trình gồm chương dựa theo đề cương mơn học Kỹ thuật Vi xử lý dành cho sinh viên ngành Điện Tử Viễn Thông: Chương Tổ chức hệ thống Vi xử lý Chương Lập trình hợp ngữ Chương Tổ chức nhập / xuất Chương Giao tiếp với thiết bị đơn giản Phụ lục 1: 8255 Phụ lục 2: Tập lệnh họ 8086 PHẠM HÙNG KIM KHÁNH i Giáo trình vi xử lý MỤC LỤC CHƯƠNG 1: TỔ CHỨC HỆ THỐNG VI XỬ LÝ 1 Các hệ thống số dùng máy tính loại mã 1.1 Hệ thập phân (Decimal Number System) 1.2 Hệ nhị phân (Binary Number System) .1 1.3 Hệ thập lục phân (Hexadecimal Number System) .2 1.4 Mã BCD (Binary Coded Decimal) .3 1.5 Mã hiển thị Led đoạn (7-segment display) .3 Các phép toán số học 2.1 Hệ nhị phân 2.2 Hệ thập lục phân Các thiết bị số 3.1 Cổng đệm (buffer) cổng logic (logic gate) .8 3.2 Thiết bị logic lập trình .9 3.3 Chốt, flipflop ghi 10 3.4 Bộ nhớ 12 Giới thiệu vi xử lý 13 4.1.Các hệ vi xử lý 13 4.2 Vi xử lý (μP – microproccessor) 13 4.3 Giao tiếp với nhớ 16 μP 8086/8088 21 5.1 Giới thiệu 21 5.2 Mô tả chân 22 5.3 Kiến trúc nội .28 5.4 Các ghi 30 Phân đoạn nhớ 32 Các cách định địa .36 7.1 Định địa tức thời 37 7.2 Định địa ghi 37 7.3 Định địa trực tiếp 37 7.4 Định địa truy xuất nhớ gián tiếp 37 7.5 Định địa chuỗi 38 7.6 Thay đổi ghi đoạn mặc định 39 ii Giáo trình vi xử lý Bài tập chương 40 CHƯƠNG 2: LẬP TRÌNH HỢP NGỮ 43 Các tập tin EXE COM 43 1.1 Tập tin COM .43 1.2 Tập tin EXE .43 Khung chương trình hợp ngữ 43 Cú pháp lệnh chương trình hợp ngữ 45 3.1 Khai báo liệu 45 3.2 Khai báo biến .45 3.3 Khai báo 47 Các toán tử hợp ngữ 47 Các cách định địa hợp ngữ 50 Tạo thực thi chương trình hợp ngữ .51 Tập lệnh hợp ngữ .51 7.1 Nhóm lệnh chuyển liệu 51 7.2 Nhóm lệnh chuyển điều khiển 54 7.3 Nhóm lệnh xử lý số học .57 7.4 Nhóm lệnh xử lý chuỗi .62 Các cấu trúc lập trình hợp ngữ .63 8.1 Cấu trúc 63 8.2 Cấu trúc IF – THEN, IF – THEN – ELSE 63 8.3 Cấu trúc CASE 64 8.4 Cấu trúc FOR .64 8.5 Cấu trúc lặp WHILE 65 8.6 Cấu trúc lặp REPEAT 65 Các ngắt 8086 .65 9.1 Ngắt 21h .66 9.2 Ngắt 10h .67 10 Truyền tham số chương trình 68 10.1 Truyền tham số qua ghi 68 10.2 Truyền tham số qua ô nhớ (biến) .69 10.3 Truyền tham số qua ô nhớ ghi đến 69 10.4 Truyền tham số qua stack .70 11 Các ví dụ minh hoạ 71 iii Giáo trình vi xử lý 11.1 In chuỗi ký tự hình .71 11.2 In chuỗi ký tự hình toạ độ nhập vào 71 11.3 Cộng số nhị phân dài byte 72 11.4 Nhập chuỗi ký tự chuyển chữ thường thành chữ hoa 73 Bài tập chương 74 CHƯƠNG 3: TỔ CHỨC NHẬP / XUẤT 77 Các mạch phụ trợ 8284 8288 77 1.1 Mạch tạo xung nhịp 8284 .77 1.2 Mạch điều khiển bus 8288 78 Giao tiếp với thiết bị ngoại vi 80 2.1 Các kiểu giao tiếp nhập / xuất 80 2.2 Giải mã địa cho thiết bị nhập / xuất 80 2.3 Các mạch cổng đơn giản 81 2.4.Giao tiếp nhập / xuất song song lập trình 8255A PPI (Programmable Peripheral Interface) 81 2.4.1 Giới thiệu .81 2.4.2 Sơ đồ khối 82 2.4.3 Mode 0: Nhập / xuất đơn giản .85 2.4.4 Mode BSR 89 2.4.5 Mode 1: Nhập / xuất với bắt tay (handshake) .90 2.4.6 Mode 2: Truyền liệu song hướng 94 2.4.7 Các ví dụ minh họa 95 Bài tập chương 108 CHƯƠNG 4: GIAO TIẾP VỚI CÁC THIẾT BỊ ĐƠN GIẢN 109 Giao tiếp LED (Light Emitting Diode) 109 1.1 Giao tiếp LED đơn .109 1.2 Giao tiếp ma trận LED 111 Giao tiếp bàn phím 115 2.1 Giao tiếp phím đơn .115 2.2 Giao tiếp bàn phím Hex 119 Bài tập chương 126 Phụ lục 1: 8255 127 Phụ lục 2: Tập lệnh 8086 153 iv Giáo trình vi xử lý Tổ chức hệ thống vi xử lý CHƯƠNG 1: TỔ CHỨC HỆ THỐNG VI XỬ LÝ Các hệ thống số dùng máy tính loại mã 1.1 Hệ thập phân (Decimal Number System) Trong thực tế, ta thường dùng hệ thập phân để biểu diễn giá trị số Ở hệ thống này, ta dùng tổ hợp chữ số để biểu diễn giá trị Một số hệ thập phân biểu diễn theo số mũ 10 VD: Số 5346.72 biểu diễn sau: 5346.72 = 5x103 + 3x102 + 4x10 + + 7x10-1 + 2x10-2 Tuy nhiên, mạch điện tử, việc lưu trữ phân biệt 10 mức điện áp khác khó khăn việc phân biệt hai mức điện áp lại dễ dàng Do đó, người ta sử dụng hệ nhị phân để biểu diễn giá trị hệ thống số 1.2 Hệ nhị phân (Binary Number System) Hệ nhị phân dùng chữ số để biểu diễn giá trị số Một số nhị phân (binary digit) thường gọi bit Một chuỗi gồm bit nhị phân gọi nibble, chuỗi bit gọi byte, chuỗi 16 bit gọi word chuỗi 32 bit gọi double word Chữ số nhị phân bên phải chuỗi bit gọi bit có ý nghĩa nhỏ (least significant bit – LSB) chữ số nhị phân bên trái chuỗi bit gọi bit có ý nghĩa lớn (most significant bit – MSB) Một số hệ nhị phân biểu diễn theo số mũ Ta thường dùng chữ b cuối chuỗi bit để xác định số nhị phân VD: Số 101110.01b biểu diễn giá trị số: 101110.01b Ỉ 1x25 + 0x24 + 1x23 +1x22 + 1x21 + + 0x2-1 + 1x2-2 Chuyển số nhị phân thành số thập phân: Để chuyển số nhị phân thành số thập phân, ta cần nhân chữ số số nhị phân với giá trị thập phân cộng tất giá trị lại VD: 1011.11B Ỉ 1x23 + 0x22 + 1x21 + + 1x2-1 + 1x2-2 = 11.75 Chuyển số thập phân thành số nhị phân: Để chuyển số thập phân thành số nhị phân, ta dùng phương pháp sau: ¾ Phương pháp 1: Ta lấy số thập phân cần chuyển trừ 2i 2i số lớn nhỏ hay số thập phân cần chuyển Sau đó, ta lại lấy kết thực tương tự 20 dừng Trong trình thực hiện, ta ghi lại giá trị hay cho bit tuỳ theo trường hợp số thập phân nhỏ 2i (0) hay lớn 2i (1) Phạm Hùng Kim Khánh Trang Giáo trình vi xử lý Tổ chức hệ thống vi xử lý i VD: Xét số 21 số lớn 24 16 21 = 23 22 1 21 20 1 ( 21 ặ 10101B) ắ Phng phỏp 2: Lấy số cần chuyển chia cho 2, ta nhớ lại số dư lấy tiếp thương kết chia cho thực tương tự thương cuối Kết chuyển đổi chuỗi bit số dư lấy theo thứ tự ngược lại VD: Chuyển 227 số nhị phân Số bị chia Thương 227 113 113 56 56 28 28 14 14 7 3 1 ( 227 Ỉ 11100011b) Số dư ( LSB) 0 1 ( MSB) ¾ Để thực chuyển số thập phân nhỏ sang số nhị phân, ta làm sau: lấy số cần chuyển nhân với 2, giữ lại phần nguyên lại lấy phần lẻ nhân với Quá trình tiếp tục phần lẻ dừng Kết chuyển đổi chuỗi bit giá trị phần nguyên VD: Chuyển 0.625 thành số nhị phân: 0.625 × = 1.25 0.25 × = 0.5 0.5 × = 1.0 ( 0.625 = 0.101b) ¾ Để thực chuyển đổi số nhị phân bất kỳ, ta thực chuyển đổi tương ứng với số nhị phân lớn nhỏ VD: Chuyển 227.625 thành số nhị phân: 227 Ỉ 11100011b 0.625 Ỉ 0.101b 227.625 Ỉ 11100011.101b 1.3 Hệ thập lục phân (Hexadecimal Number System) Như biết trên, dùng hệ nhị phân cần số lượng lớn bit để biểu diễn Giả sử số 1024 = 210 cần 10 bit để biểu diễn Để rút ngắn kết Phạm Hùng Kim Khánh Trang Giáo trình vi xử lý Tổ chức hệ thống vi xử lý biểu diễn, ta dùng hệ thập lục phân dựa sở số mũ 16 Khi đó, bit hệ nhị phân (1 nibble) biểu diễn chữ số hệ thập lục phân (gọi số hex) Trong hệ thống này, ta dùng số kí tự A F để biểu diễn cho giá trị số Thông thường, ta dùng chữ h cuối để xác định số thập lục phân 1.4 Mã BCD (Binary Coded Decimal) Trong thực tế, số ứng dụng đếm tần, đo điện áp, … ngõ dạng số thập phân, ta dùng mã BCD Mã BCD dùng bit nhị phân để mã hoá cho số thập phân Như vậy, số hex A F không tồn mã BCD Mã BCD gồm có loại: - Mã BCD không nén (unpacked): biểu diễn số BCD bit nhị phân Mã BCD nén (packed): biểu diễn số BCD bit nhị phân VD: Số thập phân Số BCD không nén 0000 0101b 0000 0010b 0000 1001b Số BCD nén 1.5 0101b 0010b 1001b Mã hiển thị Led đoạn (7-segment display) Đối với ứng dụng dùng hiển thị số liệu Led đoạn, ta dùng mã hiển thị Led đoạn Ứng với loại Led đoạn (anode hay cathode chung) tuỳ theo sơ đồ kết nối có bảng mã riêng Một ví dụ mã Led đoạn cho bảng 1.1 a f g e a b c d e f g b c d Hình 1.1 – Led đoạn dạng cathode chung Bảng 1.1: Số thập phân Số thập lục phân Phạm Hùng Kim Khánh Số nhị phân 0000 0001 0010 0011 0100 0101 0110 0111 Mã Led đoạn a b c d e f g Hiển thị 1111110 0110000 1101101 1111011 0110011 1011011 1011111 1110000 Trang Giáo trình vi xử lý Tổ chức hệ thống vi xử lý 10 11 12 13 14 15 A B C D E F 1000 1001 1010 1011 1100 1101 1110 1111 1111111 1110011 1111101 0011111 0001101 0111101 1101111 1000111 A B C D E F Các phép toán số học 2.1 Hệ nhị phân 2.1.1 Phép cộng Phép cộng hệ nhị phân thực giống hệ thập phân Bảng thật phép cộng bit với bit nhớ (carry) sau: Bảng 1.2: A 0 0 1 1 Vào B 0 1 0 1 CIN 1 1 S 1 0 Ra COUT 0 1 1 S = A ⊕ B ⊕ CIN COUT = AB + CIN(A ⊕ B) VD: 1001 1010b + 1100 1100b Nhớ 0111 0110b 2.1.2 Số bù (2’s component) Trong hệ thống số thông thường, để biểu diễn số âm ta cần thêm dấu – vào chữ số Tuy nhiên, hệ thống máy tính, ta khơng thể biểu diễn Phương pháp thông dụng dùng bit có ý nghĩa lớn (MSB) làm bit dấu (sign bit): MSB = số âm cịn MSB = số dương Khi đó, bit lại biểu diễn độ lớn (magnitude) số Như vậy, ta dùng bit để biểu diễn thu 256 tổ hợp ứng với giá trị 255 (số không dấu) hay –127 –0 +0 … +127 (số có dấu) Phạm Hùng Kim Khánh Trang Giáo trình vi xử lý Tổ chức hệ thống vi xử lý Để thuận tiện việc tính tốn số có dấu, ta dùng dạng biểu diễn đặc biệt số bù Số bù số nhị phân xác định cách lấy đảo bit cộng thêm VD: Số biểu diễn : 0000 0111b có MSB = (biểu diễn số dương) Số bù : 111 1000b + 1b = 111 1001b Số đại diện cho số – là: 1111 1001b có MSB = (biểu diễn số âm) Ta thấy, để thực việc xác định số bù số A, cần phải: - Biểu diễn số A theo mã bù Đảo bit (tìm số bù A) Cộng thêm vào để nhận số bù Khi biểu diễn theo số bù 2, sử dụng bit ta có giá trị số thay đổi từ 128 127 2.1.3 Phép trừ Phép trừ số nhị phân thực tương tự hệ thập phân Bảng thật phép trừ bit với bit mượn (borrow) sau: Bảng 1.3: A 0 0 1 1 Vào B BIN 0 1 1 0 1 1 D 1 0 Ra BOUT 1 0 S = A ⊕ B ⊕ BIN BOUT = AB + A ⊕ B BIN ( VD: ) 0110 1101b Æ 149 - 0011 0001b 0011 1100b Æ 49 Æ 100 Ngồi cách trừ trên, ta thực phép trừ thông qua số bù số trừ VD: 0110 1101b - 0011 0001b Số bù 0110 1101b → Nhớ + 1100 1111b 0011 1100b 100 1110b + 1b = 100 1111b (Số bù 2) Phạm Hùng Kim Khánh Trang Giáo trình vi xử lý Tổ chức hệ thống vi xử lý Trong phép cộng với số bù 2, ta bỏ qua bit nhớ cuối → kết phép cộng số bù 0011 1100 Đây kết phép trừ, bit MSB = cho biết kết số dương VD: 77 - 88 - 11 0100 1101b - 0101 1000b → 0100 1101b + 1010 1000b 1111 0101b Số 88 Ỉ 0101 1000b → số bù 010 0111 → số bù 2: 010 1000 bit dấu = Ỉ -88 trở thành 1010 1000b Kết phép cộng số bù 1111 0101b có MSB = nên số âm Số bù 000 1010b → số bù 2: 000 1011b Kết 11 nên phép trừ cho kết –11 Ta thấy, để thực chuyển số bù thành số có dấu cần thực hiện: - Lấy bù bit để tìm số bù Cộng với Thêm dấu trừ để xác định số âm 2.1.4 Phép nhân Phép nhân số nhị phân tương tự số thập phân Chú ý phép nhân nhân số bit có kết số bit, số bit có kết số 16 bit, … VD: 11 X9 99 1011b 1001b 1011 0000 0000 1011 1100011b Đối với máy tính, phép nhân thực phương pháp cộng dịch phải (add-and-right-shift): - Thành phần dầu tiên tổng số bị nhân LSB số nhân Ngược lại, LSB số nhân thành phần Mỗi thành phần thứ i tính tương tự với điều kiện phải dịch trái số bị nhân i bit Kết cần tìm tổng thành phần nói 2.1.5 Phép chia Phép chia số nhị phân tương tự số thập phân Phạm Hùng Kim Khánh Trang Giáo trình vi xử lý none none Phụ lục – Tập lệnh (PM) 10/14 - - 4 1 RCL - Rotate Through Carry Left Usage: RCL dest,count Modifies flags: CF OF ÚÄ¿ ỵC7 ỵ> 0ỵ>Cỵ Rotates the bits in the destination to the right "count" times with all data pushed out the right side re-entering on the left The Carry Flag holds the last bit rotated out Operands reg,1 mem,1 reg,CL mem,CL (W88=28+EA+4n) reg,immed8 mem,immed8 808x Clocks 286 386 2 15+EA 8+4n 5+n 20+EA+4n 8+n - 5+n 8+n 486 Size Bytes 10 10 8-30 9-31 2-4 2-4 10 8-30 9-31 3-5 (W88=23+EA) REP - Repeat String Operation Usage: REP Modifies flags: None Repeats execution of string instructions while CX != After each string operation, CX is decremented and the Zero Flag is tested The combination of a repeat prefix and a segment override on CPU's before the 386 may result in errors if an interrupt occurs Trang 182 Giáo trình vi xử lý Phụ lục – Tập lệnh before CX=0 The following code shows code that is susceptible to this and how to avoid it: again: rep movs jcxz loop byte ptr ES:[DI],ES:[SI] ; vulnerable instr next ; continue if REP successful again ; interrupt goofed count next: Operands none 808x Clocks 286 386 486 Size Bytes REPE/REPZ - Repeat Equal / Repeat Zero Usage: REPE REPZ Modifies flags: None Repeats execution of string instructions while CX != and the Zero Flag is set CX is decremented and the Zero Flag tested after each string operation The combination of a repeat prefix and a segment override on processors other than the 386 may result in errors if an interrupt occurs before CX=0 Operands none 808x Clocks 286 386 486 Size Bytes REPNE/REPNZ - Repeat Not Equal / Repeat Not Zero Usage: REPNE REPNZ Modifies flags: None Repeats execution of string instructions while CX != and the Zero Flag is clear CX is decremented and the Zero Flag tested after each string operation The combination of a repeat prefix and a segment override on processors other than the 386 may result in errors if an interrupt occurs before CX=0 Operands none 808x Clocks 286 386 486 Size Bytes RET/RETF - Return From Procedure Usage: RET RETF RETN Modifies flags: nBytes nBytes nBytes None Transfers control from a procedure back to the instruction address saved on the stack "n bytes" is an optional number of bytes to release Far returns pop the IP followed by the CS, while near returns pop only the IP register Operands 808x Clocks 286 386 Trang 183 486 Size Bytes Giáo trình vi xử lý retn retn retf retf retf retf retf retf Phụ lục – Tập lệnh 16/20 11+m 10+m 20/24 11+m 10+m 26/34 15+m 18+m (PM, same priv.) 32+m (PM, lesser priv.) 68 immed 25/33 15+m 18+m immed (PM, same priv.) 32+m immed (PM, lesser priv.) 68 immed 5 13 18 33 14 17 33 1 1 ROL - Rotate Left Usage: ROL dest,count Modifies flags: CF OF ÚÄ¿ C7 ỵ> 0ỵ>C ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ Rotates the bits in the destination to the right "count" times with all data pushed out the right side re-entering on the left The Carry Flag will contain the value of the last bit rotated out Operands reg,1 mem,1 reg,CL mem,CL (W88=28+EA+4n) reg,immed8 mem,immed8 808x Clocks 286 386 2 15+EA 8+4n 5+n 20+EA+4n 8+n - 5+n 8+n 486 Size Bytes 7 4 2-4 2-4 3-5 Trang 184 (W88=23+EA) Giáo trình vi xử lý Phụ lục – Tập lệnh SAHF - Store AH Register into FLAGS Usage: SAHF Modifies flags: AF CF PF SF ZF Transfers bits 0-7 of AH into the Flags Register AF, CF, PF, SF and ZF Operands none 808x Clocks 286 386 This includes 486 Size Bytes SAL/SHL - Shift Arithmetic Left / Shift Logical Left Usage: SAL dest,count SHL dest,count Modifies flags: CF OF PF SF ZF (AF undefined) CC ^ Shifts the destination right by "count" bits with the current sign bit replicated in the leftmost bit The Carry Flag contains the last bit shifted out Operands reg,1 mem,1 reg,CL mem,CL (W88=28+EA+4n) reg,immed8 mem,immed8 808x Clocks 286 386 2 15+EA 8+4n 5+n 20+EA+4n 8+n - 5+n 8+n 486 Size Bytes 7 4 2-4 2-4 3-5 Trang 185 (W88=23+EA) Giáo trình vi xử lý Phụ lục – Tập lệnh SBB - Subtract with Borrow/Carry Usage: SBB dest,src Modifies flags: AF CF OF PF SF ZF Subtracts the source from the destination, and subtracts extra if the Carry Flag is set Results are returned in "dest" Operands reg,reg mem,reg reg,mem reg,immed mem,immed accum,immed SCAS - Scan String 808x 16+EA 9+EA 17+EA Clocks 286 386 7 7 486 Size Bytes 3 2-4 2-4 3-4 3-6 2-3 (W88=24+EA) (W88=13+EA) (W88=25+EA) (Byte, Word or Doubleword) Usage: SCAS string SCASB SCASW SCASD (386+) Modifies flags: AF CF OF PF SF ZF Compares value at ES:DI (even if operand is specified) from the accumulator and sets the flags similar to a subtraction DI is incremented/decremented based on the instruction format (or operand size) and the state of the Direction Flag Use with REP prefixes Operands string 808x 15 Clocks 286 386 7 486 Size Bytes (W88=19) SETAE/SETNB - Set if Above or Equal / Set if Not Below (386+) Usage: SETAE dest SETNB dest (unsigned, 386+) Modifies flags: none Sets the byte in the operand to if the Carry Flag is clear otherwise sets the operand to Operands reg8 mem8 808x - Clocks 286 386 - 486 Size Bytes 3 SETB/SETNAE - Set if Below / Set if Not Above or Equal (386+) Usage: SETB dest SETNAE dest (unsigned, 386+) Modifies flags: none Trang 186 Giáo trình vi xử lý Phụ lục – Tập lệnh Sets the byte in the operand to if the Carry Flag is set otherwise sets the operand to Operands reg8 mem8 808x - Clocks 286 386 - 486 Size Bytes 3 SETBE/SETNA - Set if Below or Equal / Set if Not Above (386+) Usage: SETBE dest SETNA dest (unsigned, 386+) Modifies flags: none Sets the byte in the operand to if the Carry Flag or the Zero Flag is set, otherwise sets the operand to Operands reg8 mem8 808x - Clocks 286 386 - 486 Size Bytes 3 SETE/SETZ - Set if Equal / Set if Zero (386+) Usage: SETE dest SETZ dest Modifies flags: none Sets the byte in the operand to if the Zero Flag is set, otherwise sets the operand to Operands reg8 mem8 808x - Clocks 286 386 - 486 Size Bytes 3 SETNE/SETNZ - Set if Not Equal / Set if Not Zero (386+) Usage: SETNE dest SETNZ dest Modifies flags: none Sets the byte in the operand to if the Zero Flag is clear, otherwise sets the operand to Operands reg8 mem8 808x - Clocks 286 386 - 486 Size Bytes 3 SETL/SETNGE - Set if Less / Set if Not Greater or Equal (386+) Usage: SETL SETNGE (signed, 386+) dest dest Trang 187 Giáo trình vi xử lý Phụ lục – Tập lệnh Modifies flags: none Sets the byte in the operand to if the Sign Flag is not equal to the Overflow Flag, otherwise sets the operand to Operands reg8 mem8 808x - Clocks 286 386 - 486 Size Bytes 3 SETGE/SETNL - Set if Greater or Equal / Set if Not Less (386+) Usage: SETGE dest SETNL dest (signed, 386+) Modifies flags: none Sets the byte in the operand to if the Sign Flag equals the Overflow Flag, otherwise sets the operand to Operands reg8 mem8 808x - Clocks 286 386 - 486 Size Bytes 3 SETLE/SETNG - Set if Less or Equal / Set if Not greater or Equal (386+) Usage: SETLE dest SETNG dest (signed, 386+) Modifies flags: none Sets the byte in the operand to if the Zero Flag is set or the Sign Flag is not equal to the Overflow Flag, otherwise sets the operand to Operands reg8 mem8 808x - Clocks 286 386 - 486 Size Bytes 3 SETG/SETNLE - Set if Greater / Set if Not Less or Equal (386+) Usage: SETG dest SETNLE dest (signed, 386+) Modifies flags: none Sets the byte in the operand to if the Zero Flag is clear or the Sign Flag equals to the Overflow Flag, otherwise sets the operand to Operands reg8 mem8 808x - Clocks 286 386 - Trang 188 486 Size Bytes 3 Giáo trình vi xử lý Phụ lục – Tập lệnh SETS - Set if Signed (386+) Usage: SETS dest Modifies flags: none Sets the byte in the operand to if the Sign Flag is set, otherwise sets the operand to Operands reg8 mem8 808x Clocks 286 386 - - 486 Size Bytes 3 SETNS - Set if Not Signed (386+) Usage: SETNS dest Modifies flags: none Sets the byte in the operand to if the Sign Flag is clear, otherwise sets the operand to Operands reg8 mem8 808x Clocks 286 386 - - 486 Size Bytes 3 SETC - Set if Carry (386+) Usage: SETC dest Modifies flags: none Sets the byte in the operand to if the Carry Flag is set, otherwise sets the operand to Operands reg8 mem8 808x Clocks 286 386 - - 486 Size Bytes 3 SETNC - Set if Not Carry (386+) Usage: SETNC dest Modifies flags: none Sets the byte in the operand to if the Carry Flag is clear, otherwise sets the operand to Operands reg8 mem8 808x - Clocks 286 386 - SETO - Set if Overflow (386+) Trang 189 486 Size Bytes 3 Giáo trình vi xử lý Phụ lục – Tập lệnh Usage: SETO dest Modifies flags: none Sets the byte in the operand to if the Overflow Flag is set, otherwise sets the operand to Operands reg8 mem8 808x - Clocks 286 386 - 486 Size Bytes 3 SETNO - Set if Not Overflow (386+) Usage: SETNO dest Modifies flags: none Sets the byte in the operand to if the Overflow Flag is clear, otherwise sets the operand to Operands reg8 mem8 808x - Clocks 286 386 - 486 Size Bytes 3 SETP/SETPE - Set if Parity / Set if Parity Even (386+) Usage: SETP dest SETPE dest Modifies flags: none Sets the byte in the operand to if the Parity Flag is set, otherwise sets the operand to Operands reg8 mem8 808x - Clocks 286 386 - 486 Size Bytes 3 SETNP/SETPO - Set if No Parity / Set if Parity Odd (386+) Usage: SETNP dest SETPO dest Modifies flags: none Sets the byte in the operand to if the Parity Flag is clear, otherwise sets the operand to Operands reg8 mem8 808x - Clocks 286 386 - 486 Size Bytes 3 SGDT - Store Global Descriptor Table (286+ privileged) Usage: SGDT dest Modifies flags: none Trang 190 Giáo trình vi xử lý Phụ lục – Tập lệnh Stores the Global Descriptor Table (GDT) Register into the specified operand Operands 808x mem64 - Clocks 286 386 11 486 Size Bytes 10 SIDT - Store Interrupt Descriptor Table (286+ privileged) Usage: SIDT dest Modifies flags: none Stores the Interrupt Descriptor Table (IDT) Register into the specified operand Operands 808x mem64 - Clocks 286 386 12 486 Size Bytes 10 SHL - Shift Logical Left See: SAL SHR - Shift Logical Right Usage: SHR dest,count Modifies flags: CF OF PF SF ZF (AF undefined) ÚÄ¿ ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ ÚÄ¿ 0ỵ>7 > 0ỵ>C Shifts the destination right by "count" bits with zeroes shifted in on the left The Carry Flag contains the last bit shifted out Operands reg,1 mem,1 reg,CL mem,CL (W88=28+EA+4n) reg,immed8 mem,immed8 808x Clocks 286 386 2 15+EA 8+4n 5+n 20+EA+4n 8+n - 5+n 8+n 486 Size Bytes 7 2-4 2-4 3-5 (W88=23+EA) SHLD/SHRD - Double Precision Shift (386+) Usage: SHLD dest,src,count SHRD dest,src,count Modifies flags: CF PF SF ZF (OF,AF undefined) SHLD shifts "dest" to the left "count" times and the bit positions opened are filled with the most significant bits of "src" SHRD shifts "dest" to the right "count" times and the bit positions opened are filled with the least significant bits of the second operand Only the lower bits of "count" are used Trang 191 Giáo trình vi xử lý Phụ lục – Tập lệnh Operands 808x reg16,reg16,immed8 reg32,reg32,immed8 mem16,reg16,immed8 mem32,reg32,immed8 reg16,reg16,CL reg32,reg32,CL mem16,reg16,CL mem32,reg32,CL - Clocks 286 386 - 486 Size Bytes 2 3 3 4 4 6 3 5 3 7 3 7 SLDT - Store Local Descriptor Table (286+ privileged) Usage: SLDT dest Modifies flags: none Stores the Local Descriptor Table (LDT) Register into the specified operand Operands reg16 mem16 808x - Clocks 286 386 2 2 486 Size Bytes 3 SMSW - Store Machine Status Word (286+ privileged) Usage: SMSW dest Modifies flags: none Store Machine Status Word (MSW) into "dest" Operands reg16 mem16 808x - Clocks 286 386 10 486 Size Bytes 3 486 Size Bytes STC - Set Carry Usage: STC Modifies flags: CF Sets the Carry Flag to Operands none 808x Clocks 286 386 2 STD - Set Direction Flag Usage: STD Modifies flags: DF Sets the Direction Flag to causing string instructions to auto-decrement SI and DI instead of auto-increment Trang 192 Giáo trình vi xử lý Phụ lục – Tập lệnh Operands 808x none STI - Set Interrupt Flag Clocks 286 386 486 Size Bytes 2 (Enable Interrupts) Usage: STI Modifies flags: IF Sets the Interrupt Flag to 1, which enables recognition of all hardware interrupts If an interrupt is generated by a hardware device, an End of Interrupt (EOI) must also be issued to enable other hardware interrupts of the same or lower priority Operands none STOS - Store String 808x Clocks 286 386 486 Size Bytes (Byte, Word or Doubleword) Usage: STOS dest STOSB STOSW STOSD Modifies flags: None Stores value in accumulator to location at ES:(E)DI (even if operand is given) (E)DI is incremented/decremented based on the size of the operand (or instruction format) and the state of the Direction Flag Use with REP prefixes Operands dest 808x 11 Clocks 286 386 486 Size Bytes (W88=15) STR - Store Task Register (286+ privileged) Usage: STR dest Modifies flags: None Stores the current Task Register to the specified operand Operands reg16 mem16 808x - Clocks 286 386 2 486 Size Bytes 3 SUB - Subtract Usage: SUB dest,src Modifies flags: AF CF OF PF SF ZF The source is subtracted from the destination and the result is stored in the destination Trang 193 Giáo trình vi xử lý Operands reg,reg mem,reg reg,mem reg,immed mem,immed accum,immed Phụ lục – Tập lệnh 808x 16+EA 9+EA 17+EA Clocks 286 386 7 7 486 Size Bytes 3 2-4 2-4 3-4 3-6 2-3 (W88=24+EA) (W88=13+EA) (W88=25+EA) TEST - Test For Bit Pattern Usage: TEST dest,src Modifies flags: CF OF PF SF ZF (AF undefined) Performs a logical AND of the two operands updating the flags register without saving the result Operands reg,reg reg,mem mem,reg reg,immed mem,immed accum,immed 808x 9+EA 9+EA 11+EA Clocks 286 386 6 5 486 Size Bytes 1 2 2-4 2-4 3-4 3-6 2-3 (W88=13+EA) (W88=13+EA) VERR - Verify Read (286+ protected) Usage: VERR src Modifies flags: ZF Verifies the specified segment selector is valid and is readable at the current privilege level If the segment is readable, the Zero Flag is set, otherwise it is cleared Operands reg16 mem16 808x - Clocks 286 386 14 16 10 11 486 Size Bytes 11 11 VERW - Verify Write (286+ protected) Usage: VERW src Modifies flags: ZF Verifies the specified segment selector is valid and is ratable at the current privilege level If the segment is writable, the Zero Flag is set, otherwise it is cleared Operands reg16 mem16 808x - Clocks 286 386 14 16 15 16 Trang 194 486 Size Bytes 11 11 Giáo trình vi xử lý Phụ lục – Tập lệnh WAIT/FWAIT - Event Wait Usage: WAIT FWAIT Modifies flags: None CPU enters wait state until the coprocessor signals it has finished its operation This instruction is used to prevent the CPU from accessing memory that may be temporarily in use by the coprocessor WAIT and FWAIT are identical Operands none 808x Clocks 286 386 6+ 486 Size Bytes 1-3 WBINVD - Write-Back and Invalidate Cache (486+) Usage: WBINVD Modifies flags: None Flushes internal cache, then signals the external cache to write back current data followed by a signal to flush the external cache Operands none 808x - Clocks 286 386 - - 486 Size Bytes XCHG - Exchange Usage: XCHG dest,src Modifies flags: None Exchanges contents of source and destination Operands 808x reg,reg mem,reg reg,mem accum,reg reg,accum 17+EA 17+EA 3 Clocks 286 386 5 3 5 3 486 Size Bytes 3 2-4 2-4 1 (W88=25+EA) (W88=25+EA) XLAT/XLATB - Translate Usage: XLAT translation-table XLATB (masm 5.x) Modifies flags: None Replaces the byte in AL with byte from a user table addressed by BX The original value of AL is the index into the translate table The best way to discripe this is MOV AL,[BX+AL] Operands table offset 808x 11 Clocks 286 386 5 Trang 195 486 Size Bytes Giáo trình vi xử lý Phụ lục – Tập lệnh XOR - Exclusive OR Usage: XOR dest,src Modifies flags: CF OF PF SF ZF (AF undefined) Performs a bitwise exclusive OR of the operands and returns the result in the destination Operands reg,reg mem,reg reg,mem reg,immed mem,immed accum,immed 808x 16+EA 9+EA 17+EA Clocks 286 386 7 7 Trang 196 486 Size Bytes 3 2-4 2-4 3-4 3-6 2-3 (W88=24+EA) (W88=13+EA) (W88=25+EA) ... bus Addr bus Hình 1.8 – Sơ đồ khối vi xử lý Phạm Hùng Kim Khánh Trang 14 Giáo trình vi xử lý Tổ chức hệ thống vi xử lý Khi chương trình bắt đầu, đếm chương trình (PC) địa bắt đầu Địa chuyển qua... 127 Phụ lục 2: Tập lệnh 8086 153 iv Giáo trình vi xử lý Tổ chức hệ thống vi xử lý CHƯƠNG 1: TỔ CHỨC HỆ THỐNG VI XỬ LÝ Các hệ thống số dùng máy tính loại mã 1.1 Hệ thập phân... 1.9 – Sơ đồ khối hệ vi xử lý Mọi hoạt động hệ vi xử lý giống nhau, không phụ thuộc loại vi xử lý hay trình thực μP đọc lệnh từ nhớ (memory), thực thi lệnh sau đọc lệnh kế Q trình đọc lệnh gọi