Để đáp ứng được nhu cầu về công nghệ hiện nay, nhà sản xuất chip vi xử líIntel đã phát triển và chế tạo ra bộ mạch đồng xử lý toán học 8087/80287/80387 .Chúng làm việc với 80 bit cùng mộ
Trang 1Lời nói đầu
Khoa học phát triển ngày càng mạnh mẽ, nhu cầu sử dụng về công nghệngày càng cao, yêu cầu về độ chính xác, năng suất hoạt động cao Từ những yêucầu đó con người phải sản xuất phát minh ra những công cụ, sản phẩm ứng dụng vàphát triển ngành công nghệ lập trình
Để đáp ứng được nhu cầu về công nghệ hiện nay, nhà sản xuất chip vi xử líIntel đã phát triển và chế tạo ra bộ mạch đồng xử lý toán học 8087/80287/80387 Chúng làm việc với 80 bit cùng một lúc, cho nên lập trình viên có thể biểu diễn một
số đủ độ dài để đảm bảo cho các phép tính được thực hiện chính xác Một tính năngcải tiến của chip Intel 80486 DX là gộp cả mạch đồng xử lý số vào trong chip vi
Trang 2Chương 1: Giới thiệu chung về vi xử lý
1.1 Giới thiệu về vi xử lý
Một máy tính thông thường bao gồm các khối chức năng cơ bản, như khối
xử lí trung tâm (CPU - Central Processing Unit), bộ nhớ trong và khối phối ghépvới thiết bị ngoại vi (I/O - Input/Output) Tuỳ theo quy mô, độ phức tạp và hiệunăng của các khối chức năng kể trên mà người ta chia các máy tính điện tử đã vàđang sử dụng ra thành các loại sau:
Máy tính lớn (Mainframe) là loại máy tính được thiết kế để giải các bài toánlớn với tốc độ cao
Máy tính con (Minicomputer) là một dạng thu nhỏ về kích thước cũng như
về tính năng của máy tính lớn
Máy vi tính (Microcomputer) là loại máy tính rất thông dụng hiện nay Mộtmáy vi tính có thể là một bộ vi điều khiển (Microcontroller), một máy tính trongmột vi mạch (one-chip microcomputer), và một hệ vi xử lí có khả năng làm việcvới số liệu có độ dài 1 bít, 4 bít, 8 bít, 16 bít hoặc lớn hơn Hiện nay, một số loạimáy vi tính có năng lực xử lý tương đương với máy tính con, có thể làm việc với sốliệu có độ dài từ là 32 bít và 64 bít Ranh giới để phân chia giữa máy vi tính và máytính con chính vì thế ngày càng không rõ nét
Các bộ vi xử lý hiện có tên thị trường thường được xếp theo các họ phụthuộc vào các nhà sản xuất và chúng rất đa dạng về chủng loại Các nhà sản xuất vi
xử lý nổi tiếng có thể kể tới là hãng Intel với các vi xử lý họ x86, Core, Core i;Motorola với vi xử lý họ 680xx; Sun Microsystems với họ vi xử lý SPARC vàAMD với các vi xử lý Althlon và Phenom Tính đến thời điểm hiện nay các chươngtrình viết cho tập lệnh x86 và tương thích của Intel chiếm tỷ lệ áp đảo trong môitrường máy vi tính
Trang 31.2 Chip đồng xử lý toán học 8087/80287/80387 (Mathematical co-processor)
Intel 8087 được công bố vào năm 1980, là sản phẩm x87 đầu tiên kết nối vi
thập phân lớn Hiệu suất được
cải tiến từ khoảng 20% đến hơn
500%, tùy thuộc vào ứng dụng
được hưởng lợi từ các chi phí
phụ (khoảng $ 150 ) và công suất
Tiếp thị bởi Intel , IBM
Thiết kế bởi Intel
Max CPU tốc độ đồng hồ
4 MHz đến 10 MHz
Min kích thước tính năng
Trang 4bảo cho các phép tính được thực hiện chính xác Một tính năng cải tiến của chipIntel 80486 DX là gộp cả mạch đồng xử lý số vào trong chip vi xử lý.
Các bộ đồng xử lý toán 80x87 hỗ trợ CPU trong việc tính toán các biểu thứcdùng dấu chấm động như cộng, trừ, nhân, chia các số dấu chấm động, căn thức,logarit,… Chúng cho phép xử lý các phép toán này nhanh hơn nhiều so với CPU.Thời gian xử lý giữa 8087 và 8086 như sau (dùng xung clock 8 MHz):
Trang 5Chương 2: Chip đồng xử lý toán học 8087/80287/80387
2.1 8087
2.1.1 Cấu trúc 8087.
8087 gồm một đơn vị điều khiển (CU – Control Unit) dùng để điều khiển bus
và một đơn vị số học (NU – Numerical Unit) để thực hiện các phép toán dấu chấmđộng trong các mạch tính lũy thừa (exponent module) và mạch tính phần định trị(mantissa module) Khác với 8086, thay vì dùng các thanh ghi rời rạc là một ngănxếp thanh ghi
Bus dữ liệu
Địa chỉ trạng thái
Hình 2.1 : Sơ đồ khối của 8087
Đơn vị điều khiển nhận và giải mã lệnh, dọc và ghi các toán hạng, chạy cáclệnh điều khiển riêng của 8087 Do đó, CU có thể đồng bộ với CPU trong khi NUđang thực hiện các công việc tính toán CU bao gồm bộ điều khiển bus, bộ đệm dữliệu và hàng lệnh
Từ trạng thái
số
Module lũy thừa
Module định trị
Đệm dữ liệu
Thanh ghi Đệm dữ liệu
Ngăn xếp Điều khiển bus
Trang 62.1.2 Bộ đồng xử lý toán học 8087.
Chip vi xử lý 8087 là đồng xử lý toán học dùng chung với 8086/8088 trongmáy tính, trong đó 8087 là vi xử lý phụ (slave) còn 8086/8088 là vi xử lý chính(master) 8087 chuyên thực hiện các phép tính các số với dấu phảy động thuộcnhiều loại dữ liệu khác nhau 8086/8088 thực hiện các phép tính này thông quathực hiện các mô phỏng, do đó tốc độ thực hiện chúng rất chậm Nếu dùng 8087
sẽ tăng tốc độ tính toán các số dấu phảy động lên rất nhiều
Hình 2.2: Đóng vỏ DIP 40 chân và các tín hiệu của chip đồng xử lý toán học 8087
Công nghệ vào thời kỳ ra đời 8086/8088 không cho phép cấy 8087 vào bêntrong 8086/8088 như trong 80486DX và Pentium, do đó phải chế tạo chip riêng đểthực hiện phép tính số dấu phẩy động 8086 được đóng vỏ DIP 40 chân tín hiệu.Các đường tín hiệu địa chỉ và dữ liệu được ghép chung từ A0/D0 đến A19/D15.Như vậy 8087 có thể trao đổi dữ liệu theo byte và theo từ 16 bit Các tín hiệutrạng thái S0, S1, S2 và S3, S4, S5, S6, S7 có trong chế độ làm việc tối đa của8086/8088 Nhịp đồng hồ CLK của 8087 có tần số như tần số của nhịp đồng hồ
Trang 7Đơn vị xử lý số học Đơn vị điều khiển
Thanh ghi dịch lập trình được Hàng đợi
phép toán
Từ điều khiển
Từ trạng thái
Module
số học Giao tiếp
Đơn vị điều khiển vi lệnh
Bộ đệm
dữ liệu
Lệnh mới
Dữ liệu
Các thanh ghi tạm
Đánh địa chỉ và tạo rãnh bus
Hàng đợi phép toán
Con trỏ ngoại tệ
Trang 8Dấu Hàm mũ Logarit
Hình 2.4: Khuôn dạng tập thanh ghi bên trong của 8087
2.1.3 Thanh ghi
Hình 2.5: Sơ đồ kết nối 8087 và CPU 8086
Ngăn xếp thanh ghi có tất cả 8 thanh ghi từ R0 ÷ R7, mỗi thanh ghi dài 80 bittrong đó bit 79 là bit dấu, bit 64 ÷ 78 dùng cho số mũ và phần còn lại là phần địnhtrị Dữ liệu truyền giữa các thanh ghi này được thực hiện rất nhanh do 8087 có độrộng bus dữ liệu là 84 bit và không cần phải biến đổi định dạng
Ngay sau khi reset PC, bộ đồng xử lý kiểm tra xem nó có được nối với PChay không bằng các đường BHE/S7 8087 sẽ điều chỉnh độ dài của hàng lệnh chophù hợp với CPU (nếu dùng 8086 thì độ dài là 6 byte)
8087 có một thanh ghi trạng thái là thanh ghi từ thẻ (tag word) gồm các cặpbit Tag0 ÷ Tag7 để lưu trữ các thông tin liên quan đến nội dung của các thanh ghiR0 ÷ R7 để cho phép thực hiện một số tác vụ nhanh hơn Mỗi thanh ghi từ thẻ có 2bit xác định 4 giá trị khác nhau của các thanh ghi Ri
Trang 9Tag = 00: xác định
Tag = 01: zero
Tag = 10: NAN, giá trị bất thường
Tag = 11: rỗng
Tập thanh ghi bên trong của 8087:
Tập thanh ghi bên trong 8087 được tổ chức theo cơ chế ngăn xếp(register stack), và có khuôn dạng như trong Hình 2.4 và Hình 2.5.Trong cơ chế ngăn xếp dữ liệu được đẩy vào (push) đỉnh ngăn xếp, vịtrí ST(0), và những dữ liệu cũ trong ngăn xếp được tự động đẩy xuốngphía đấy ngăn xếp Khi đọc ra, dữ liệu được lấy từ đỉnh ST(0), những
dữ liệu còn lại trong ngăn xếp tự động đi lên đỉnh
Trang 102.1.4 Kết nối 8087 và 8086/8088
Hình 2.6: Ghép nối vi xử lý 8086 và đồng xử lý toán học 8087
Sự liên kết giữa 8086 với 8087 được thực hiện cả phần cứng và phần mềm vàđược mô tả trong Hình 2.6
Về phần cứng, tín hiệu RQ / GT0 của 8087 thực hiện giám sát truy cập bus,
về phần mềm, 8087 theo dõi các lệnh được 8086/8088 đọc ra có tiền tố là ký hiệuđặc biệt ESCAPE (ESC) hay không Nếu tiền tố của lệnh máy có ký tự ESC thì
8087 tiếp nhận lệnh đưa từ 8086/8088 và sẽ bắt đầu quá trình thực hiện lệnh, còn8088/8086 thì vẫn tiếp tục xử lý riêng cho đến lúc nó cần đến kết quả tính toán từ
8087 Lúc này 8080/8086 bước vào trạng thái chờ đợi WAIT (Lệnh WAIT chờtín hiệu TEST) Khi 8087 đã tính xong và đưa kết quả vào bộ nhớ, nó gửi tín hiệuBUSY = 0 đến chân TEST để thông báo cho 8086/8088 Trạng thái chờ của8086/8088 kết thúc khi TEST khẳng định ở mức 0 và 8086/8088 tiếp tục quátrình xử lý của nó Trong chế độ tối đa, INTA và ALE trở thành hai tín hiệutrạng thái QS1 và QS0, đó là 2 bit trạng thái của bộ vi xử lý trong quá trình thực
Trang 11hiện lệnh Chúng cần thiết cho bộ đồng xử lý và các thiết bị ngoại vi làm việc kếthợp chặt chẽ với bộ vi xử lý.
Quá trình tính toán của 8087 thực hiện theo 3 bước như sau:
- Bước 1: Dữ liệu được nạp từ bộ nhớ chính của hệ thống vào tập hợp cácthanh ghi bên trong (register stack)
- Bước 2: 8087 xử lý các dữ liệu vừa được nạp
- Bước 3:Kết quả được cất trở lại vào bộ nhớ chính của hệ thống
2.1.5 Tập lệnh 8087
Tập lệnh của 8087 gồm nhiều lệnh tính toán với các số nguyên, BCD và dấuphảy động Chúng được xem là các lệnh mở rộng tập lệnh của 8086/8088 Khiviết chương trình, trong đó có sử dụng cả các lệnh của 8087, và 8088, thì thứ tựchương trình không cần bận tâm Tất cả các tên lệnh của tập lệnh 8087 đều cóchữ cái đầu là "F", nghĩa là Floating-point
Các lệnh của 8087 phân thành các nhóm như sau:
1 Các lệnh vận chuyển các số thực (Real transfers)
2 Các lệnh vận chuyển các số nguyên (Integer transfers)
3 Các lệnh vận chuyển các số hệ mười đóng gói (Packed decimal transfers0
Trang 1211 Các lệnh với hằng số (Constant).
12 Các lệnh điều khiển bộ xử lý (Processor Control)
Nhóm lệnh điều khiển bộ xử lý là những lệnh như: Khởi tạo ban đầu bộ xử
lý, cấm ngắt, cho phép ngắt, nạp từ điều khiển, cất giữ từ điều khiển, xoá cácngoại lệ, nạp và cất giữ môi trường, cất giữ và phục hồi trạng thái, tăng con trỏngăn xếp, giảm con trỏ ngăn xếp, làm trống thanh ghi, chờ CPU, và không thựchiện gì cả
2.1.6 Khuôn dạng dữ liệu 8087
Khi cất giữ vào trong bộ nhớ chính của hệ thống, dữ liệu có thể ở bất kỳkhuôn dạng nào, nhưng trong 8087, dữ liệu chỉ có thể được xử lý và cất giữ dướicác dạng số qui định cho các tính toán số dấu phảy động Khi chuyển từ 8087 trởlại bộ nhớ chính của hệ thống, dữ liệu được tự động chuyển về dạng thích hợpcho xử lý bên trong 8086/8088
Số thực ngắn có giá trị lớn nhất là 127 (7Fh), số thực dài có giá trị lớn nhất là
1023 (3FFh), và số thực tạm thời có giá trị lớn nhất là 16383 (3FFFh)
Trang 132.2 80287
Hình 2.7: Sơ đồ kết nối giữa 80286 và 80287
Do 80286 có chế độ mạch bảo vệ nên mạch ghép nối giữa 80286 và 80287được thiết kế khác 8087 ở đơn vị điều khiển CU Bộ đồng xử lý ở đây không thựchiện truy xuất bộ nhớ trực tiếp Để truy xuất được bộ nhớ, 80287 không những cầnmột đơc vị định địa chỉ đơn giản của nó mà còn phải được tăng cường thêm chứcnăng quản lý bộ nhớ của 80286 Cấu trúc bên trong của 80287 cũng tương tự như
8087, chỉ có đơn vị bus thay đổi cho phù hợp với 80286 Khác vơi 8087, 80287hoạt động không đồng bộ với CPU nên có thể dùng xung clock riêng
Trang 142.3 80387:
Ưu điểm của 80387 so với 80287 là có thể thực hiện các phép toán số họcnhanh hơn Nó có bus dữ liệu 32 bit như CPU và sử dụng công nghệ CMOS nêncông suất tiêu thụ thấp hơn
Trang 15- Phân loại các nhóm lệnh toán học trong vi xử lý 8087
3 Sơ đồ kết nối giữa vi xử lý 80287 và 80286
4 Ưu điểm của vi xử lý 80387 sau khi nghiên cứu phát triển từ vi xử lý 80287
Lời nói đầu
Khoa học phát triển ngày càng mạnh mẽ, nhu cầu sử dụng về công nghệngày càng cao, yêu cầu về độ chính xác, năng suất hoạt động cao Từ những yêucầu đó con người phải sản xuất phát minh ra những công cụ, sản phẩm ứng dụng vàphát triển ngành công nghệ lập trình
Để đáp ứng được nhu cầu về công nghệ hiện nay, nhà sản xuất chip vi xử líIntel đã phát triển và chế tạo ra bộ mạch đồng xử lý toán học 8087/80287/80387 Chúng làm việc với 80 bit cùng một lúc, cho nên lập trình viên có thể biểu diễn một
số đủ độ dài để đảm bảo cho các phép tính được thực hiện chính xác Một tính năngcải tiến của chip Intel 80486 DX là gộp cả mạch đồng xử lý số vào trong chip vi
Trang 16Chương 1: Giới thiệu chung về vi xử lý
1.3 Giới thiệu về vi xử lý
Một máy tính thông thường bao gồm các khối chức năng cơ bản, như khối
xử lí trung tâm (CPU - Central Processing Unit), bộ nhớ trong và khối phối ghépvới thiết bị ngoại vi (I/O - Input/Output) Tuỳ theo quy mô, độ phức tạp và hiệunăng của các khối chức năng kể trên mà người ta chia các máy tính điện tử đã vàđang sử dụng ra thành các loại sau:
Máy tính lớn (Mainframe) là loại máy tính được thiết kế để giải các bài toánlớn với tốc độ cao
Máy tính con (Minicomputer) là một dạng thu nhỏ về kích thước cũng như
về tính năng của máy tính lớn
Máy vi tính (Microcomputer) là loại máy tính rất thông dụng hiện nay Mộtmáy vi tính có thể là một bộ vi điều khiển (Microcontroller), một máy tính trongmột vi mạch (one-chip microcomputer), và một hệ vi xử lí có khả năng làm việcvới số liệu có độ dài 1 bít, 4 bít, 8 bít, 16 bít hoặc lớn hơn Hiện nay, một số loạimáy vi tính có năng lực xử lý tương đương với máy tính con, có thể làm việc với sốliệu có độ dài từ là 32 bít và 64 bít Ranh giới để phân chia giữa máy vi tính và máytính con chính vì thế ngày càng không rõ nét
Các bộ vi xử lý hiện có tên thị trường thường được xếp theo các họ phụthuộc vào các nhà sản xuất và chúng rất đa dạng về chủng loại Các nhà sản xuất vi
xử lý nổi tiếng có thể kể tới là hãng Intel với các vi xử lý họ x86, Core, Core i;Motorola với vi xử lý họ 680xx; Sun Microsystems với họ vi xử lý SPARC vàAMD với các vi xử lý Althlon và Phenom Tính đến thời điểm hiện nay các chươngtrình viết cho tập lệnh x86 và tương thích của Intel chiếm tỷ lệ áp đảo trong môitrường máy vi tính
Trang 181.4 Chip đồng xử lý toán học 8087/80287/80387 (Mathematical co-processor)
Intel 8087 được công bố vào năm 1980, là sản phẩm x87 đầu tiên kết nối vi
thập phân lớn Hiệu suất được
cải tiến từ khoảng 20% đến hơn
500%, tùy thuộc vào ứng dụng
được hưởng lợi từ các chi phí
phụ (khoảng $ 150 ) và công suất
Tiếp thị bởi Intel , IBM
Thiết kế bởi Intel
Max CPU tốc độ đồng hồ
4 MHz đến 10 MHz
Min kích thước tính năng
Trang 19bảo cho các phép tính được thực hiện chính xác Một tính năng cải tiến của chipIntel 80486 DX là gộp cả mạch đồng xử lý số vào trong chip vi xử lý.
Các bộ đồng xử lý toán 80x87 hỗ trợ CPU trong việc tính toán các biểu thứcdùng dấu chấm động như cộng, trừ, nhân, chia các số dấu chấm động, căn thức,logarit,… Chúng cho phép xử lý các phép toán này nhanh hơn nhiều so với CPU.Thời gian xử lý giữa 8087 và 8086 như sau (dùng xung clock 8 MHz):
Trang 20Chương 2: Chip đồng xử lý toán học 8087/80287/80387
2.1 8087
2.1.1 Cấu trúc 8087.
8087 gồm một đơn vị điều khiển (CU – Control Unit) dùng để điều khiển bus
và một đơn vị số học (NU – Numerical Unit) để thực hiện các phép toán dấu chấmđộng trong các mạch tính lũy thừa (exponent module) và mạch tính phần định trị(mantissa module) Khác với 8086, thay vì dùng các thanh ghi rời rạc là một ngănxếp thanh ghi
Bus dữ liệu
Địa chỉ trạng thái
Hình 2.1 : Sơ đồ khối của 8087
Đơn vị điều khiển nhận và giải mã lệnh, dọc và ghi các toán hạng, chạy cáclệnh điều khiển riêng của 8087 Do đó, CU có thể đồng bộ với CPU trong khi NUđang thực hiện các công việc tính toán CU bao gồm bộ điều khiển bus, bộ đệm dữliệu và hàng lệnh
Từ trạng thái
số
Module lũy thừa
Module định trị
Đệm dữ liệu
Thanh ghi Đệm dữ liệu
Ngăn xếp Điều khiển bus
Trang 212.1.2 Bộ đồng xử lý toán học 8087.
Chip vi xử lý 8087 là đồng xử lý toán học dùng chung với 8086/8088 trongmáy tính, trong đó 8087 là vi xử lý phụ (slave) còn 8086/8088 là vi xử lý chính(master) 8087 chuyên thực hiện các phép tính các số với dấu phảy động thuộcnhiều loại dữ liệu khác nhau 8086/8088 thực hiện các phép tính này thông quathực hiện các mô phỏng, do đó tốc độ thực hiện chúng rất chậm Nếu dùng 8087
sẽ tăng tốc độ tính toán các số dấu phảy động lên rất nhiều
Hình 2.2: Đóng vỏ DIP 40 chân và các tín hiệu của chip đồng xử lý toán học 8087
Công nghệ vào thời kỳ ra đời 8086/8088 không cho phép cấy 8087 vào bêntrong 8086/8088 như trong 80486DX và Pentium, do đó phải chế tạo chip riêng đểthực hiện phép tính số dấu phẩy động 8086 được đóng vỏ DIP 40 chân tín hiệu.Các đường tín hiệu địa chỉ và dữ liệu được ghép chung từ A0/D0 đến A19/D15.Như vậy 8087 có thể trao đổi dữ liệu theo byte và theo từ 16 bit Các tín hiệutrạng thái S0, S1, S2 và S3, S4, S5, S6, S7 có trong chế độ làm việc tối đa của8086/8088 Nhịp đồng hồ CLK của 8087 có tần số như tần số của nhịp đồng hồ