Phân loại kiến trúc bộ lệnh

Một phần của tài liệu giáo trình kiến trúc mạng máy tính (Trang 151)

Chương VI: Kiến trúc bộ lệnh

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ó.

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 trinh biên dịch

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

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 :

o thanh ghi-thanh ghi (kiểu này còn ựược gọi nạp - lưu trữ),

o thanh ghi - bộ nhớ (adsbygoogle = window.adsbygoogle || []).push({});

o 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.

Một phần của tài liệu giáo trình kiến trúc mạng máy tính (Trang 151)