Bài giảng Cấu trúc máy tính - Bài 9: Đồng xử toán 8087 (Co-Processor)

pdf 49 trang phuongnguyen 3970
Bạn đang xem 20 trang mẫu của tài liệu "Bài giảng Cấu trúc máy tính - Bài 9: Đồng xử toán 8087 (Co-Processor)", để tải tài liệu gốc về máy bạn click vào nút DOWNLOAD ở trên

Tài liệu đính kèm:

  • pdfbai_giang_cau_truc_may_tinh_bai_9_dong_xu_toan_8087_co_proce.pdf

Nội dung text: Bài giảng Cấu trúc máy tính - Bài 9: Đồng xử toán 8087 (Co-Processor)

  1. Bài 9 Đồng xử toán 8087 (Co-Processor)
  2. 1. Giới thiệu 2. Các kiểu dữ liệu của đồng xử lý toán 3. Lập trình với đồng xử lý toán 4. Tổ chức đồng xử lý toán 8087 5. Nối ghép đồng xử lý toán 8087 trong máy tính XT
  3. 1. Giới thiệu . Đồng xử lý toán (ĐXLT) còn được gọi là đơn vị dấu phẩy động (Floating Point Unit). . Chức năng: Hỗ trợ CPU trong việc tính toán các số dấu phẩy động như cộng, trừ, nhân chia số dấu phẩy động, khai căn, lôgarit
  4. . Bộ ĐXLT cho phép thực hiện các phép toán số dấu phẩy động nhanh hơn nhiều lần so với bộ vi xử lý (từ hàng chục cho đến hàng trăm lần). . Từ bộ VXL 486 về sau, ĐXLT đư ợc tích hợp trong chip CPU. . Từ 386 về trước ĐXLT là chip riêng.
  5. Bảng 12.1. So sánh nhịp đồng hồ 8087 và 8086 Thời gian F=4,7MHz Phép toán 8087(às 8088 Số lần à Nhân độ chính xác 19) 1.600( s) 85 Nhânđơn độ chính xác 27 2.100 80 Cộngkép 17 1.600 95 Chia 39 3.200 80 So sánh 9 1.300 145 Nạp 9 1.700 190 Cất 18 1.200 70 Căn bậc hai 36 19.600 550 Tang 90 13.000 145 Hàm mũ 100 17.100 170
  6. 2. Các kiểu dữ liệu đồng xử lý toán. Chuẩn số dấu phẩy động IEEE . Năm 1980 Uỷ ban IEEE đã tiến hành chuẩn hoá biểu diễn số thực. . Chuẩn IEEE, số thực có hai cấp độ chính xác: . Số với độ chính xác đơn. . Số với độ chính xác kép. . Hiện nay các hãng máy tính, trong đó có IBM, Intel và Microsoft đều tuân theo chuẩn này. . Các bộ vi xử lý RISC cũng sử dụng chuẩn dấu phẩy động IEEE.
  7. * Số IEEE dấu phẩy động chính xác đơn . Số dấu phẩy động chính xác đơn sử dụng 32 bit để biểu diễn số thực (số âm và số dương). . Khoảng giá trị nhị phân: 2-126≤ X ≤ 2 +128 . Khoảng giá trị thập phân: 1,2x10 -38≤ X ≤ 3,4x10 +38 . Tên gọi khác: Số thực ngắn.
  8. Sắp xếp các bit Bit Sắp xếp 31 Bit dấu: 0-số dương, 1-số âm. 23-30 Phần mũ. 22-0 Phần thập phân (định trị) 31 30 23 22 S Số0 mũ Phần định trị Khoảng giá trị: 1,18x10 -38 ≤ X ≤ 3,40x10 38 2 -126≤ X ≤2 128
  9. 55 48 47 24 23 0 1 1 1 1 1 1 1 1 1 0 1 1 0 0 0 0 0 Mở rộng dấu Dấu Nội dung của thanh chứa -0,625 : Số thập phân 11111111101100 0 : Mã bù 11111111110100 0 : Mã trực tiếp 55 48 47 24 23 0 1 1 1 1 1 1 1 0 1 0 1 1 0 0 0 0 0 Dấu Phần nguyên Phần thập phân Nội dung của thanh chứa -3,625 : Số thập phân 11111110101100 0 : Mã bù 10000001110100 0 : Mã trực tiếp Hình 3.5. (Ví dụ về số với dấu phẩy cố định dạng số lẻ và số hỗn hợp (DSP 56K của Motorola)
  10. Các bước chuyển số thực sang dấu phẩy động 1. Số thực được chuyển thành số nhị phân. 2. Số nhị phân được biểu diễn dưới dạng khoa học 1.XXXXEYYYY 3. Bit 31 có giá trị hoặc là 0 để chỉ số dư ơng, hoặc là 1 để chỉ số âm. 4. Phần số mũ YYYY được cộng thêm hằng số 7FH để tính số mũ cơ sở và được ghi ở bit 23-30. 5. Phần định trị XXXX được ghi ở các bit 22-0.
  11. . Ghi chú: Việc cộng thêm giá trị 7FH ở phần mũ là nhằm đơn giản hoá thiết kế, giảm thiểu số transistor của bộ đồng xử lý toán.
  12. Ví dụ: Chuyển số 9,75 10 thành số dấu phẩy động chính xác đơn (số thực ngắn). Giải: . 9,75D=1001,11B= 1,00111E3 . Bit 31: =0 (Số dương) . Bit 30 - 23: 1000 0010 số mũ (3+7FH=82H) . Bit 22-0: 00111000000 0000 - Phần định trị. . Xếp cùng: 0100 0001 0001 1100 0000 0000 0000 0000 4 1 1 C 0 0 0 0 Kiểm tra lại bằng hợp ngữ
  13. Ví dụ: Chuyển số -96.27 10 thành số chính xác đơn FP. Giải: 96,27D =110.0000,0100.0101.0001.1110.1B =1,1000.0001.0001.0100.0111.101E6 Bit dấu :Bit 31 bằng 1 là số âm Số mũ :Các bit 30 - 23 bằng 1000.0101 (6+7HF=85H) Dưới dạng nhị phân và Hexa: 1100 0010 1100 0000 1000 1010 0011 1101 C 2 C 0 8 A 3 D
  14. Số dấu phẩy động IEEE chính xác kép . Số dấu phẩy động chính xác kép còn được gọi là số thực dài. . Biểu diễn số âm và dương trong dải 23x10 -308≤X≤đến 1,7x10 +308. . Tổng cộng 64 bit. . Bit 63: Bit dấu . Bit 62-52 (11 bit): Phần mũ . Bit 51-0 (52 bit): Phần định trị.
  15. 63 62 52 51 0 S Số mũ Phần định trị Khoảng giá trị: 2,23. 10 -308≤X≤ 1,79.10 308
  16. Chuyển sang dạng số chính xác kép . Các bước chuyển một số sang dạng số chính xác kép cũng tương tự như với số chính xác đơn. . Số thực được biểu diễn dưới dạng nhị phân khoa học 1.XXXXXXX E YYYY. . Số mũ YYYY được cộng thêm 3FFH để xác định số mũ cơ sở.
  17. Ví dụ: Chuyển đổi số 152.1875 10 thành số chính xác kép. Giải: 152.1875D=10011000.0011B=1.00110000 011E7 Bit 63=0 - Số dương Bit 62- 52=100.0000.0110 (7+3FFH=406H) Bit 51-0=00110000011000 000 0010 0000 0110 0011 0000 0110 0000 0000 0000 . . 4 0 6 3 0 6 0 0 0 . . Có thể kiểm tra lại bằng hợp ngữ
  18. Các dạng dữ liệu khác của 8087 . Số nguyên: Hỗ trợ các số 16, 32 và 64 bit, các số này tương ứng với số nguyên dạng từ, dạng ngắn và dạng dài. . Số thực: Bổ sung thêm 2 kiểu dữ liệu 80 bit, đó là số thập phân nén (Packed Decimal) và số thực tạm thời (Temporary Real). . Số thập phân nén có 18 số BCD chiếm 72 bít (18x4=72) từ bit 71-0. Bit 73-78=0. bit 79 chứa dấu. . Số thực tạm thời được 8087 sử dụng nội bộ.
  19. * Các dạng dữ liệu khác Độ dài Khoảng giá trị . Word integer 16 -32768 ≤ X ≤ +32768 . Short Integer 32 -2.109 ≤ X ≤ +2.10 9 . Long Integer 64 -9.1018 ≤ X ≤ +9.10 18 . Packed Decimal 80 -99 99 ≤ X ≤ +99 99 (18 số BCD) . Single Real 32 1.18.10 -38 ≤ X ≤ 3.40.10 38 . Double Real 64 2,23. 10 -308≤X≤ 1,79.10308 . Temporary Real 80 3,37.10- 4932≤X≤1,18.10 4932
  20. Số nguyên 15 0 S Độ lớn Số nguyên ngắn 31 0 S Độ lớn Số nguyên dài 63 62 0 S Phần định trị Số thập phân nén 79 78 72 71 0 S X Độ lớn D71-D0 Số thực ngắn 31 30 23 22 0 S Số mũ Phần định trị Số thực dài 63 62 52 51 0 S Số mũ Phần định trị Số thực tạm thời 79 78 64 63 62 0 S Số mũ I Phần định trị Hình 12.1 Các dạng dữ liệu của 80x87
  21. 3. lập trình với đồng xử lý toán . ở các máy 386 về trước, cần có các bộ ĐXL: 8087, 80287, 80387 hoặc tương đương. . Từ 486 về sau, ĐXL được tích hợp sẵn trong CPU. Với 486SX đòi hỏi có bộ đồng xử lý toán 487SX.
  22. Chỉ dẫn định nghĩa dạng dữ liệu của 8087 . DW (Define word - Số 16 bit). . DD (Define double word-32 bit) - từ kép, biểu diễn: . Số thực ngắn (độ chính xác đơn). . Số nguyên ngắn. . DQ (Define quad word-64 bit) – từ bốn, biểu diễn: . Số thực dài (độ chính xác kép). . Số nguyên dài. . DT (Define ten byte-80 bit) – byte mười, biểu diễn: . Số thập phân nén. . Số thực tạm thời.
  23. Thanh ghi đa năng 80x87 . 80x87 có 8 thanh ghi đa năng 80 bit. . Các thanh ghi làm việc như một ngăn xếp - theo nguyên tắc LIFO. . 8 thanh ghi được đánh số từ 0 tới 7. . Đỉnh ngăn xếp luôn ST(0). . Các thanh ghi còn lại được đánh số ứng với vị trí so với đỉnh ngăn xếp. . Dữ liệu nhập sẽ tự động chuyển sang dạng 80 bit.
  24. * Tổ chức thanh ghi của 8087 Trường dữ liệu Trường thẻ R0 79 78 64 63 0 R1 0 1 R2 S Luỹ thừa Định trị R3 R4 R5 R6 R7 Thanh ghi trạng thái và điều khiển 15 0 47 0 Thanh ghi điều khiển Con trỏ lệnh Thanh ghi trạng thái Con trỏ dữ liệu Từ thẻ
  25. Một số đặc điểm lập trình 1. Tên lệnh của 80x87 luôn bắt đầu bằng chữ F để phân biệt với các lệnh của bộ vi xử lý 80x86. 2. 8087 khởi tạo để đỉnh ngăn xếp luôn là thanh ghi số 7. 3. Thanh ghi ST(0) luôn trỏ đến đỉnh ngăn xếp. 4. ST(0) là đỉnh ngăn xếp, ST(1) là thanh ghi kế tiếp, ST(2) là thanh ghi thứ 3 kể từ thanh ghi ST
  26. * Ví dụ Viết chưươ ng trình cho 8087 nạp 3 giá trị X, Y và Z, tính tổng và cất kết quả.
  27. 000 001 010 011 100 101 ST(0) Z 110 ST(0) Y ST(1) Y 111 ST(0) X ST(1) X ST(2) X a) FINT b) FLD X c) FLD Y d) FLD Z Hình: Tổ chức thanh ghi dạng ngăn xếp
  28. 000 001 010 011 100 101 Z+Y ST(0) X+Y+Z ST(0) X+Y+Z ST(0) 110 Y ST(1) Y ST(1) Y ST(1) Y 111 X ST(2) X ST(0) X ST(2) X a) FADD b) FADD c) FST d) FSTP SUM ST(1) ST(2)=(STO+ST2 SUM ) Hình: Thứ tự thực hiện các lệnh
  29. Giải STACKSG SEGMENT DW 32DUP(?)(DANH KO GIAN NHO 32B) STACKSG ENDS DATASG SEGMENT ORG 00H X DD 9.75 DINH NGHIA CAC GIA TRI ORG 10H Y DD 13.09375 ORG 20H Z DD 29.0390625 ORG 30H SUM DD ? DATASG ENDS
  30. CODESG SEGMENT START PROC FAR ASSUME CS:CODESG, DS:DATASG, SS:STACKSG MOV AX,DATASG MOV DS,AX CALL CSUM GOI CT TINH TONG) MOV AH,4CH INT 21H START ENDP
  31. CSUM PROC NEAR FINT ;Khởi tạo ngăn xếp FLD X ;Nạp X vào ST (0) FLD Y ;Nạp Y vào ST (0) FLD Z ;Nạp Z vào ST (0) FADD ST(1) ;ST(0)=Y+Z FADD ST(2) ;ST(0)=X+(Y+Z) FST SUM ;Cất ST(0) vào Sum RET CSUM ENDP CODESG ANDS END START
  32. Ví dụ 2: Viết chương trình hợp ngữ cho 8087 tính diện tích hình tròn với bán kính R
  33. .8087 STACKSG SEGMENT DW 32 DUP (?) STACKSG ENDS DATASG SEGMENT ORG 00H R DD 91.67 ORG 10H AREA DD ? DATESG ENDS
  34. CODESG SEGMENT START PROC FAR ASSUME CS:CODESG.DS:DATASG.SS:STACKSG MOV AX,DATASG MOV DS,AX CALL CIRC_AREA MOV AH.4CH INT 21H START ENDP
  35. CIRC_AREA PROC NEAR FINT ;Khởi tạo 8087 FLD R ;Nạp bán kính FMUL ST(0),ST(0) ;RxR FLD PI ;Nạp số PI FMUL ST(0),ST(1) ;Nhân PI với R2 FSTP AREA ;Cất điện tích RET CIRC_AREA ENDP CODESG ENDS END STAR
  36. 4. Tổ chức Đồng xử lý toán 8087 * Tổ chức khối . Đơn vị điều khiển CU (Control Unit): • Điều khiển bus • Điều khiển đơn vị số học . Đơn vị số NU (Numerical Unit) • Thực hiện phép tính dấu phẩy động trong mạch tính luỹ thừa và mạch tính phần định trị • Có ngăn xếp các thanh ghi
  37. Từ điều Bộ điều Bộ tính Bộ tính khiển khiển luỹ định trị Từ trạng số thừa thái Bus dữ liệu Đệm dữ liệu Từ thẻ Thanh ghi Địa chỉ Điều khiển ngăn xếp /trạng thái bus Đơn vị điều khiển CU Đơn vị số học NU Hình 13.1 Sơ đồ khối đồng xử lý toán 8087
  38. * Tổ chức thanh ghi của 8087 Trường dữ liệu Trường thẻ R0 79 78 64 63 0 R1 0 1 R2 S Luỹ thừa Định trị R3 R4 R5 R6 R7 Thanh ghi trạng thái và điều khiển 15 0 47 0 Thanh ghi điều khiển Con trỏ lệnh Thanh ghi trạng thái Con trỏ dữ liệu Từ thẻ
  39. Thanh ghi đa năng 80x87 . 80x87 có 8 thanh ghi đa năng 80 bit. . Các thanh ghi làm việc như một ngăn xếp, nghĩa là theo nguyên tắc LIFO. . 8 thanh ghi được đánh số từ 0 tới 7. . Đỉnh ngăn xếp luôn ST(0). . Các thanh ghi còn lại được đánh số ứng với vị trí so với đỉnh ngăn xếp. . Dữ liệu nhập sẽ tự động chuyển sang dạng 80 bit.
  40. Thanh ghi từ thẻ . 8087 có 1 thanh ghi trạng thái gọi là thanh ghi từ thẻ (tag word). . Thanh ghi từ thẻ gồm các cặp bit Tag0 - Tag7 dùng để lưu trữ các thông tin liên quan đến nội dung của các thanh ghi R0- R7 nhằm cho phép thực hiện một số tác vụ nhanh hơn. . Mỗi thanh ghi từ thẻ có 2 bit xác định 4 giá trị của các thanh ghi Ri. . Tag = 00: Có giá trị xác định . Tag = 01: Zero . Tag = 10: Giá trị bất thường . Tag = 11: Rỗng
  41. Bố trí chân 8087 Vss 1 40 Vcc A14/D1 2 39 A15/D15 4 3 38 A16/S3 A13/D1 4 37 A17/S4 3 5 36 A18/S5 A12/D1 6 35 A19/S6 2 7 34 BHE/S7 A11/D1 8 33 RQ/GT1 1 9 32 INT A10/D1 10 808 31 RQ/GT0 0 11 7 30 NC A9/D9 12 29 NC A8/D8 13 28 S2 A7/D7 14 27 S1 A6/D6 15 26 S0 A5/D5 16 25 QS0 A4/D4 17 24 QS1 A3/D3 18 23 BUSY A2/D2 19 22 READY A1/D1 20 21 RESET A0/D0 NC NC CLK Vss
  42. 5. Nối ghép đồng xử lý toán trong máy tính XT * Đặc điểm . Cả VXL và ĐXL đều truy nhập cùng một bus địa chỉ, dữ liệu và điều khiển. . Giữa chúng luôn có trao đổi thông tin với nhau thông qua các bus cục bộ.
  43. * Tổ chức nối ghép 8088 và 8087 ở máy tính PC/XT RQ/GT0 INT Mạch NMI QS1 S0 5V S1 QS0 S2 BUSY Reset Ready AD0- Clk AD19 8087 Clk AEN Test QS0 QS1 S0 S0 INTA Clk CEN RQ/GT1 S1 S1 MEMR S2 S2 8288 MEMW DEN IOR 8088 DT/R IOW Clk NMI ALE AEN 8284A Ready Reset A0-A19 MN/MX C ADDRES AD0-AD7 74LS373 BUS A8-A19 OE INTR 8259 DIR INTA SP/EN C D0-D8 74LS245 DATA BUS D0-D7 AD0-AD7
  44. * Nối ghép 1.8088 đóng vai trò bộ vi xử lý chủ (host proccessor). 2.8088 và 8087 cùng nhận từ 8284 các tín hiệu: CLK, READY và RESET. Nhờ vậy luôn bảo đảm sự đồng bộ của hai bộ xử lý. 3.S0, S1 và S2 là các tín hiệu trạng thái được chuyển từ 8088 hoặc 8087 tới 8288.
  45. 4.Trạng thái hàng đợi QS1 và QS2 đượ c chuyển từ 8088 tới 8087 cho phép quản lý trạng thái hàng đợi của 8088. 5.Chân BUSY của 8087 đưượ c đưa đến bộ vi xử lý 8088 để thông báo cho 8088 biết đã kết thúc thực hiện một lệnh mà 8088 phải chờ trước đó. 6.Chân (Request/Grant) của 8088 được nối tới của 8087, cho phép chia quyền sử dụng bus.
  46. 7.8088 và đồng xử lý 8087 cùng sử dụng các bus AD0- AD7 và A8-A19 vì vậy chúng đều có thể truy nhập bộ nhớ. 8.INT của 8087 là chân ra để chỉ điều kiện lỗi (như chia cho 0). Nếu ứng với lỗi không che được thì 8087 sẽ tự động kích hoạt chân INT được nối với NMI của 8088.
  47. Ngắt từ 8087 SW2 của chuyển mạch 1 kiểm tra chẵn lẻ Kiểm tra cho phép I/0 từ NMI chân PB5 của 5 8255 8088 V D7 PRE Kiểm tra kênh D Yêu cầu WRT I/O từ khe cắm Q NMI qua cổng mở rộng địa chỉ A0H CLR Kiểm tra kênh Từ chân RESET I/O tới chân của CPU PC6 của 8255 Hình 6.10. Nguồn NMI của máyC tính PC/XT
  48. * Phối hợp giữa 8088-8087 . Bộ vi xử lý có một bản sao các lệnh được nạp trước trong bộ nhớ. . Tất cả các lệnh của 8087 đều có mã 9BH ở byte cao nên 8088 bỏ qua các lệnh này. . 8087 bỏ qua các lệnh không có mã 9BH. . 8088 sẽ không nhận thêm lệnh của 8087 cho tới khi nào 8087 chưa kết thúc lệnh hiện tại. . Chu kỳ bus của 8088 thường 4 chu kỳ đồng hồ, còn 8087 một số lệnh cần trên 100 chu kỳ.
  49. . Khi 8087 đang thực hiện một lệnh, nó sẽ tự động kích hoạt chân BUSY lên mức cao. Chân này được nối TEST của 8088. . Khi đó 8088 thực hiện lệnh chờ WAIT, đồng thời liên tục kiểm tra chân TEST để xem đã chuyển sang mức thấp chưa. . Khi 8087 kết thúc, nó chuyển chân READY xuống mức thấp xác định 8088 có thể chuyển lệnh tiếp theo tới 8087.