kiến trúc máy tính Vũ Đức Lung phần 7 doc

13 371 1
kiến trúc máy tính Vũ Đức Lung phần 7 doc

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

Chương V: Mạch tuần tự 167 Từ yêu cầu của ví dụ ta xây dựng lược ñồ trạng thái của mạch. Theo ñề bài ta có 4 trạng thái là 11 100100, như vậy sẽ có 4 vòng tròn ñể biểu diễn 4 trạng thái này. Lược ñồ trạng thái của mạch như hình 5.10. Hình 5.10.Lược ñồ trạng thái mạch Trong lược ñồ này mỗi trạng thái biểu thị bằng một vòng tròn nhỏ với trạng thái ñược chỉ bên trong vòng tròn và các ñường dẫn trực tiếp nối các trạng thái chỉ cho biết hướng chuyển tiếp giữa các trạng thái. Trên mỗi ñường có mũi tên ñịnh hướng và trên ñó ghi giá trị của biến ñầu vào mạch x và biến ñầu ra y. Giá trị của hai biến này ñược cách nhau bởi dấu “/”. Ví dụ như nếu ta ñang ở trạng thái 11, và nếu tín hiệu ñầu vào là 0 (x=0) thì trạng thái sẽ không thay ñổi (ñường có mũi tên xuất phát từ nó và quay về chính nó) và ñầu ra y=0. Như vậy trên ñường mũi tên ta ghi 0/0 tức là x/y hay x=0 và y=0. Nếu tín hiệu vào x=1 thì trạng thái sẽ chuyển sang một trạng thái mới là 10 (mũi tên chỉ ñến trạng thái 10) và vì số bit của các flip-flop có giá trị bằng 1 là 2, tức là chẵn cho nên ñầu ra y=0 11 01 00 10 1/1 1/0 1/1 1/0 0/0 0/0 0/0 0/0 Chương V: Mạch tuần tự 168 => trên ñường chuyển trạng thái ta ghi 1/0. Ở ñây ta lưu ý là trạng thái mạch lật lề chỉ thay ñổi ở chuyển tiếp của xung ñồng hồ, nhưng trong khi lập luận ñể cho ñơn giản và ñỡ nhầm lẫn ta không ñề cập ñến nó. Bước 2: Từ lược ñồ trạng thái này ta sẽ xây dựng một bảng trạng thái . Theo yêu cầu dùng flip-flop SR, ma ta ñã biết mỗi flip-flop cho phép ta nhớ 1 bit. Vậy ở ñây ta có 4 trạng thái, do ñó cần có hai flip-flop ñể mã hóa chúng. Ta gọi 2 flip-flop ñó là A và B, và các ñầu vào của chúng tương ứng sẽ là S A , R A ,S B ,R B . Từ sơ ñồ khối mạch tuần tự hình 5.9, chúng ta cũng biết ñược ñầu ra của các flip- flop cũng chính là ñầu vào của mạch. Như vậy bảng trạng thái sẽ có 3 ñầu vào là A,B và x => có 2 3 =8 tổ hợp. Ngoài ra trong bảng trạng thái ta còn có một ñầu ra y. Các trạng thái của mạch ñược biểu hiện trong bảng 5.3. Dựa vào bảng trạn thái của mạch lật lề ở bảng 5.2 ta sẽ tìm ra các giá trị trong bảng 5.3. Ba cột ñầu tiên là giá trị nhập vào, do ñó ta chỉ cần ñiền các giá trị sao cho thể hiện tất cả các tổ hợp có thể có. ðể tránh nhầm lẫn ta ñiền theo thứ tự từ 000 001010… Xác ñịnh giá trị trong cột “trạng thái kế” Tiếp theo ñến cộ trạng thái kế, từ lược ñồ trạng thái ta có nếu ñang ở trạng thái 00 (AB=00) thì khi x =0 trạng thái sẽ không thay ñổi, do ñó ở hàng ñầu tiên A=0, B=0; ở hàng tiếp theo khi x=1 thì trạng thái sẽ thay ñổi từ 00 11 => A=1, B=1. Tương tự, ta sẽ có ñược giá trị cho tất cả các hàng ở cột trạng thái kế. Xác ñịnh các ngõ nhập vào các flip-flop Cũng dựa vào bảng trạng thái của flip-flop SR ta sẽ xác ñịnh ñược các giá trị của các cột còn lại. Chẳng hạn như ñối với flip-flop A, khi A chuyển từ 0 sang 0 thì S A =0, R A =x; khi A chuyển từ 0 sang 1 thì S A =1, R A =0;…. Chương V: Mạch tuần tự 169 Trạng thái hiện tại Nhập Trạng thái kế Ngõ nhập vào các flip-flop ðầu ra A B x A B S A R A S B R B y 0 0 0 0 0 0 x 0 x 0 0 0 1 1 1 1 0 1 0 0 0 1 0 0 1 0 x x 0 0 0 1 1 0 0 0 x 0 1 1 1 0 0 1 0 x 0 0 x 0 1 0 1 0 1 0 1 1 0 1 1 1 0 1 1 x 0 x 0 0 1 1 1 1 0 x 0 0 1 0 Bảng 5.3. Bảng trạng thái mạch tuần tự Bước 3: Từ bảng trạng thái 5.3 ta tìm hàm cho các ngõ nhập vào các flip-flop. Chú ý là các hàm tìm ñược phải là ngắn gọn nhất, ñể làm ñược việc ñó ta phải dùng bản ñồ Karnaugh ñể rút gọn chúng. Trước hết từ bảng 5.3 => bản ñồ Karnaugh cho ñầu vào S A như sau : Từ bản ñồ này ta suy ra => S A = xBA Tương tự như vậy cho các cổng còn lại, ta có bản ñồ Karnaugh cho R A : Bx A 00 01 11 10 0 1 1 x x x Chương V: Mạch tuần tự 170 ðối với flip-flop B ta có : Bản ñồ cho ñầu ra y : Từ bản ñồ này ta suy ra => xBABxAy += Phương trình nhập mạch lật Như vậy trong bước 3 này ta ñã tìm ra ñược hàm hay phương trình nhập cho các mạch flip-flop như sau: Bx A 00 01 11 10 0 1 1 1 Bx A 00 01 11 10 0 x 1 1 x 1 => R B = Bx Bx A 00 01 11 10 0 1 x 1 1 x => S B = xB Bx A 00 01 11 10 0 x x x 1 1 => R A = xBA Chương V: Mạch tuần tự 171 – S A = xBA – R A = xBA – S B = xB – R B = Bx Từ ví dụ này chúng ta thấy rằng phương trình nhập mạch lật là biểu thức Boolean của mạch tổ hợp. Bước 4: Bước này là ñơn giản nhất vì khi ñã có hàm Boolean rồi thì việc lựa chọn cổng và vẽ sơ ñồ mạch là hoàn toàn không khó khăn gì. Sơ ñồ mạch của mạch tuần tự cần thiết kế như hình 5.11. S C Q Q R S C Q Q R x A B A B Hình 5.11. Sơ ñồ mạch của ví dụ Clock y Chương V: Mạch tuần tự 172 Chú ý là khi vẽ mạch thì các ñầu vào lấy từ các ñầu ra nghịch ñảo của flip-flop phải ñược lấy từ ñầu ra Q của flip-flop tương ứng. Ví dụ R A = xBA thì ñầu B phải ñược lấy từ ñầu ra Q của flip-flop B chứ không ñược dùng ñầu ra Q của flip-flop B rồi cho qua một cổng inverter. Qua ví dụ trên cho ta các ñặc trưng của một mạch tuần tự như sau: - Lược ñồ trạng thái ñược biểu diễn bằng các vòng tròn, mỗi vòng tròn biểu diễn một trạng thái và chuyển tiếp giữa các trạng thái ñược ghi nhận bằng các ñường nối các vòng. Luợc ñồ trạng thái cung cấp cho ta các thông tin như bảng trạng thái nhưng một cách trực quan, rõ ràng và dễ hiểu hơn. - Số nhị phân trong mỗi vòng xác ñịnh trạng thái của các flip-flop. Trên các ñường nối ta ghi giá trị của biến nhập x và biến xuất y cách nhau bằng dấu số (/) bằng các con số nhị phân. Trị nhập trong trạng thái hiện tại ñược ghi trước và số sau dấu sổ là trị xuất trong trang thái hiện hành. Vi dụ ñường nối từ trạng thái 00 ñến 11 ghi 1/0 có nghĩa khi mạch tuần tự ở trạng thái hiện hành 00 và nhập là 1, xuất là 0. Sau một chuyển tiếp ñồng hồ, mạch ñến trạng thái kế 11. - Lược ñồ trạng thái cho một cái nhìn hình tượng các chuyển tiếp trạng thái và thích hợp cho mọi người khi diễn giải hoạt ñộng của mạch. - Mạch tuần tự ñược xác ñịnh qua bảng trạng thái liên kết các ngõ ra và trạng thái kế như là một hàm của các ngỏ nhập và trạng thái hiện hành sang trạng thái kế ñược kích hoạt bởi một tín hiệu ñồng hồ. Bảng trạng thái gồm bốn phần, trạng thái hiện hành, nhập, trạng thái kế và xuất. Phần trạng thái hiện hành cho thấy trạng thái của mạch lật A và B tại thời ñiểm t. Phần nhập là trị của x cho mỗi Chương V: Mạch tuần tự 173 trạng thái hiện hành. Phần trạng thái kế cho thấy trạng thái của mạch lật tại một chu kỳ sau ñó là thời ñiểm t+1. Phần xuất cho trị của y với mỗi trạng thái hiện hành và ñiều kiện nhập. - Lược ñồ trạng thái và bảng trạng thái ñề mô tả hoạt ñộng của mạch tuần tự. Có lược ñồ trạng thái thì ta có thể suy ra bảng trạng thái và ngược lại. Bài tập chương V 1. Hãy chứng minh rằng JK flip-flop có thể chuyển sang D flip-flop với một cổng ñảo ñặt giữa các ngõ nhập J và K 2. Thiết kế mạch tuần tự dùng mạch lật JK. Khi ngõ nhập x=0, trạng thái mạch lật không thay ñổi. Khi x=1, dãy trạng thái là 11,01,10,00 và lặp lại. 3. Một mạch tuần tự gồm 2 D flip-flop A và B , 2 ngõ nhập x,y một ngõ xuất z. Phương trình các ngõ nhập vào các flip-flop và ngõ xuất mạch như sau: D A = x y + xA D B = x B + xA Z = B a. Vẽ lược ñộ luận lý của mạch b. Lập bảng trạng thái. 4. Thiết kế mạch ñếm nhị phân 2-bit là một mạch tuần tự có ñồng hồ ñi qua một dãy trạng thái nhị phân 00, 01, 10, 11 và lặp lại khi ngõ nhập ngoài x có trị 1. Trạng thái mạch không ñổi khi x = 0. Chương V: Mạch tuần tự 174 5. Thiết kế mạch ñếm giảm 2 bit. ðây là mạch tuần tự có 2 flip-flop và 1 ngõ nhập x. Khi x=0, trạng thái mạch lật không ñổi. Khi x=1, dãy trạng thái là 11, 10, 01, 00 và lặp lại. 6. Thiết kế mạch tuần tự có 2 mạch lật JK, A và B và 2 ngõ vào E và x. Nếu E=0 mạch giữ nguyên trạng thái bất chấp x. Khi E=1 và x =1 mạch chuyển trạng thái từ 00 sang 01 sang 10 sang 11 về 00 và lặp lại. (ở ñây E-Enable giống như cổng ñiều khiển cho phép mạch hoạt ñộng hay không) 7. Thiết kế mạch tuần tự dùng mạch lật T. Khi ngõ nhập x=0, trạng thái mạch lật không thay ñổi. Khi x=1, dãy trạng thái là 00,10,01,11 và lặp lại. Chương VI: Kiến trúc bộ lệnh 175 Chương VI: Kiến trúc bộ lệnh Trong chương này chúng ta sẽ tập trung vào kiến trúc bộ lệnh của máy tính, giới thiệu các trường hợp khác nhau của các kiểu kiến trúc bộ lệnh. ðặc biệt trong chương này sẽ tập trung vào bốn chủ ñề chính. ðầu tiên là phân loại các kiểu kiến trúc bộ lệnh và ñánh giá những ưu khuyết ñiểm của chúng 6.1. Phân loại kiến trúc bộ lệnh Có ba loại kiến trúc bộ lệnh cơ bản: kiến trúc ngăn xếp (stack), kiến trúc thanh ghi tích lũy (Accumulator) và kiến trúc thanh ghi ña dụng GPRA(general-purpose register architecture). Trong ñó kiến trúc GPRA lại chia làm hai loại thông dụng là thanh ghi – bộ nhớ (register-memory) và nạp-lưu (load-store). Ví dụ phép tính C = A + B ñược dùng trong các kiểu kiến trúc trong hình 6.1. Hình 6.1. Thực hiện lệnh C = A + B cho 4 kiểu kiến trúc bộ lệnh Trong một câu lệnh thì chúng ta có các toán hạng, mà các toán hạng lại ñược chia thành hai loại: ẩn (implicitly) và hiện (explicitly): Toán hạng trong kiến trúc ngăn xếp là loại ẩn ở trên ñầu của ngăn xếp, kiến trúc thanh ghi tích lũy có một toán hạng ẩn ở trong accumulator, còn kiến trúc GPRA thì chỉ dùng toán hạng hiện, hoặc là thanh ghi hoặc là trên bộ nhớ. Toán hạng dạng hiện có thể truy cập trực tiếp từ bộ nhờ hoặc ñầu tiên ñược nạp vào thanh ghi tạm thời nào ñó phụ thuộc vào kiểu kiến trúc bộ lệnh ñặc trưng của nó. Chương VI: Kiến trúc bộ lệnh 176 Kiến trúc GPRA có một loại có thể truy cập trực tiếp vào bộ nhớ (register-memory); một loại có thể truy cập vào bộ nhớ nhưng phải nạp thông qua một register gọi là kiến trúc nạp-lưu (load- store) hay kiến trúc trên các thanh ghi (register-register); ngoài ra còn một kiểu kiến trúc GPRA nữa là kiến trúc bộ nhớ-bộ nhớ (memory-memory), nhưng kiểu này không còn thấy ngoài thị trường ngày nay nữa. Những máy tính ra ñời trước kia thường dùng kiểu kiến trúc ngăn xếp hoặc kiến trúc thanh ghi tích lũy, nhưng từ sau năm 1980 thì ñều dùng kiến trúc GPR. Hiện tại các nhà sản xuất máy tính có khuynh hướng dùng kiến trúc phần mềm thanh ghi ña dụng vì việc thâm nhập các thanh ghi ña dụng nhanh hơn thâm nhập bộ nhớ trong, và vì các chương trình dịch dùng các thanh ghi ña dụng có hiệu quả hơn. Bảng 6.1 cho ta thấy các ưu và nhược ñiểm của ba loại kiến trúc cơ bản này. Như vậy kiểu kiến trúc GPR ñược dùng ngày nay bởi các yếu tố sau: – Dùng thanh ghi, một dạng lưu trữ trong của CPU có tốc ñộ nhanh hơn bộ nhớ ngoài – Dùng thanh ghi thì dễ dàng cho trình biên dịch và có thể dùng hiệu quả hơn là bộ nhớ ngoài. Ví dụ biểu thức (A*B) + (C*D) – (E*F) có thể tính bằng cách nhân các phần trong ngoặc ở mọi thứ tự, và khi ứng dụng kỹ thuật pipeline, một kỹ thuật làm cho các giai ñoạn khác nhau của nhiều lệnh ñược thi hành cùng một lúc => sẽ hiệu quả hơn. Trong khi ñó nếu là kiến trúc stack thì biểu thức ñó chỉ có thể ñược tính tuần tự từ trái sang phải – Có thể dùng thanh ghi ñể lưu các biến và như vậy sẽ giảm thâm nhập ñến bộ nhớ => chương trình sẽ nhanh hơn Tuy nhiên do các lệnh ñều dùng thanh ghi vậy bao nhiêu thanh ghi là ñủ? câu trả lời phụ thuộc vào việc các thanh ghi ñược sử dụng bởi trình biên dịch như thế nào. Phần lớn trình biên dịch Chương VI: Kiến trúc bộ lệnh 177 dành riêng một vài thanh ghi cho tính toán một biểu thức, dùng vài thanh ghi ñể chuyển các thông số cần thiết và cho phép các thanh ghi còn lại lưu trữ các biến cần thiết. Loại kiến trúc Ưu ñiểm Nhược ñiểm Ngăn xếp (Stack) - Lệnh ngắn - Ít mã máy - Làm tối thiểu trạng thái bên trong của một máy tính - Dễ dàng tạo ra một bộ biên dịch ñơn giản cho kiến trúc ngăn xếp - Thâm nhập ngăn xếp không ngẫu nhiên. - Mã không hiệu quả - Khó dùng trong xử lý song song và ống dẫn - Khó tạo ra một bộ biên dịch tối ưu Thanh ghi tích luỹ (Accumulator Register) - Lệnh ngắn - Làm tối thiểu trạng thái bên trong của máy tính (yêu cầu ít mạch chức năng) - Thiết kế dễ dàng - Lưu giữ ở thanh ghi tích luỹ là tạm thời. - Nghẽn ở thanh ghi tích luỹ - Khó dùng trong xử lý song song và ống dẫn - Trao ñổi nhiều với bộ nhớ. Thanh ghi ña dụng (General Register) - Tốc ñộ xử lý nhanh, ñịnh vị ñơn giản. - Ít thâm nhập bộ nhớ. - Kiểu rất tổng quát ñể tạo các mã hữu hiệu - Lệnh dài - Số lượng thanh ghi bị giới hạn Bảng 6.1. So sánh các kiểu kiến trúc bộ lệnh Chương VI: Kiến trúc bộ lệnh 178  Kiểu kiến trúc thanh ghi ña dụng Do hiện nay kiểu kiến trúc thanh ghi ña dụng chiếm vị trí hàng ñầu nên trong các phần sau, ta chỉ ñề cập ñến kiểu kiến trúc này. ðối với một lệnh tính toán hoặc logic ñiển hình (lệnh ALU), có 2 ñiểm cần nêu: – Trước tiên, một lệnh ALU phải có 2 hoặc 3 toán hạng. Nếu trong lệnh có 3 toán hạng thì một trong các toán hạng chứa kết quả phép tính trên hai toán hạng kia (Ví dụ: ADD A, B, C). Nếu trong lệnh có 2 toán hạng thì một trong hai toán hạng phải vừa là toán hạng nguồn, vừa là toán hạng ñích (Ví dụ: ADD A, B). – Thứ hai, số lượng toán hạng bộ nhớ có trong lệnh. Số toán hạng bộ nhớ có thể thay ñổi từ 0 tới 3. Như ñã nêu ở trên, trong nhiều cách tổ hợp có thể có các loại toán hạng của một lệnh ALU, các máy tính hiện nay chọn một trong 3 kiểu sau : • thanh ghi-thanh ghi (kiểu này còn ñược gọi nạp - lưu trữ), • thanh ghi - bộ nhớ • bộ nhớ - bộ nhớ. Kiểu thanh ghi - thanh ghi ñược nhiều nhà chế tạo máy tính lưu ý với các lý do: việc tạo các mã máy ñơn giản, chiều dài mã máy cố ñịnh và số chu kỳ xung nhịp cần thiết cho việc thực hiện lệnh là cố ñịnh, ít thâm nhập bộ nhớ. Tuy nhiên, kiểu kiến trúc này cũng có một vài hạn chế của nó như: số lượng thanh ghi bị giới hạn, việc các thanh ghi có cùng ñộ dài dẫn ñến không hiệu quả trong các lệnh xử lý chuối cũng như các lệnh có cấu trúc. Việc lưu và phục hồi các trạng thái khi có các lời gọi thủ tục hay chuyển ñổi ngữ cảnh. Chương VI: Kiến trúc bộ lệnh 179 6.2. ðịa chỉ bộ nhớ Trong kiến trúc bộ lệnh bao giờ chúng ta cũng phải ñề cập ñến các toán hạng, mà một số toán hạng này ñược lưu trong bộ nhớ. Vậy cách tổ chức ñịa chỉ bộ nhớ ra sao là ñiều cần biết trước khi ñi vào nghiên cứu các bộ lệnh. Bộ nhớ (memory) là thành phần lưu trữ chương trình và dữ liệu trong máy tính mà trong chương 5 chúng ta ñã biết Bit là ðơn vị cơ bản của bộ nhớ. Ngoài ra chúng ta cũng ñã biết 1 bit có thể ñược tạo ra bằng 1 flip-flop. Nhưng cách bố trí các ô nhớ trong một bộ nhớ chung như thế nào? thứ tự sắp xếp của chúng ra sao? là ñiều chúng ta cần biết trong phần này. ðịa chỉ bộ nhớ - Bộ nhớ gồm một số ô (hoặc vị trí), mỗi ô (cell) có thể chứa một mẩu thông tin. Mỗi ô gắn một con số gọi là ñịa chỉ (address), qua ñó chương trình có thể tham chiếu nó. Giả sử bộ nhớ có n ô, chúng sẽ có ñịa chi từ 0 ñến n-1. Tất cả ô trong bộ nhớ ñều chứa cùng số bit. Trong trường hợp ô có k bit nó có khả năng chứa một trong số 2 k tổ hợp bit khác nhau. Trong một bộ nhớ thì các ô kế cận nhau sẽ có ñịa chỉ liên tiếp nhau. Ô là ñơn vị có thể lập ñịa chỉ nhỏ nhất và các hãng khác nhau dùng qui ñịnh số bit trong một ô cho từng loại máy tính của mình là khác nhau như IBM PC 8 bit/ô, DEC PDP-8 12bit/ô, IBM 1130 16 bit/ô,…Tuy nhiên trong những năm gần ñây, ña số các nhà sản xuất máy tính ñều dùng chuẩn hóa ô 8 bit, gọi là byte. Byte nhóm lại thành từ (word) và máy tính với từ 16 bit sẽ có 2 byte/từ, còn máy tính với 32 bit sẽ có 4 byte/từ. Hầu hết các lệnh ñược thực hiện trên toàn bộ từ. Vì vậy máy tính 16 bit sẽ có thanh ghi 16 bit và lệnh thao tác trên 1 từ 16 bit, còn máy 32 bit sẽ có thanh ghi 32 bit và các lệnh thao tác trên 1 từ 32 bit. Chương VI: Kiến trúc bộ lệnh 180 Sắp xếp thứ tự byte Có hai cách sắp xếp thứ tự byte trong một từ, ñánh số byte trong một từ từ trái sang phải và ñánh số byte trong một từ từ phải sang trái. Hình 6.2(a) cho thấy thứ tự byte trong bộ nhớ trên máy tính 32 bịt có số byte ñược ñánh số từ trái sang phải, như họ Motorola chẳng hạn. Hình 6.2(b) là một minh họa tương tự về máy tính 32 bit, ñánh số từ phải sang trái, ví dụ như họ Intel. Hệ thống trước kia bắt ñầu ñánh số từ ñầu lớn ñược gọi là máy tính ñầu lớn (Big endian), trái ngược với ñầu nhỏ (little endian). Hình 6.2. (a) Bộ nhớ ñầu lớn (họ Motorola), (b) Bộ nhớ ñầu nhỏ (họ Intel) Cần biết rằng trong hệ thống ñầu lớn lẫn ñầu nhỏ, số nguyên 32 bit với trị số là 6 sẽ ñược biểu diễn bằng bit 110 ở 3 bit bên góc phải của từ và 0 ở 29 bit bên góc trái. Trong lược ñồ ñầu lớn, những bit này nằm trong byte ñầu tiên bên phải, byte 3 (hoặc 7,11,…), trong khi ñó ở lược ñồ ñầu nhỏ, chúng ở trong byte 0 (hoặc 4,8,…). Trong cả hai trường hợp, từ chứa số nguyên có ñịa chỉ 0. ðiểm khác biệt này bên trong một máy tính là không có vấn ñề gì, nhưng khi kết nối chúng vào trong cùng một mạng và khi trao ñổi thông tin với nhau thì sẽ gặp nhiều vấn ñề trục trặc. Chương VI: Kiến trúc bộ lệnh 181 6.3. Mã hóa tập lệnh Một chương trình bao gồm một dãy các lệnh (hay còn gọi là chỉ thị), mỗi lệnh chỉ rõ một việc làm cụ thể nào ñó của máy tính như thực hiện phép cộng, thực hiện nhập dữ liệu, thực hiện ñọc dữ liệu từ bộ nhớ,… Như chúng ta ñã thấy ở trên, trong một câu lệnh gồm có nhiều phần. Trong ñó tác vụ thực hiện mỗi lệnh ñược chỉ rõ trong một trường gọi là mã phép toán (operation code) hay mã tác vụ và ñược gọi tắt là opcode, cho biết hành ñộng nào sẽ ñược thi hành (từ ñây trở ñi ta dùng cụm từ mã tác vụ). Trong một lệnh còn chỉ ra ñược thực hiện trên các thanh ghi hay ñịa chỉ (address) ô nhớ, nơi chứa ñựng dữ liệu cần xử lý. Trong hình 6.3 cho ta 3 trường hợp mã hóa lệnh ñơn giản là một số khuôn dạng ñiển hình của các bộ lệnh. Trường hợp thứ nhất chỉ có mã tác tụ mà không có phần ñịa chỉ. Trường hợp thứ hai mã một lệnh có 2 phần, phần tác vụ lệnh và ñịa chỉ và trường hợp thú 3 (c) thì phần ñịa chỉ chiếm 2 vùng của mã lệnh. Opcode (a) Opcode ðịa chỉ (b) Opcode ðịa chỉ 1 ðịa chỉ 2 Hình 6.3. Một vài dạng mã lệnh Tùy thuộc vào kiến trúc của máy tính, trong một loại máy tính mã lệnh có thể có cùng chiều dài hoặc khác nhau. Trên một số máy tính tất cả các lệnh ñều có cùng ñộ dài (Power PC, SPARC, MIPS), một số máy khác lại có thể có hai hoặc ba ñộ dài khác nhau (IBM 360/70, Intel 80x86), thậm chí ñộ dài mã lệnh có thể Chương VI: Kiến trúc bộ lệnh 182 thay ñổi tùy ý (VAX). Ngoài ra một lệnh có thể ngắn hơn, dài hơn hoặc bằng với ñộ dài một từ. 6.3.1. Các tiêu chuẩn thiết kế dạng thức lệnh Vì có thể có nhiều dạng khác nhau của các lệnh, cho nên khi thiết kế máy tính cần có các tiêu chí rõ ràng ñể lựa chọn dạng thức lệnh cho máy cần thiết kế. Một số các tiêu chí chính ñược các nhà thiết kế ñưa ra như sau:  Tiêu chuẩn thiết kế 1: Mã lệnh ngắn ưu việt hơn mã lệnh dài ðây là tiêu chuẩn ñầu tiên và cũng là quan trọng nhất. Một chương trình gồm n lệnh 16 bit chỉ chiếm chừng một nửa không gian bộ nhớ so với n lệnh 32 bit. Suy cho cùng, bộ nhớ không miễn phí, bởi vậy nhà thiết kế không thích lãng phí nó. Ngoài ra thì mỗi bộ nhớ có một tốc ñộ truyền cụ thế, ñược quyết ñịnh qua công nghệ và thiết kế kỹ thuật. Nếu tốc ñộ truyền của bộ nhớ là T bit/giây (bps - bit per second) và chiều dài lệnh trung bình là L thì nó có thể truyền ñi nhiều nhất là T/L lệnh trên một giây. Vì vậy, tốc thi hành lệnh (tức tốc ñộ bộ xử lý) tùy thuộc vào ñộ dài lệnh. Lệnh ngắn hơn ñồng nghĩa với bộ xử lý nhanh hơn. Nếu thời gian thi hành lệnh quá lâu so với thời gian tìm nạp nó từ bộ nhớ, thời gian tìm nạp lệnh sẽ không quan trọng. Nhưng với CPU nhanh, bộ nhớ thường là nút cổ chai. Bởi vậy, tăng số lệnh tìm nạp trên mỗi giây là tiêu chuẩn thiết kế quan trọng.  Tiêu chuẩn thiết kế thứ 2: ðộ dài mã lệnh ñủ ñế biểu diễn tất cả phép toán mong muốn Nếu chúng ta cần thiết kế một máy tính với 2 n các thao tác hay các vi tác vụ, thì ta không thể dùng mã hóa lệnh với ñộ dài nhỏ hơn n. ðơn giản không ñủ chỗ trong opcode ñế cho biết là lệnh nào hay mã hóa tất cả các lệnh ñó.  Tiêu chuẩn thiết kê thứ 3: ñộ dài word của máy bằng bội số nguyên của ñộ dài ký tự. Chương VI: Kiến trúc bộ lệnh 183 Trong trường hợp mà ký tự có k bit, ñộ dài từ phải là k, 2k, 3k, 4k,… còn không sẽ lãng phí không gian khi lưu trữ các từ. Tất nhiên có thế lưu trữ 3.5 ký tự trong một word, song việc ñó sẽ làm việc sẽ gây ra tình trạng kém hiệu quả nghiêm trọng trong khi truy cập các ký tự. Hạn chế do mã ký tự áp ñặt lên chiều dài từ cũng ảnh hưởng ñến chiều dài mã lệnh, bởi vì một lệnh tốt nhất là chiếm một số nguyên các byte hoặc số lệnh nguyên phải nằm gọn trong một từ.  Tiêu chuẩn thiết kế thứ 4: số BIT trong trường ñịa chỉ càng ngắn càng tốt Tiêu chuẩn này liên quan tới việc chọn kích thước ô nhớ. Cứ xem thiết kế máy với ký tự 8 bit (có thế 7 bit cộng tính chẵn lẻ) và bộ nhớ chính chứa 2 16 ký tự sẽ thấy. Nhà thiết kế có thể chọn gán ñịa chỉ liên tiếp cho ñơn vị 8, 16, 24, hoặc 32 bit, cùng những khả năng khác. Hãy hình dung chuyện gì sẽ xảy ra nếu ñội ngũ thiết kế phân hóa thành hai phe gây chiến, một phe dốc sức tạo byte 8 bit, ñơn vị cơ bản của bộ nhớ, còn phe kia ra sức tạo từ 32 bit như là ñơn vị cơ bản của bộ nhớ. Phe ñầu ñề nghị bộ nhớ 2 16 byte, ñược ñánh số 0, 1, 2, 3, , 65535. Phe sau ñề xuất bộ nhớ 2 14 từ, ñược ñánh số 0, 1, 2, 3 , 16383. Nhóm thứ nhất chỉ ra rằng ñế so sánh hai ký tự trong tổ chức từ 32 bit, chương trình chẳng những tìm nạp từ chứa ký tự mà còn phải trích từng ký tự trong từ mới so sánh ñược. Làm vậy sẽ tốn thêm lệnh và lãng phí không gian. Trái lại, tổ chức 8 bit cung cấp ñịa chi cho từng lệnh, giúp so sánh dễ dàng hơn nhiều. Phe ñề xuất 32 bit sẽ phản bác bằng lập luận rằng ñề xuất của họ chỉ cần 2 14 ñịa chỉ riêng biệt, cho ñộ dài ñịa chỉ 14 bit mà thôi, còn ñề nghị byte 8 bit ñòi hỏi 16 bit ñể lập ñịa chỉ cùng một bộ nhớ. ðịa chi ngắn hơn ñồng nghĩa với lệnh ngắn hơn, không những chiếm ít không gian mà còn ñòi hỏi ít thời gian tìm nạp hơn. Chương VI: Kiến trúc bộ lệnh 184 Hoặc có thể giữ nguyên ñịa chỉ 16 bit ñế tham chiếu bộ nhớ lớn gấp 4 lần mức cho phép của tổ chức 8 bit. Ví dụ này cho thấy rằng ñể ñạt sự phân giải bộ nhớ tốt hơn, người ta phảỉ trả cái giá bằng ñịa chỉ dài hơn, nói chung, có nghĩa là lệnh dài hơn. Mục tiêu tối thượng trong sự phân giải là tổ chức bộ nhớ có thế lập ñịa chỉ trực tiếp từng bit. Thực tế có những máy tính mà chiều dài word chỉ có 1 bit (ví dụ máy Burroughs B1700), lại có những máy mà word rất dài, tới 60 bit (như máy CDC Cyber) 6.3.2. Opcode mở rộng Trong phần này chúng ta xem xét những cân nhắc và thỏa hiệp liên quan ñến mã tác vụ - opcode và ñịa chỉ. Giả sử ta có lệnh (n+k) bit với opcode chiếm k bit và ñịa chỉ chiếm n bit. Lệnh này cung cấp 2 k phép toán khác nhau và 2 n ô nhớ lập ñịa chỉ ñược. Hoặc, cùng n + k bit ñó có thế chia thành opcode (k – 1) bit và ñịa chỉ (n+1) bit, tức chỉ một nửa số lệnh nhưng gấp ñôi bộ nhớ lập ñịa chỉ ñược, hoặc cũng dung lượng bộ nhớ ñó nhưng Opcode (k+1) bit và ñịa chỉ (n-1) bit cho nhiều phép toán hơn, song phải trả giá bằng số ô lập ñịa chỉ ñược ít hơn. Giữa bit opcode và bit ñịa chỉ có những quân bình rất tinh tế cũng như ñơn giản hơn như vừa trình bày. ðể hiểu rõ vấn ñề chúng ta xem ví dụ một máy tính có lệnh dài 16 bit, trong ñó mã vi tác vụ opcode dài 4 bit và 3 trường ñịa chỉ, mỗi trường dài 4 bit như hình 6.4. 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 Opcode ðịa chỉ 1 ðịa chỉ 2 ðịa chỉ 3 Hình 6.4. Lệnh có opcode 4 bit và 3 ñịa chỉ 4 bit Chương VI: Kiến trúc bộ lệnh 185 Như vậy, ứng với mã vi tác vụ 4 bit sẽ cung cấp cho ta 2 4 =16 lệnh khác nhau với 3 ñịa chỉ. Nhưng nếu nhà thiết kế cần 15 lệnh ba ñịa chỉ, hoặc 14 lệnh hai ñịa chỉ, hoặc 31 lệnh một ñịa chỉ thì họ sẽ phải lảm thế nào? ðối với trường hợp thứ nhất 15 lệnh ba ñịa chỉ thì nhà thiết kế có thể lấy nguyên cấu trúc trên hình 6.4, nhưng bỏ ñi một trường hợp của opcode như trong hình 6.5(a). Hình 6.5. Một số dạng thức lệnh cho 16 bit 1111 0000 yyyy zzzz 1111 0001 yyyy zzzz 1111 0010 yyyy zzzz . . . 1111 1011 yyyy zzzz 1111 1100 yyyy zzzz 1111 1101 yyyy zzzz 16 bit opcode 8 bit 14 lệnh 2 ñịa chỉ b) 0000 xxxx yyyy zzzz 0001 xxxx yyyy zzzz 0010 xxxx yyyy zzzz . . . 1100 xxxx yyyy zzzz 1101 xxxx yyyy zzzz 1110 xxxx yyyy zzzz 16 bit opcode 4 bit 15 lệnh 3 ñịa chỉ a) Chương VI: Kiến trúc bộ lệnh 186 Hình 6.5 (tiếp theo). Một số dạng thức lệnh cho 16 bit Tương tự ñể có 14 lệnh hai ñịa chỉ ta làm như hình 6.5(b) và 31 lệnh một ñịa chỉ như hình 6.7(c). Các bit cao nhất (bit 12 ñến 15) trong trường hợp b) ñược gán mặc ñịnh trị nhị phân “1”, bốn bit kế ñó (bit 8 ñến 11) sẽ mã hóa các tác vụ cần thiết. Vì 4 bit thì mã hóa ñược 16 tác vụ, nhưng trong trường hợp này ta chỉ cần 14 tác vụ, do ñó còn 2 vị trí không dùng ñến. Trong các trường hợp có tổ hợp code còn lại không dùng, như trong hình 6.5 (b) thì tổ hợp opcode 1111 1110 và 1111 1111 sẽ ñược xử lý ñặc biệt. Như vậy ñộ dài các lệnh là như nhau, ñều 16 bit, nhưng trong trường hợp a) thì ñộ dài opcode là 4, trường hợp b) là 8 trong khi trường hợp c) là 12 bit. 1111 1110 0000 zzzz 1111 1110 0001 zzzz . . 1111 1110 1110 zzzz 1111 1110 1111 zzzz 1111 1111 0000 zzzz 1111 1111 0001 zzzz . . 1111 1111 1101 zzzz 1111 1111 1110 zzzz 16 bit opcode 12 bit 31 lệnh 1 ñịa chỉ c) [...]... ng L nh qui ñ nh m t, hai hay ba ñ a ch ñ u ph bi n Trên nhi u máy tính phép tính s h c ñư c th c hi n v i m t ñ a ch duy nh t Có m t thanh ghi ñ c bi t g i là thanh b tích lu (accumulator) s cung c p m t trong các toán h ng, toán h ng còn l i s n m b nh Trên máy này, ñ a ch thư ng là ñ a ch c a t nh m, trong ñó ñ t toán h ng Trong ki n trúc GPR ch ñ l p ñ a ch c n ph i ch rõ ñó là m t h ng s , m t... v n thích h p (support) v i các ki u cũ • Displacement: ð a ch d ch chuy n (s tìm hi u k hơn ph n ti p theo sau) • Immediate: ñ a ch t c th i B ng 6.2 D ng th c l nh c a các máy tính Intel Hình 6 .7 cho ta th y d ng th c l nh c a máy Pentium v i các trư ng ñư c ñ nh nghĩa như sau : • PREFIX byte : ñó là ph n mã thêm c a mã l nh ñư c ñ t trư c opcode N u nó t n t i thì nó bao g m LOCK ti p ñ u t (prefix)... tránh ph i dùng opcode 2 byte C u trúc duy nh t trong trư ng opcode là s d ng bit th t th p trong m t s l nh ñ cho bi t byte/word, và bit bên c nh ñ ch ñ a ch b nh (n u có) là ngu n hay là ñích Ti p sau byte opcode trong nhi u l nh là byte th hai cho bi t v trí toán h ng, tương t như hai trư ng mode/register trong 1 87 188 Chương VI: Ki n trúc b l nh Chương VI: Ki n trúc b l nh hình 6.6 Do ch có s n... hình 6 .7 C u t o ph c t p c a Pentium là do nó ñư c k th a t nhi u th h trong m t kho ng th i gian dài và do ngay t ñ u vi c l a ch n các tính ch t ñã không ñư c thành công l m ði u này chính là do ñòi h i ph i k th a các ñ c tính ra trư c mà nó không th thay ñ i c u trúc c a mình Nói chung, ñ i v i l nh hai toán h ng, n u toán h ng này n m trong b nh thì toán h ng kia có th không n m trong b nh Do ñó... trong môi trư ng ña b x lý Trong khi repeat prefix ñ c trưng cho m t chu i phép toán ñư c l p ñi l p l i, ñi u này 189 190 Chương VI: Ki n trúc b l nh Chương VI: Ki n trúc b l nh 0-4 byte 1-2 0-1 0-1 0-4 0-4 Prefix Opcode ModR/M SIB Displacement Immediate 6 1 Scale 1 7 6 INSTRUCTION Index 5 4 Base 3 2 1 0 • • • • • • • ð a ch ð a ch ð a ch ð a ch ð a ch ð a ch ð a ch t c th i – Immediate tr c ti p – Direct... ng b ng 6.3 ch ra cách tính ñ a ch th c cho m i ch ñ l p ñ a ch và các ưu khuy t ñi m c a m i lo i byte/word hư ng ñi data Các ký hi u trong hình 6.8 và b ng 6.3: Mod Reg/Opcode 7 6 5 4 R/M 3 2 1 A – N i dung trong trư ng ñ a ch trong m t l nh 0 R – N i dung trong trư ng ñ a ch mà ch ra m t thanh ghi nào ñó EA – ð a ch th c c a nơi ch a (memory ho c register) toán h ng Hình 6 .7 Format l nh Pentium (X)... bit c a trư ng toán h ng ngu n (xem hình v 6.6) ð hi u rõ hơn các v n ñ trong mã hóa l nh, trong ph n này chúng ta s kh o sát d ng th c l nh trong các máy PDP-11 và Intel ñây chúng ta ñưa ra máy PDP-11 vì t p l nh c a nó ñư c xem là m t ñi n hình v tính ñơn gi n và h p lý PDP-11 ða s l nh hai toán h ng c a PDP-11 ñư c mã hóa như trong hình 6.6 M i l nh ch a opcode 4 bit và hai trư ng ñ a ch 6 bit M... ñích Destination operand byte/word Hình 6.6 Mã hóa l nh trên máy PDP-11 Các l nh có l p ñ a ch b nh trong PDP-11 s có thêm m t hay hai word 16 bit ñi theo sau l nh ñ a ch ñ ch ra các ñ a ch này H lntel 8088/80286/80386/Pentium V i CPU Intel, tình hình ph c t p hơn nhi u và kém ñ u ñ n hơn nhi u ð c bi t ñ i v i Pentium, mô hình chung như hình 6 .7 C u t o ph c t p c a Pentium là do nó ñư c k th a t nhi... bit n a ðôi khi 3 bit c a trư ng Reg/Opcode ñư c s d ng v i tính cách là ph n m r ng c a Opcode t o nên trư ng Opcode v i 11 bit Trư ng Mod ch có 2 bit, ñi u ñó có nghĩa là ch có 4 cách ti p c n v i toán h ng và m t trong các toán h ng luôn luôn ph i là thanh ghi • SIB : Cho phép ch ra m t s chi ti t k thu t thêm nh m m c ñích thêm vào m t s tính năng m i nhưng v n thích h p (support) v i các ki u cũ...Chương VI: Ki n trúc b l nh Chương VI: Ki n trúc b l nh 6.3.3 Ví d v d ng th c l nh ð i v i m t s l nh khác, k c l nh m t toán h ng, PDP11 áp d ng lư c ñ opcode m r ng, theo cách này thì các opcode có d ng x111 ñư c dùng ñ tránh kh . loại các kiểu kiến trúc bộ lệnh và ñánh giá những ưu khuyết ñiểm của chúng 6.1. Phân loại kiến trúc bộ lệnh Có ba loại kiến trúc bộ lệnh cơ bản: kiến trúc ngăn xếp (stack), kiến trúc thanh. Những máy tính ra ñời trước kia thường dùng kiểu kiến trúc ngăn xếp hoặc kiến trúc thanh ghi tích lũy, nhưng từ sau năm 1980 thì ñều dùng kiến trúc GPR. Hiện tại các nhà sản xuất máy tính có. kiểu kiến trúc bộ lệnh Chương VI: Kiến trúc bộ lệnh 178  Kiểu kiến trúc thanh ghi ña dụng Do hiện nay kiểu kiến trúc thanh ghi ña dụng chiếm vị trí hàng ñầu nên trong các phần

Ngày đăng: 23/07/2014, 23:20

Từ khóa liên quan

Tài liệu cùng người dùng

Tài liệu liên quan