1.3). Đònh đòa chỉ gián tiếp: Trong phương pháp truy xuất gián tiếp các cổng luôn luôn tác động đến thanh ghi DX, nội dung của DX là đòa chỉ 16 bit của cổng. Số lượng cổng là 64k. Thí dụ: IN AL, DX Hình 2.4: Phương pháp đònh đòa chỉ tương đối AX BX CX DX SP BP SI DI 0100 PC O D I T S Z A P C FI 8B 07 CS DS SS ES 2300 8B 07 O D I T S Z A P C FI AX BX CX DX SP BP SI DI CS DS SS ES 2300 1002 PC Sau Trước CPU Bộ nhớ 1200 2300 2300 010 010 2780 2780 00 12 00 12 2080 208 0280 0280 CHƯƠNG II KHẢO SÁT TỔNG QUÁT TẬP LỆNH CỦA VI XỬ LÝ 8086 I. CÁCH MÃ HOÁ LỆNH CỦA 8086 Vi xử lý 8086 có nhiều phương pháp đònh đòa chỉ và cũng có nhiều khả năng kết hợp các phương pháp đó lại với nhau. Tuy nhiên, một lệnh chỉ cần 6 byte để mã hóa, và byte bắt đầu là mã công tác (Operations code), byte tiếp theo chứa kiểu đòa chỉ và tiếp theo đó có thể là một hoặc hai byte dùng để chứa đòa chỉ. Các byte cuối cùng gồm một hoặc hai chứa toán hạng 8 hoặc 16 bit. Thực tế để biểu diển dạng thức các byte dùng để mã hóa lệnh Mov. Ta ttấy rằng để mã hóa lệnh Mov ta phải cần ít nhất là hai byte, trong đó 6 bit của byte đầu dùng để chứa mã lệnh. Đối với lệnh Mov để chuyển dữ liệu kiểu: - Thanh ghi thanh ghi - Bộ nhớ thanh ghi Thì bit đầu (opcode) này luôn là ‘100010’ (đối với thanh ghi đoạn thì khác). Đối với bit ‘D’ dùng để chỉ hướng đi của dữ liệu. D = 0 thì dữ liệu đi từ thanh ghi cho bởi 3 bit của REG. D = 1 dữ liệu đi đến thanh ghi cho bởi 3 bit REG. Đối với bit W dùng để chỉ rằng một byte (W = 0) hoặc một từ (W = 1) sẽ được chuyển. Byte1 Byte 2 Byte 3 Byte 4 Opcode R EG M /R Disp: displacement (dòch chuyển ) II. KHẢO SÁT TỔNG QUÁT TẬP LỆNH CUẢ VXL 8086. Tập lệnh của 8086 gồm 9 nhóm lệnh: - Nhóm lệnh truyền số liệu. - Nhóm lệnh số học. - Nhóm lệnh thao tác chuỗi. - Nhóm lệnh logic. Trừ thanh ghi đoạn D W Mod Disp L Disp H Đòa chỉ trực tiếp phần thấp Đòa chỉ trực tiếp phần cao hoặc - Nhóm lệnh xử lý bit. - Nhóm lệnh điều khiển chương trình. - Nhóm lệnh ngôn ngữ bậc cao. - Nhóm lệnh ở chế độ bảo vệ. - Nhóm lệnh điều khiển các bộ vi xử lý. Qua những nhóm lệnh giới thiệu trên nhóm thực hiện đề tài chỉ khảo sát những nhóm lệnh thông dụng nhằm phục vụ cho việc lập trình bằng ngôn ngữ máy. 2.1). Nhóm lệnh truyền số liệu: Các lệnh truyền dữ liệu sẽ sao chép dữ liệu giữa thanh ghi với thanh ghi, với bộ nhớ hoặc với khối vào-ra. Chúng có thể sử dụng nhiều cách đònh đòa chỉ khác nhau. Trong cách viết lệnh dưới dạng gợi nhớ: toán hạng đầu tiên là thanh ghi đích hoặc đòa chỉ đích và tiếp sau dấu phẩy là thanh ghi nguồn hoặc đòa chỉ nguồn. Khác với 8085, trong 8086 tất cả các lệnh truyền dữ liệu đều dùng lệnh “Mov” Truyền từ thanh ghi vào thanh ghi: Mov (Reg1), (Reg2) Nội dung (Reg2) được sao chép vào (Reg1). Thí dụ: Mov AL, BL Sao chép nội dung BL vào thanh ghi AL. Truyền từ thanh ghi vào bộ nhớ: Mov (Mem), (Reg) Đối với lệnh byte, nội dung của thanh ghi được đưa vào đòa chỉ của ô nhớ. Đối với lệnh word thì nội dung của thanh ghi được đưa vào hai ô nhớ có đòa chỉ lần lược là (Mem) và (Mem + 1). Thí dụ: Mov [1200], BL Sao chép nội dung của thanh ghi BL vào ô nhớ có đòa chỉ tương đối là 1200. Truyền từ ô nhớ vào thanh ghi: Mov (Reg), (Mem) Đối với lệnh byte, nội dung ô nhớ được chép vào thanh ghi. Đối với lệnh word, nội dung của 2 ô nhớ (Mem) và (Mem + 1) được chép vào thanh ghi. Thí dụ: Mov BL, [1500] Sao chép nội dung ô nhớ tại đòa chỉ 1500 vào thanh ghi BL. Mov BX, [1500] Sao chép nội dung hai ô nhớ tại đòa chỉ 1500 và 1501 vào thanh ghi BX (ô 1500 vào BL và ô 1501 vào BH) Chú ý: nếu sử dụng AL hoặc AX trong các lệnh truyền từ thanh ghi vào ô nhớ và ngược lại sẽ nhận được mã công tác ngắn hơn khi sử dụng các thanh ghi khác. Truyền tức thời vào thanh ghi: Mov (Reg), (Data) Trong lệnh này, dữ liệu được truyền tức thời vào thanh ghi. Thí dụ: Mov BL, 20 Giá trò 20 được đưa vào thanh ghi BL. Truyền tức thời vào bộ nhớ: Mov (Mem), (Data) Trong lệnh byte dữ liệu được truyền tức thời vào ô nhớ có đòa chỉ (Mem). Trong lệnh word dữ liệu được truyền tức thời vào 2 ô nhớ có đòa chỉ (Mem) và (Mem + 1). Thí dụ: Mov [1200], 50 Giá trò 50 được đưa vào ô nhớ có đòa chỉ 1200. Mov Word PTR [1200], 50 Giá trò Word 0050 được đưa vào 2 ô nhớ bắt dầu tại đòa chỉ 1200:50 (LSB) vào đòa chỉ 1200:00 (MSB) vào đòa chỉ 1201 - Truy xuất trực tiếp cổng: IN (Reg), (Port) Đọc nội dung của cổng vào thanh ghi. thanh ghi sử dụng l2 AL (dạng byte) và AX (dạng Word), đòa chỉ cổng là một số 8 bit. OUT (Reg), (Port) Xuất nội dung của thanh ghi ra cổng. - Truy xuất gián tiếp cổng: IN (Reg), DX Đọc nội dung của cổng có đòa chỉ chứa trong DX vào thanh ghi. Thanh ghi sử dụng là AL hoặc AX, đòa chỉ cổng là số 16 bit. OUT DX, (Reg) Gởi nội dung thanh ghi ra cổng có đòa chỉ chứa trong DX 2.2). Nhóm lệnh số học: Bao gồm các phép tính cơ bản (cộng, trừ, nhân và chia) và phép so sánh, toán hạng có thể là dữ liệu 8 bit hoặc 16 bit, kết quả có thể là 8 bit, 16 bit hoặc 32 bit. Các toán hạng được chứa trong thanh ghi bộ nhớ tức thời. Tùy theo thao tác, kết quả có thể được chứa trong 1 hoặc 2 thanh ghi trong bộ nhớ. Phép cộng: Vi xử lý 8086 thực hiện phép cộng có lưu ý số nhớ hoặc không lưu ý số nhớ 8 bit hoặc 16 bit. + Số hạng đầu tiên được chứa trong các thanh ghi dữ liệu (AX, BX, CX, DX, AH, AL, BH …), trog một thanh ghi chỉ số hoặc một ô nhớ. Số hạng thứ hai có thể là tức thời trong thanh ghi hoặc trong bộ nhớ. Hai số hạng không thể cùng ở trong bộ nhớ, kết quả phép cộng được chứa trong toán hạng thứ nhất. Sau đây là bảng liệt kê lệnh cộng dưới dạng gợi nhớ: Cộng không lưu ý số nhớ Cộng có lưu ý số nhớ Thí dụ ADD (accu), (data) ADD (mem), (data) ADD (reg), (data) ADD (reg1), (reg2) ADD (reg), (mem) ADD (mem), (reg) ADC (accu), (data) ADC (mem), (data) ADC (reg), (data) ADC (reg1), (reg2) ADC (reg), (mem) ADC (mem), (reg) ADD AX, 1250 ADD Byte PTR [0900],50 ADD BL, 50 ADC AL, AH ADD CX, [0800] ADC [0600], DL Phép trừ: 8086 có thể thực hiện phép trừ với 8 bit hoặc 16 bit, lệnh SBB có lưu ý số thiếu và lệnh SUB không lưu ý số thiếu. Sau đây là bảng liệt kê lệnh trừ dưới dạng gợi nhớ: Trừ có số thiếu Trừ không có số thiếu Thí dụ SUB (accu), (data) SUB (mem), (data) SUB (reg), (data) SUB (reg1), (reg2) SUB (reg), (mem) SUB (mem), (reg) SBB (accu), (data) SBB (mem), (data) SBB (reg), (data) SBB (reg1), (reg2) SBB (reg), (mem) SBB (mem), (reg) SUB AX, 1230 SBB Byte PTR [5000], 90 SUB BL, 50 SBB AL, DL SUB CX, [1230] SBB [0300], DL Chương III GIAO TIẾP VỚI MÁY TÍNH I. GIAO TIẾP SONG SONG 1. GIAO TIẾP QUA CỔNG MÁY IN: 1.1 Vài nét cơ bản về cổng máy in: Việc nối máy in với máy tính được thực hiên qua ổ cắm 15 chân ở phía sau máy tính. Nhưng đây không phải chỉ là chỗ nối với máy in mà khi sử dụng máy tính vào việc khác, như truyền dữ liệu từ máy tính tới một thiết bò khác, hay điều khiển thiết bò bằng máy tính thì việc ghép nối cũng được ghép nối qua cổng máy in. Qua cổng này dữ liệu được truyền đi song song, nên đôi khi còn được gọi la cổng ghép nối song song và tốc độ truyền cũng đạt đến mức đáng kể. Tất cả các đường dẫn của cổng máy in đều tương thích với TTL. Nghóa là chúng đều cung cấp mức điện áp nằm giữa 0V đến 5V. Do đó ta cầ lưu ý là các đường dẫn vào cổng này không được đặt mức điện áp quá lớn. Sự sắp xếp các chân của cổng máy in với tất cả các đường dẫn được mô tả như sau: 13 1 25 14 O O O O O O O O O O O O O O O O O O O O O O O O O HÌNH 3.1 Chức năng các chân Chân Ký hiệu Out/in Chức năng 1 2 9 10 11 12 13 14 15 16 17 18 25 Strobe D0 D7 ACK Busy PE SLCT AF ERROR INIT SLCTIN GND Out Out In In In In Out In Out Out Byte được in Các đường dữ liệu D0 D7. Phần thu báo cho phần phát biết đã thu xong một kí tự Phần tín hiệu do phần thu báo cho phần phát biết là phần thu đang bận Báo hết giâi Báo l75a chọn máy in Máy tính báo ra máy in tự nạp giấ Báo các lỗi của máy in Reset máy in Chon máy in Nối đất 1.3 . Trao đổi với các đường dẫn tín hiệu: LPT1: Gồm có 3 thanh ghi: thanh ghi dữ liệu, thanh ghi trạng thái và thanh ghi điều khiển. a. Thanh ghi dữ liệu: gồm có 8 bit dữ liệu, có đòa chỉ là 378h. D7 D6 D5 D4 D3 D2 D1 D0 HÌNH 3.1 CHÂN SỐ : 9 8 7 6 5 4 3 2 b. Thanh ghi trang thái: có đòa chỉ là 379h. D7 D6 D5 D4 D3 D2 D1 D0 c. Thanh ghi điều khiển có đòa chỉ : 37AH D7 D6 D5 D4 D3 D2 D1 D0 1.4 . Hoạt động của việc trao đổi dữ liệu . a. hoạt động của phần phát + đọc Busy cho đến khi Busy\ = 1. + gửi dữ liệu ra bus dữ liệu + cho Strobe = 0. + chuổn bò dữ liệu tiếp theo + quay về bước 1 b. Hoạt đông của phần thu + đọc Strobe cho đến khi Strobe = 1. + Busy = 0 , ACK = 0. + đọc dữ liệu vào . + đưa ACK = 1 . + xử lý dữ liệu . ERROR SLCT PE ACK BUSY Strobe AF INIT SLCTIN ( Ngắt 8259 ) + cho Busy = 1 để phát ký tự tiếp theo + quay về bước 1. BUSY = 1 BEGIN GỞI DỮ LIỆU STROBE = 1 ACK = 1 STROBE = 0 HẾT FILE THOÁT RA CHUÂN BỊ DỮ LIỆU TIẾP THEO HÌNH 5.1 LƯU ĐO À PHÁT . GIAO TIẾP VỚI MÁY TÍNH I. GIAO TIẾP SONG SONG 1. GIAO TIẾP QUA CỔNG MÁY IN: 1.1 Vài nét cơ bản về cổng máy in: Vi c nối máy in với máy tính được thực hiên qua ổ cắm 15 chân ở phía sau máy. tính. Nhưng đây không phải chỉ là chỗ nối với máy in mà khi sử dụng máy tính vào vi c khác, như truyền dữ liệu từ máy tính tới một thiết bò khác, hay điều khiển thiết bò bằng máy tính thì vi c. QUÁT TẬP LỆNH CỦA VI XỬ LÝ 8086 I. CÁCH MÃ HOÁ LỆNH CỦA 8086 Vi xử lý 8086 có nhiều phương pháp đònh đòa chỉ và cũng có nhiều khả năng kết hợp các phương pháp đó lại với nhau. Tuy nhiên,