Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 70 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
70
Dung lượng
545,21 KB
Nội dung
Chơng 3 Bộ Vi xử lý Intel 8088 Sau khi đã tìm hiểu qua về cấu trúc của hệ vi xử lý, trong chơng ny ta sẽ đi sâu tìm hiểu một bộ vi xử lý cụ thể v rất điển hình: bộ vi xử lý 8088 của Intel. Trớc hết cần nói rõ lý do tại sao ở đây ta lại chọn đích danh bộ vi xử lý 8088 để tìm hiểu m không phải l bộ vi xử lý no khác (điều m nhiều ngời khác cũng đã lm). Thứ nhất, đây l bộ vi xử lý nổi tiếng một thời thuộc họ 80x86 của Intel, nó đợc sử dụng trong nhiều lĩnh vực khác nhau, nhất l trong các máy IBM PC/XT. Các bộ vi xử lý thuộc họ ny sẽ còn đợc sử dụng rộng rãi trong hng chục năm nữa, v vì tính kế thừa của các sản phẩm trong họ 80x86, các chơng trình viết cho 8088 vẫn có thể chạy đợc trên các hệ thống tiên tiến sau ny. Thứ hai, về góc độ s phạm thì đây l bộ vi xử lý khá đơn giản v vì vậy việc hiểu nó l tơng đối dễ đối với những ngời mới bắt đầu thâm nhập vo lĩnh vực ny. Thứ ba, các họ vi xử lý của các hãng tuy có khác nhau nhng xét cho cùng cũng có khá nhiều điểm chủ yếu rất giống nhau. Do đó một khi đã nắm đợc các vấn đề kỹ thuật của 8088, ta sẽ có cơ sở để nắm bắt đợc các kỹ thuật của các bộ vi xử lý khác cùng trong họ Intel 80x86 hoặc của các họ khác. 1. Giới thiệu cấu trúc bên trong v hoạt động của bộ vi xử lý 8088 Trớc khi giới thiệu tập lệnh v cách thức lập trình cho bộ vi xử lý 8088 hoạt động ta cần phải tìm hiểu kỹ cấu trúc bên trong của nó. Trên hình 3.1 l sơ đồ khối cấu trúc bên trong của bộ vi xử lý Intel 8088: 27 E.U. (execution unit) B.I.U. (Bus interface unit) EU: Execution unit, khối thực hiện lệnh BIU: Bus interface unit, khối phối ghép bus ALU: Arithmetic and logic unit, khối số học v lôgic Hình 3.1. Sơ đồ khối của bộ vi xử lý 8088. BUS ngoi Bus dữ liệu (8 bit) Bus trong của CPU 8bit dữ liệu 20bitđịa chỉ Bus địa chỉ (20bit) AX BX CX DX SP BP SI DI CS DS SS ES IP Logic điều khiển BUS Các thanh ghi tạm thời Thanh ghi cờ ALU Đệm lệnh (hng đợi lệnh) (6 byte cho 8086) Khối điều khiển của E U Các thanh ghi đa năng Bus dữ liệu ALU (16bit) Các thanh ghi đoạn v con trỏ lệnh Các thanh ghi con trỏ v chỉ số 28 1.1. BIU v EU Theo sơ đồ khối trên hình 3.1 ta thấy bên trong CPU 8088 có 2 khối chính: khối phối ghép bus (bus interface unit, BIU) v khối thực hiện lệnh (execution unit, EU). Việc chia CPU ra thnh 2 phần lm việc đồng thời có liên hệ với nhau qua đệm lệnh lm tăng đáng kể tốc độ xử lý của CPU. Các bus bên trong CPU có nhiệm vụ chuyển tải các tín hiệu của các khối khác. Trong số các bus đó có bus dữ liệu 16 bit của ALU, bus các tín hiệu điều khiển ở EU v bus trong của hệ thống ở BIU. Trớc khi đi ra bus ngoi hoặc đi vo bus trong của bộ vi xử lý, các tín hiệu truyền trên bus thờng đợc cho đi qua các bộ đệm để nâng cao tính tơng thích cho nối ghép hoặc nâng cao khả năng phối ghép. BIU đa ra địa chỉ, đọc mã lệnh từ bộ nhớ, đọc/ghi dữ liệu từ/vo cổng hoặc bộ nhớ. Nói cách khác BIU chịu trách nhiệm đa địa chỉ ra bus v trao đổi dữ liệu với bus. Trong EU ta thấy có một khối điều khiển (control unit, CU). Chính tại bên trong khối điều khiển ny có mạch giải mã lệnh. Mã lệnh đọc vo từ bộ nhớ đợc đa đến đầu vo của bộ giải mã, các thông tin thu đợc từ đầu ra của nó sẽ đợc đa đến mạch tạo xung điều khiển, kết quả l ta thu đợc các dãy xung khác nhau (tuỳ theo mã lệnh) để điều khiển hoạt động của các bộ phận bên trong v bên ngoi CPU. Trong khối EU còn có khối số học v lôgic (arithmetic and logic unit, ALU) dùng để thực hiện các thao tác khác nhau với các toán hạng của lệnh. Tóm lại, khi CPU hoạt động EU sẽ cung cấp thông tin về địa chỉ cho BIU để khối ny đọc lệnh v dữ liệu, còn bản thân nó thì giải mã lệnh v thực hiện lệnh. Trong BIU còn có một bộ nhớ đệm lệnh với dung lợng 4 byte dùng để chứa các mã lệnh đọc đợc nằm sẵn để chờ EU xử lý (trong ti liệu của Intel bộ đệm lệnh ny còn đợc gọi l hng đợi lệnh). Đây l một cấu trúc mới đợc cấy vo bộ vi xử lý 8086/88 do việc Intel đa cơ chế xử lý xen kẽ liên tục dòng mã lệnh (instruction pipelining) vo ứng dụng trong các bộ vi xử lý thế hệ mới. Pipeline l một cơ chế đã đợc ứng dụng từ những năm 60 trong các máy lớn. Nhân đây ta sẽ giới thiệu sơ qua một chút về cơ chế ny. Trong các bộ vi xử lý ở các thế hệ trớc (nh ở 8085 chẳng hạn), thông thờng hoạt động của CPU gồm 3 giai đoạn: đọc mã lệnh (opcode fetch), giải mã lệnh (decode) v thực hiện lệnh (execution). Trong một thời điểm nhất định, CPU thế hệ ny chỉ có thể thực hiện một trong ba công việc nói trên v vì vậy tuỳ theo từng giai đoạn sẽ có những bộ phận nhất định của CPU ở trạng thái nhn rỗi. Chẳng hạn, khi CPU giải mã lệnh hoặc khi nó đang thực hiện những lệnh không liên quan đến bus (thao tác nội bộ) thì các bus không đợc dùng vo việc gì dẫn đến tình trạng lãng phí khả năng của chúng (hình 3.2). Trong khi đó từ bộ vi xử lý 8086/88, Intel sử dụng cơ chế xử lý xen kẽ liên tục dòng mã lệnh thì CPU đợc chia thnh 2 khối v có sự phân chia công việc cho từng khối: việc đọc mã lệnh l do khối BIU thực hiện, việc giải mã lệnh v thực hiện lệnh l do khối EU đảm nhiệm. Các khối chức năng ny có khả năng lm việc đồng thời v các bus sẽ liên tục đợc sử dụng: trong khi EU lấy mã lệnh từ bộ 29 đệm 4 byte để giải mã hoặc thực hiện các thao tác nội bộ thì BIU vẫn có thể đọc mã lệnh từ bộ nhớ chính rồi đặt chúng vo bộ nhớ đệm lệnh đã nói. Bộ đệm lệnh ny lm việc theo kiểu "vo trớc - ra trớc" (first in - first out, FIFO), nghĩa l byte no đợc cất vo đệm trớc sẽ đợc lấy ra xử lý trớc. Nếu có sự vo/ra liên tục của dòng mã lệnh trong bộ đệm ny thì có nghĩa l có sự phối hợp hoạt động hiệu quả giữa 2 khối EU v BIU theo cơ chế xử lý xen kẽ liên tục dòng mã lệnh để lm tăng tốc độ xử lý tổng thể. Kỹ thuật xử lý xen kẽ liên tục dòng mã lệnh sẽ không còn tác dụng tăng tốc độ xử lý chung của CPU nữa nếu nh trong đệm lệnh có chứa các mã lệnh của các lệnh CALL (gọi chơng trình con) hoặc JMP (nhảy), bởi vì lúc gặp các lệnh ny nội dung cũ của bộ đệm sẽ bị xoá v thay thế vo đó l nội dung mới đợc nạp bởi các mã lệnh mới do lệnh nhảy hoặc gọi quyết định. Việc ny tiêu tốn nhiều thời gian hơn so với trờng hợp trong đệm chỉ có mã lệnh của các lệnh tuần tự. không có pipelining F1 D1 E1 F2 D2 E2 F3 D3 E3 có pipelining F1 D1 E1 F2 D2 E2 F3 D3 E3 (F: đọc lệnh, D: giải mã lệnh, E: thực hiện lệnh) Hình 3. 2. Dòng lệnh thờng v dòng lệnh xen kẽ liên tục Trong bộ vi xử lý 8088 ta còn thấy có các thanh ghi 16 bit nằm trong cả 2 khối BIU v EU, ngoi ra cũng có một số thanh ghi 8 hoặc 16 bit tại EU. Ta sẽ lần lợt giới thiệu các thanh ghi nói trên cùng chức năng chính của chúng. Các thanh ghi đoạn Khối BIU đa ra trên bus địa chỉ 20 bit địa chỉ, nh vậy 8088 có khả năng phân biệt ra đợc 2 20 = 1.048.576 = 1 M ô nhớ hay 1 Mbyte, vì các bộ nhớ nói chung tổ chức theo byte. Nói cách khác: không gian địa chỉ của 8088 l 1 Mbyte. Trong không gian 1 Mbyte ny bộ nhớ cần đợc chia thnh các vùng khác nhau (điều ny rất có lợi khi lm việc ở chế độ nhiều ngời sử dụng hoặc đa nhiệm) dnh riêng để: - chứa mã chơng trình, - chứa dữ liệu v kết quả trung gian của chơng trình v - tạo ra một vùng nhớ đặc biệt gọi l ngăn xếp (stack) dùng vo việc quản lý các thông số của bộ vi xử lý khi gọi chơng trình con hoặc trở về từ chơng trình con. Trong thực tế bộ vi xử lý 8088 có các thanh ghi 16 bit liên quan đến địa chỉ đầu của các vùng (các đoạn) kể trên v chúng đợc gọi l các thanh ghi đoạn (segment registers). Đó l thanh ghi đoạn mã CS (code segment), thanh ghi đoạn dữ 30 liệu DS (data segment), thanh ghi đoạn ngăn xếp SS (stack segment) v thanh ghi đoạn dữ liệu phụ ES (extra segment). Các thanh ghi đoạn 16 bit ny chỉ ra địa chỉ đầu của 4 đoạn trong bộ nhớ, dung lợng lớn nhất của mỗi đoạn nhớ ny l 64 Kbyte v tại một thời điểm nhất định bộ vi xử lý chỉ lm việc đợc với 4 đoạn nhớ 64 Kbyte ny. Việc thay đổi giá trị của các thanh ghi đoạn lm cho các đoạn tơng ứng có thể dịch chuyển linh hoạt trong phạm vi không gian 1 Mbyte, vì vậy các đoạn ny có thể nằm cách nhau khi thông tin cần lu trong chúng đòi hỏi dung lợng đủ 64 Kbyte hoặc cũng có thể nằm trùm nhau do có những đoạn không cần dùng hết độ di 64 Kbyte v vì thế những đoạn khác có thể bắt đầu nối tiếp ngay sau đó. Điều ny cũng cho phép ta truy nhập vo bất kỳ đoạn nhớ (64Kbyte) no nằm trong ton bộ không gian 1Mbyte. Nội dung các thanh ghi đoạn sẽ xác định địa chỉ của ô nhớ nằm ở đầu đoạn. Địa chỉ ny còn gọi l địa chỉ cơ sở. Địa chỉ của các ô nhớ khác nằm trong đoạn tính đợc bằng cách cộng thêm vo địa chỉ cơ sở một giá trị gọi l địa chỉ lệch hay độ lệch (offset), gọi nh thế vì nó ứng với khoảng lệch của toạ độ một ô nhớ cụ thể no đó so với ô đầu đoạn. Độ lệch ny đợc xác định bởi các thanh ghi 16 bit khác đóng vai trò thanh ghi lệch (offset register) m ta sẽ nói đến sau. Cụ thể, để xác định địa chỉ vật lý 20 bit của một ô nhớ no đó trong một đoạn bất kỳ, CPU 8088 phải dùng đến 2 thanh ghi 16 bit (một thanh để chứa địa chỉ cơ sở, còn thanh kia chứa độ lệch) v từ nội dung của cặp thanh ghi đó nó tạo ra địa chỉ vật lý theo công thức sau: Địachỉvậtlý = Thanhghiđoạnì16+Thanhghilệch Việc dùng 2 thanh ghi để ghi nhớ thông tin về địa chỉ thực chất tạo ra một loại địa chỉ gọi l địa chỉ logic v đợc ký hiệu nh sau: Thanhghiđoạn : Thanhghilệch hay segment : offset. Địa chỉ kiểu segment : offset l logic vì nó tồn tại dới dạng giá trị của các thanh ghi cụ thể bên trong CPU v khi cần thiết truy nhập ô nhớ no đó thì nó phải đợc đổi ra địa chỉ vật lý để rồi đợc đa lên bus địa chỉ. Việc chuyển đổi ny do một bộ tạo địa chỉ thực hiện (phần tử trên hình 3.1). Ví dụ: Cặp CS:IP sẽ chỉ ra địa chỉ của lệnh sắp thực hiện trong đoạn mã. Nếu tại một thời điểm no đó ta có CS=F000H v IP=FFF0H thì CS:IP ~ F000Hì16 + FFF0H = F0000H + FFF0H = FFFF0H Địa chỉ FFFF0H chính l địa chỉ khởi động của 8088. Dấu ~ ở đây l để chỉ sự tơng ứng. Địa chỉ các ô nhớ thuộc các đoạn khác cũng có thể tính đợc theo cách tơng tự nh vậy. Từ nay khi cần nói đến đến địa chỉ của một ô nhớ ta có thể sử dụng 31 cả địa chỉ logic lẫn địa chỉ vật lý vì bao giờ cũng tồn tại sự tơng ứng giữa 2 loại địa chỉ ny (thông qua bộ tạo địa chỉ ). Trớc khi nói đến các thanh ghi khác ta nói thêm chút ít về tính đa trị của các thanh ghi đoạn v thanh ghi lệch trong địa chỉ logic ứng với một địa chỉ vật lý. Điều ny cũng nói lên tính linh hoạt của cơ chế segment : offset trong việc định địa chỉ của 8086/88. Nhìn vo giá trị cuối cùng của địa chỉ vật lý, ta thấy có thể tạo ra địa chỉ đó từ nhiều giá trị khác nhau của thanh ghi đoạn v thanh ghi lệch. Ví dụ: Địa chỉ vật lý 12345H có thể đợc tạo ra từ các giá trị: Thanh ghi đoạn Thanh ghi lệch 1000H 2345H 1200H 0345H 1004H 2305H 0300H E345H Các thanh ghi đa năng Trong khối EU có 4 thanh ghi đa năng 16 bit: AX, BX, CX, DX. Điều đặc biệt l khi cần chứa các dữ liệu 8 bit thì mỗi thanh ghi ny có thể tách ra thnh 2 thanh ghi 8 bit cao v thấp để lm việc độc lập, đó l các cặp thanh ghi AH v AL, BH v BL, CH v CL, DH v DL (trong đó H chỉ phần cao, L chỉ phần thấp). Mỗi thanh ghi có thể đợc dùng một cách vạn năng để chứa các loại dữ liệu khác nhau, nhng cũng có những công việc đặc biệt nhất định chỉ thao tác với một vi thanh ghi no đó v chính vì vậy các thanh ghi thờng đợc gán cho những cái tên đặc biệt rất có ý nghĩa. Cụ thể: AX (accumulator, Acc): thanh chứa. Các kết quả của các thao tác thờng đợc chứa ở đây (kết quả của phép nhân, chia). Nếu kết quả l 8 bit thì thanh ghi AL đợc coi l Acc. BX (base): thanh ghi cơ sở, thờng chứa địa chỉ cơ sở của một bảng dùng trong lệnh XLAT. CX (count): bộ đếm. CX thờng đợc dùng để chứa số lần lặp trong trờng hợp các lệnh LOOP (lặp), còn CL thờng chứa số lần dịch hoặc quay trong các lệnh dịch hoặc quay thanh ghi. DX (data): thanh ghi dữ liệu. DX cùng AX tham gia vo các thao tác của phép nhân hoặc chia các số 16 bit. DX còn dùng để chứa địa chỉ của các cổng trong các lệnh vo/ra dữ liệu trực tiếp (IN/OUT). Các thanh ghi con trỏ v chỉ số 32 Trong 8088 còn có 3 thanh ghi con trỏ v 2 thanh ghi chỉ số 16 bit. Các thanh ghi ny (trừ IP) đều có thể đợc dùng nh các thanh ghi đa năng, nhng ứng dụng chính của mỗi thanh ghi l chúng đợc ngầm định nh l thanh ghi lệch cho các đoạn tơng ứng. Cụ thể: IP: con trỏ lệnh (instruction pointer), IP luôn trỏ vo lệnh tiếp theo sẽ đợc thực hiện nằm trong đoạn mã CS. Địa chỉ đầy đủ của lệnh tiếp theo ny ứng với CS:IP v đợc xác định theo cách đã nói ở trên. BP: con trỏ cơ sở (base pointer), BP luôn trỏ vo một dữ liệu nằm trong đoạn ngăn xếp SS. Địa chỉ đầy đủ của một phần tử trong đoạn ngăn xếp ứng với SS:BP v đợc xác định theo cách đã nói ở trên. SP: con trỏ ngăn xếp (stack pointer), SP luôn trỏ vo đỉnh hiện thời của ngăn xếp nằm trong đoạn ngăn xếp SS. Địa chỉ đầy đủ của đỉnh ngăn xếp ứng với SS:SP v đợc xác định theo cách đã nói ở trên. SI: chỉ số gốc hay nguồn (source index), SI chỉ vo dữ liệu trong đoạn dữ liệu DS m địa chỉ cụ thể đầy đủ ứng với DS:SI v đợc xác định theo cách đã nói ở trên. DI: chỉ số đích (destination index), DI chỉ vo dữ liệu trong đoạn dữ liệu DS m địa chỉ cụ thể đầy đủ ứng với DS:DI v đợc xác định theo cách đã nói ở trên. Riêng trong các lệnh thao tác với dữ liệu kiểu chuỗi thì cặp ES:DI luôn ứng với địa chỉ của phần tử thuộc chuỗi đích còn cặp DS:SI ứng với địa chỉ của phần tử thuộc chuỗi gốc. Thanh ghi cờ FR (Flag register) Đây l thanh ghi khá đặc biệt trong CPU, mỗi bit của nó đợc dùng để phản ảnh một trạng thái nhất định của kết quả phép toán do ALU thực hiện hoặc một trạng thái hoạt động của EU. Dựa vo các cờ ny ngời lập trình có thể có các lệnh thích hợp tiếp theo cho bộ vi xử lý (các lệnh nhảy có điều kiện). Thanh ghi cờ gồm 16 bit nhng ngời ta chỉ dùng hết 9 bit của nó để lm các bit cờ (hình 3.3). Các cờ của bộ vi xử lý 8085 O D I T S Z A P CX X X X X X X X : không đợc định nghĩa. Hình 3.3. Sơ đồ thanh ghi cờ của bộ vi xử lý 8086/88. Các cờ cụ thể C hoặc CF (Carry flag): cờ nhớ, CF = 1 khi có nhớ hoặc mợn từ MSB. 33 P hoặc PF (Parity flag): cờ parity, PF phản ảnh tính chẵn lẻ (parity) của tổng số bit 1 có trong kết quả. Cờ PF = 1 khi tổng số bit 1 trong kết quả l chẵn (even parity, parity chẵn). ở đây ta tạm dùng từ parity dạng nguyên gốc để tránh sự lủng củng khi phải dịch cụm từ 'even parity' thnh tính chẵn lẻ chẵn hoặc 'odd parity' thnh tính chẵn lẻ lẻ. A hoặc AF (auxiliary carry flag): cờ nhớ phụ, rất có ý nghiã khi ta lm việc với các số BCD. AF = 1 khi có nhớ hoặc mợn từ một số BCD thấp (4 bit thấp) sang một số BCD cao (4 bit cao). Z hoặc ZF (zero flag): cờ rỗng, ZF = 1 khi kết quả bằng 0. S hoặc SF (sign flag): cờ dấu, SF = 1 khi kết quả âm. O hoặc OF (overflow flag): cờ trn, OF = 1 khi kết quả l một số bù hai vợt ra ngoi giới hạn biểu diễn dnh cho nó. Trên đây l 6 bit cờ trạng thái phản ảnh các trạng thái khác nhau của kết quả sau một thao tác no đó, trong đó 5 bit cờ đầu thuộc byte thấp của thanh cờ l các cờ giống nh của bộ vi xử lý 8 bit 8085 của Intel. Chúng đợc lập hoặc xoá tuỳ theo các điều kiện cụ thể sau các thao tác của ALU. Ngoi ra, bộ vi xử lý 8088 còn có các cờ điều khiển sau đây (các cờ ny đợc lập hoặc xoá bằng các lệnh riêng): T hoặc TF (trap flag): cờ bẫy, TF = 1 thì CPU lm việc ở chế độ chạy từng lệnh (chế độ ny dùng khi cần tìm lỗi trong một chơng trình). I hoặc IF (interrupt enable flag): cờ cho phép ngắt, IF = 1 thì CPU cho phép các yêu cầu ngắt (che đợc) đợc tác động. D hoặc DF (direction flag): cờ hớng, DF = 1 khi CPU lm việc với chuỗi ký tự theo thứ tự từ phải sang trái (vì vậy D chính l cờ lùi). ý nghĩa của các cờ đã khá rõ rng. Riêng cờ trn cần phải lm rõ hơn để ta hiểu đợc bản chất v cơ chế lm việc của nó. Cờ trn thờng đợc dùng đến khi ta lm việc với số bù hai có dấu. Để cho việc giải thích đợc đơn giản, đầu tiên giả thiết ta lm việc với số bù hai di 8 bit, kết quả để ở AL (xem hình 3.4). Gọi C 67 l cờ nhớ từ bit 6 (b6) lên bit 7 (b7), trong đó b7 l MSB v cũng chính l bit dấu (SF) của AL. Ta có thể chứng minh đợc rằng quan hệ giữa cờ OF với các cờ CF v C 67 tuân theo phơng trình sau: OF = CF C 67 Nghĩa l khi thực hiện các phép toán với số bù hai có dấu, hiện tợng trn sẽ xẩy ra (cờ OF=1) nếu có nhớ từ MSB (tức l từ SF) sang CF nhng lại không có nhớ vo chính nó (SF) hoặc ngợc lại. Điều ny có thể tổng quát hoá cho các trờng hợp lm việc với số bù hai có dấu với độ di 16/32 bit. CF b7 b6 AL b0 C 67 34 Hình 3.4. Sơ đồ thanh ghi AL v các cờ CF, C 67 . 1.2. 8086 v 8088 Chế độ Chế độ MIN MAX GND Vcc [AD14] A14 A15 [AD13] A13 A16/S3 [AD12] A12 A17/S4 [AD11] A11 A18/S5 [AD10] A10 A19/S6 [AD9] A9 SS0 ( BHE /S7) [AD8] A8 MN/ MX AD7 RD AD6 HOLD ( RQ / GT0 ) AD5 HLDA ( RQ / GT1 ) AD4 WR ( LOC K ) AD3 IO/ M ( S2 ) AD2 DT/ R ( S1 ) AD1 DEN ( S0 ) AD0 ALE (QS0) NMI IN T A (QS1) INTR TEST CLK READY GND RESET 1 40 2 39 3 38 4 37 5 36 6 35 7 34 8 33 9 32 10 31 [8086] P 8088 11 30 12 29 13 28 14 27 15 26 16 25 17 24 18 23 19 22 20 21 Hình 3.5. Sơ đồ chân của CPU 8088 [8086]. Trớc khi kết thúc phần mô tả cấu trúc của bộ vi xử lý để đi vo giới thiệu tập lệnh của 8088, ta nói qua một chút về sự giống nhau v khác nhau giữa 8088 v 8086. 8086 l bộ vi xử lý 16 bit hon chỉnh, còn 8088 l bộ vi xử lý với 16 bit dữ liệu bên trong (giống nh 8086), nhng khi ra ngoi bus dữ liệu của nói chỉ còn 8 bit. Cấu trúc 35 bên trong của 8088 v 8086 giống nhau về cơ bản, ngoại trừ 2 điểm. Điểm khác nhau đầu tiên l ở độ di bộ nhớ đệm lệnh (hng đợi lệnh): độ di ny ở 8088 l 4 byte còn ở 8086 l 6 byte; điều ny sẽ có ảnh hởng ít nhiều đến sự khác biệt về tốc độ xử lý của 2 bộ CPU. Điểm khác nhau thứ hai l ở kích thớc của bus dữ liệu: ở 8088 l 8 bit còn ở 8086 l 16 bit (trong khi ALU v các thanh ghi của 2 bộ CPU vẫn có độ di nh nhau). Điều ny có ảnh hởng nhiều đến công năng (perfomance) v giá thnh của hệ thống xây dựng trên cơ sở các bộ vi xử lý ny. Đối với 8086 do bus dữ liệu l 16 bit nó có thể đọc/ghi đợc một từ nằm ở 2 ô nhớ 'thẳng hng' (1 từ trong bộ nhớ đợc coi l xếp thẳng hng khi ở địa chỉ chẵn l byte thấp, ở địa chỉ lẻ l byte cao) trong 1 chu kỳ đọc/ghi; còn ở 8088 do bus dữ liệu chỉ có 8 bit nên để đọc/ghi 1 từ nằm ở 2 ô nhớ 'thẳng hng' (nằm liên tiếp nh trên), nó phải thực hiện trong 2 chu kỳ đọc/ghi. Bù lại nhợc điểm về tốc độ, 8088 có giá rẻ v đợc dùng để tạo ra các hệ thống với giá phải chăng vì nó dễ phối ghép với các thiết bị ngoại vi 8 bit đang thịnh hnh lúc đó. Điều khác nhau nữa tất yếu phải xảy ra l sự khác nhau trong việc bố trí các chân ở 2 vi mạch nh trên hình 3.5 (xem thêm phần giới thiệu cụ thể các tín hiệu tại các chân ở chơng 5). Mặc dù có những điểm khác nhau đã nêu, nhng vì những điểm giống nhau l rất cơ bản v vì 2 bộ vi xử lý có tập lệnh giống nhau nên về quan điểm lập trình thì chúng l tơng đơng. 2. Cách mã hoá lệnh của bộ vi xử lý 8088 Lệnh của bộ vi xử lý đợc ghi bằng các ký tự dới dạng gợi nhớ (mnemonic) để ngời sử dụng dễ nhận biết. Đối với bản thân bộ vi xử lý thì lệnh cho nó đợc mã hoá dới dạng các số 0 v 1 (còn gọi l mã máy) vì đó l dạng biểu diễn thông tin duy nhất m máy hiểu đợc. Vì lệnh cho bộ vi xử lý đợc cho dới dạng mã nên sau khi nhận lệnh, bộ vi xử lý phải thực hiện giải mã lệnh rồi sau đó mới thực hiện lệnh. Việc hiểu rõ bản chất cách ghi lệnh bằng số hệ hai cho bộ vi xử lý sẽ có lợi khi ta cần dịch "bằng tay" một lệnh gợi nhớ khi lm việc với các 'kit' vi xử lý (tuy rằng việc ny ít khi xảy ra vì ta thờng lm việc với các hệ đợc trang bị chơng trình dịch hợp ngữ). Một lệnh có thể có độ di một vi byte tuỳ theo bộ vi xử lý. Giả thiết một bộ vi xử lý no đó dùng 1 byte để chứa các mã lệnh (opcode) của nó. Ta có thể tính đợc số lệnh lớn nhất m 1 byte ny có thể mã hoá đợc l 256 lệnh. Trong thực tế việc ghi lệnh không phải hon ton đơn giản nh vậy. Việc mã hoá lệnh cho bộ vi xử lý l rất phức tạp v bị chi phối bởi nhiều yếu tố khác nữa. Đối với bộ vi xử lý 8088 một lệnh có thể có độ di từ 1 đến 6 byte. Ta sẽ chỉ lấy trờng hợp lệnh MOV để giải thích cách ghi lệnh nói chung của 8088. Lệnh MOV đích, gốc dùng để chuyển dữ liệu giữa 2 thanh ghi hoặc giữa ô nhớ v thanh ghi. Chỉ nguyên với các thanh ghi của 8088, nếu ta lần lợt đặt các thanh ghi vo vị trí các toán hạng đích v toán hạng gốc ta thấy đã phải cần tới hng trăm mã lệnh khác nhau để mã hoá tổ hợp các lệnh ny. 36 [...]... có lúc nó truy nhập dữ liệu từ bộ nhớ v đa đến cho bộ đồng xử lý toán học 8087 HLT - Halt Processing (Dừng) Khi gặp lệnh ny, các hoạt động của 8088 bị tạm dừng v bộ vi xử lý 8088 bớc vo trạng thái dừng Để thoát khỏi trạng thái dừng chỉ có cách tác động vo một trong các chân INTR, NMI, hoặc RESET của bộ vi xử lý IDIV - Integer Division (Signed division) (Chia số có dấu) Vi t lệnh: IDIV Gốc Trong đó toán... byte - MOV 0F3H[SI],CL: 38 0 0 0 1 mã hoá CL [BX] 1 1 1 1 0 0 0 1 0 0 0 0 1 0 0 1 1 0 0 1 1 1 1 0 0 1 1 Chuyển từ thanh ghi CL [SI] 1 byte d8=F3H 3 Các chế độ địa chỉ của bộ vi xử lý 8088 Chế độ địa chỉ (addressing mode) l cách để CPU tìm thấy toán hạng cho các lệnh của nó khi hoạt động Một bộ vi xử lý có thể có nhiều chế độ địa chỉ Các chế độ địa chỉ ny đợc xác định ngay từ khi chế tạo ra bộ vi xử lý. .. không dấu 32 bit để trong cặp thanh ghi DXAX, sau khi chia: AX thơng, DX số d Nếu thơng không phải l số nguyên nó đợc lm tròn theo số nguyên sát dới Nếu Gốc = 0 hoặc thơng thu đợc lớn hơn FFH hoặc FFFFH (tuỳ theo độ di của toán hạng Gốc) thì 8088 thực hiện lệnh ngắt INT 0 Không xác định: AF,CF,OF, PF, SF, ZP ESC - Escape Lệnh ny dùng để truyền các lệnh cho bộ đồng xử lý toán học 8087 Bộ vi xử lý 8088. .. SI + Dịch chuyển + Địa chỉ hiệu dụng CSì16 hoặc DSì16 hoặc + SSì16 hoặc ESì16 + Địa chỉ vật lý Hình 3. 7 Một hình thức khác tổng kết các chế độ địa chỉ của 8088 4 Mô tả tập lệnh của bộ vi xử lý 8088 Có nhiều cách trình by tập lệnh của một bộ vi xử lý: trình by các lệnh theo các nhóm hoặc theo thứ tự abc Ta sẽ chọn cách lm thứ 2 để sau ny dễ tìm kiếm các lệnh khi cần tra cứu cụ thể Trong khi nói tới các... ;BL = 0011 0101B = 35 H = '5', ;AL = 0011 1001B = 39 H = '9', ;ASCII 9 - ASCII 5: SUB AL,BL AAS OR AL ,30 H 46 ; ; ; ; thu thu gói thu đợc AL = 04H = 4, đợc AL = 04H, mã BCD không của 4 đợc AL = 34 H, mã ASCII cho 4 ; để truyền kết quả trở lại thiết bị ; đầu cuối b) ;AL = 0011 0101B = 35 H = '5', ;BL = 0011 1001B = 39 H = '9', ;ASCII 5 - ASCII 9: SUB Al,BL AAS ; ; ; ; thu đợc AL = FCH =-4 , CF=1, thu đợc... bằng lệnh AAM v sau đó đổi tiếp thnh mã ASCII để truyền tiếp ; ; ; ; ; ; ; ; MUL BL AAM OR AX ,30 30H AL = 0011 0101B = 35 H = '5', BL = 0011 1001B = 39 H = '9', thu đợc AX = 002DH = 45, thu đợc AX = 0405H, mã BCD không nén của 45 thu đợc AX = 34 35H, mã ASCII cho 45 để truyền kết quả trở lại thiết bị đầu cuối AAS - ASCII Adjust after Subtraction (Chỉnh sau khi trừ 2 số ở dạng ASCII) Lệnh ny dùng để đổi một... hoặc một từ (W=1) sẽ đợc chuyển Byte 1 Byte 2 Byte 3 1 0 0 0 1 0 Opcode Byte 4 DispL D W mod REG DispH M/R hoặc Disp: displacement (dịch chuyển) Địa chỉ trực tiếp phần thấp Địa chỉ trực tiếp phần cao Hình 3. 6 Dạng thức các byte mã lệnh của lệnh MOV Trong các thao tác chuyển dữ liệu, một toán hạng luôn bắt buộc phải l thanh ghi Bộ vi xử lý dùng 2 hoặc 3 bit để mã hoá các thanh ghi trong CPU nh sau: Thanh... nên ;AL-60H-6 = 1001 1001BCD = 99, CF = 1 Trong thí dụ trên CF=1 có nghĩa l phải mợn 100 thêm vo số bị trừ để đợc kết quả l 99 Nói khác đi kết quả đúng sẽ l -1 DEC - Decrement Destination Register or Memory (Giảm toán hạng đích đi 1) Vi t lệnh: DEC Destination Mô tả: Đích Đích - 1 Trong đó toán hạng đích có thể tìm đợc theo các chế độ địa chỉ khác nhau Lu ý l nếu Đich = 00H (hoặc 0000H) thì Đích-1=FFH... tiếp Ví dụ MOV AL,[1 234 H] MOV [ 432 0H],CX ;chuyển nội dung ô nhớ DS:1 234 ; vo AL ;chuyển nội dung CX vo 2 ô nhớ ; liên tiếp DS: 432 0 v DS: 432 1 Chế độ địa chỉ gián tiếp qua thanh ghi Trong chế độ địa chỉ ny một toán hạng l một thanh ghi đợc sử dụng để chứa địa chỉ lệch của ô nhớ chứa dữ liệu, còn toán hạng kia chỉ có thể l thanh ghi m không đợc l ô nhớ (8088 không cho phép quy chiếu bộ nhớ 2 lần đối với... [BX] [BX] + d8 [BX] + d16 BH DI chế độ bộ nhớ CH SP BP chế độ thanh ghi - d8: disp 8 bit, d16: disp.16 bit - Các giá trị cho trong các cột 2, 3, 4 (ứng với MOD=00,01,10) l các địa chỉ hiệu dụng (EA) sẽ đợc cộng với DS để tạo ra địa chỉ vật lý (riêng BP phải đợc cộng với SP) Ghi chú: Trong các ví dụ sau đây ta sẽ dùng các kiến thức nêu trên để mã hoá một vi lệnh MOV - MOV CL,[BX] 1 0 0 0 1 0 1 0 0 Opcode . Chơng 3 Bộ Vi xử lý Intel 8088 Sau khi đã tìm hiểu qua về cấu trúc của hệ vi xử lý, trong chơng ny ta sẽ đi sâu tìm hiểu một bộ vi xử lý cụ thể v rất điển hình: bộ vi xử lý 8088 của Intel cần nói rõ lý do tại sao ở đây ta lại chọn đích danh bộ vi xử lý 8088 để tìm hiểu m không phải l bộ vi xử lý no khác (điều m nhiều ngời khác cũng đã lm). Thứ nhất, đây l bộ vi xử lý nổi tiếng. l rất cơ bản v vì 2 bộ vi xử lý có tập lệnh giống nhau nên về quan điểm lập trình thì chúng l tơng đơng. 2. Cách mã hoá lệnh của bộ vi xử lý 8088 Lệnh của bộ vi xử lý đợc ghi bằng các ký