CHƯƠNG I: KIẾN TRÚC CISC VÀ RISC31.1. Kiến trúc CISC31.2. Kiến trúc RISC31.3. So sánh giữa CISC và RISC4CHƯƠNG II: KIẾN TRÚC MIPS62.1. Giới thiệu về MIPS:62.2. Các thành phần cơ bản của kiến trúc MIPS:62.3. Tập các thanh ghi trong kiến trúc MIPS:82.3.1. Thanh ghi CPU82.3.1.1. Tập thanh ghi MIPS (32 thanh ghi)82.3.1.2. Thanh ghi đặc biệt (2 thanh ghi)102.3.1.3. Thanh ghi chương trình(PC)102.3.1.4. Các thanh ghi lệnh102.3.2. Thanh ghi FPU112.3.2.1. Dữ liệu trong thanh ghi FPU112.3.2.2. Các thanh ghi đa năng122.3.2.3. Các thanh ghi điều khiển132.4. Bộ nhớ132.5. Kiểu dữ liệu và cách thức đánh địa chỉ142.5.1. Kiểu dữ liệu:142.5.2. Cách thức đánh địa chỉ:15CHƯƠNG III: TẬP LỆNH TRONG MIPS173.1. Nguyên tắc thiết kế tập lệnh MIPS183.2. Các cấu trúc lệnh trong MIPS183.2.1. Cấu trúc lệnh RFormat (Register)183.2.2. Cấu trúc IFormat (Immediate)193.2.3. Cấu trúc JFormat (Jump)203.3. Các lệnh cơ bản trong kiến trúc MIPS203.3.1. Các lệnh nạpghi (loadstore)203.3.1.1. Các lệnh nạp (Load)213.3.1.2. Các lệnh ghi (Store)213.3.2. Các lệnh số học, logic và lệnh dịch223.3.2.1. Lệnh số học223.3.3.2. Các lệnh logic233.3.2.3. Các lệnh dịch243.3.3. Các lệnh nhảy và rẽ nhánh253.3.3.1. Các lệnh rẽ nhánh253.3.3.2. Các lệnh nhảy263.3.4. Các lệnh di chuyển dữ liệu263.3.5. Làm việc với Stack273.3.6. Làm việc với thủ tục273.4. Xây dựng chương trình hợp ngữ MIPS283.4.1. Cấu trúc chương trình hợp ngữ MIPS283.4.2. Giới thiệu chương trình MARS29CHƯƠNG IV: KỸ THUẬT PIPELINE TRONG KIẾN TRÚC MIPS304.1. Ứng dụng của kỹ thuật Pipeline trong các vi xử lý hiện đại304.2. Kỹ thuật Pipeline trong kiến trúc MIPS314.2.1. Việc triển khai Pipeline trong MIPS là dễ dàng314.2.2. Mô hình Pipeline trong MIPS32
Trang 1TRƯỜNG ĐẠI HỌC HÀNG HẢI VIỆT NAM
Nhóm 01 : Lê Hoàng Dương
Lê Quyết Tiến Đặng Trung Hiếu Nguyễn Hoàng Thùy Trang Bùi Thị Hương
Trang 2Hải Phòng, tháng 5 năm 2014
CHƯƠNG I: KIẾN TRÚC CISC VÀ RISC 4
1.1 Kiến trúc CISC 4
1.2 Kiến trúc RISC 4
1.3 So sánh giữa CISC và RISC 5
CHƯƠNG II: KIẾN TRÚC MIPS 7
2.1 Giới thiệu về MIPS: 7
2.2 Các thành phần cơ bản của kiến trúc MIPS: 7
2.3 Tập các thanh ghi trong kiến trúc MIPS: 9
2.3.1 Thanh ghi CPU 9
2.3.1.1 Tập thanh ghi MIPS (32 thanh ghi) 9
2.3.1.2 Thanh ghi đặc biệt (2 thanh ghi) 10
2.3.1.3 Thanh ghi chương trình(PC) 11
2.3.1.4 Các thanh ghi lệnh 11
2.3.2 Thanh ghi FPU 11
2.3.2.1 Dữ liệu trong thanh ghi FPU 11
2.3.2.2 Các thanh ghi đa năng 12
2.3.2.3 Các thanh ghi điều khiển 13
2.4 Bộ nhớ 14
2.5 Kiểu dữ liệu và cách thức đánh địa chỉ 14
2.5.1 Kiểu dữ liệu: 14
2.5.2 Cách thức đánh địa chỉ: 16
CHƯƠNG III: TẬP LỆNH TRONG MIPS 18
3.1 Nguyên tắc thiết kế tập lệnh MIPS 18
3.2 Các cấu trúc lệnh trong MIPS 18
3.2.1 Cấu trúc lệnh R-Format (Register) 18
3.2.2 Cấu trúc I-Format (Immediate) 19
3.2.3 Cấu trúc J-Format (Jump) 20
3.3 Các lệnh cơ bản trong kiến trúc MIPS 20
3.3.1 Các lệnh nạp/ghi (load/store) 20
3.3.1.1 Các lệnh nạp (Load) 21
3.3.1.2 Các lệnh ghi (Store) 21
3.3.2 Các lệnh số học, logic và lệnh dịch 22
3.3.2.1 Lệnh số học 22
3.3.3.2 Các lệnh logic 23
3.3.2.3 Các lệnh dịch 24
Trang 33.3.3.1 Các lệnh rẽ nhánh 25
3.3.3.2 Các lệnh nhảy 26
3.3.4 Các lệnh di chuyển dữ liệu 26
3.3.5 Làm việc với Stack 27
3.3.6 Làm việc với thủ tục 27
3.4 Xây dựng chương trình hợp ngữ MIPS 28
3.4.1 Cấu trúc chương trình hợp ngữ MIPS 28
3.4.2 Giới thiệu chương trình MARS 28
CHƯƠNG IV: KỸ THUẬT PIPELINE TRONG KIẾN TRÚC MIPS 30
4.1 Ứng dụng của kỹ thuật Pipeline trong các vi xử lý hiện đại 30
4.2 Kỹ thuật Pipeline trong kiến trúc MIPS 31
4.2.1 Việc triển khai Pipeline trong MIPS là dễ dàng 31
4.2.2 Mô hình Pipeline trong MIPS 31
Trang 4CHƯƠNG I: KIẾN TRÚC CISC VÀ RISC 1.1 Kiến trúc CISC
CISC (Complex Instruction Set Computer) - Kiến trúc với tập lệnh phức tạp được
nghĩ ra từ những năm 1960 Vào thời kỳ này, người ta nhận thấy các chương trình dịchkhó dùng các thanh ghi, và các vi lệnh thì được thực hiện nhanh hơn các lệnh đồng thời
phải làm giảm độ dài các chương trình Các đặc tính này khiến người ta ưu tiên chọn các kiểu ô nhớ - ô nhớ và ô nhớ - thanh ghi, với những lệnh phức tạp và dùng nhiều kiểu định
vị Điều này dẫn tới việc các lệnh có chiều dài thay đổi và như thế thì dùng bộ điều khiển
vi chương trình (Microprogramme) là hiệu quả nhất
Một số đặc điểm của kiến trúc CISC:
- Lệnh có độ dài thay đổi, phức tạp, có thể bao gồm một vài phép toán nhỏ, tuynhiên lệnh của CISC gần với ngôn ngữ lập trình bậc cao
- Có nhiều chế độ địa chỉ phức tạp
- Hỗ trợ các loại dữ liệu phức tạp
- Một lệnh có thể được thực hiện trên nhiều chu kỳ
- Sử dụng kỹ thuật điều khiển vi chương trình
Hình 1.1 Thông số một vài máy CISC
1.2 Kiến trúc RISC
RISC (Reduce Instruction Set Computer) là một dạng của kiến trúc vi xử lý,
trong đó phương pháp thiết kế các bộ vi xử lý theo hướng đơn giản hóa tập lệnh, thời
gian thực thi tất cả các tập lệnh đều như nhau Đầu tiên, các dự án về RICS được bắt đầu
từ IBM, Stanford và UC Berkeley vào cuối những năm 70 đầu những năm 80 Hiện nay,
Trang 5các bộ vi xử lý phổ biến là ARM, SuperH, MIPS, SPARC, DEC Alpha, PA-RICS, PIC
và PowerPC của IBM
Một số đặc điểm của kiến trúc RISC:
- Một lệnh thực thi trong 1 chu kỳ
- Định dạng lệnh đơn giản, độ dài lệnh cố định nên dễ giải mã lệnh
- Các thanh ghi chung mục đích có thể sử dụng trong nhiều ngữ cảnh nên dễ thiết kếphần mềm biên dịch
- Chế độ địa chỉ đơn giản, các chế độ địa chỉ phức tạp được thực hiện thông quachuỗi lệnh số học và lệnh nạp/ghi
- Thuận tiện cho việc thiết kế song song
- Chú trọng các thao tác với thanh ghi
Cách thực hiện lệnh Thanh ghi-thanh ghi Thanh ghi-thanh ghi Thanh ghi-thanh ghi
Hình 1.1 Thông số một vài máy RISC
1.3 So sánh giữa CISC và RISC
Ưu điểm - Diện tích của bộ xử lý dùng cho
bộ điều khiển giảm từ 60% (chocác bộ xử lý CISC) xuống còn10% (cho các bộ xử lý RISC)
Như vậy có thể tích hợp thêm vàobên trong bộ xử lý các thanh ghi,các cổng vào ra và bộ nhớ cache
- Tốc độ tính toán cao nhờ vàoviệc giải mã lệnh đơn giản, nhờ cónhiều thanh ghi (ít thâm nhập bộnhớ), và nhờ thực hiện kỹ thuậtống dẫn liên tục và có hiệu quả
- Chương trình ngắn hơn so với kiếntrúc RISC
- Số lệnh để thực hiện chương trình íthơn Khả năng thâm nhập bộ nhớ dễdàng hơn
- Các bộ xử lý CISC trợ giúp mạnhhơn các ngôn ngữ cao cấp nhờ có tậplệnh phức tạp
Trang 6(các lệnh đều có thời gian thựchiện giống nhau và có cùng dạng).
- Thời gian cần thiết để thiết kế bộđiều khiển là ít Điều này gópphần làm giảm chi phí thiết kế
- Bộ điều khiển trở nên đơn giản
và gọn làm cho ít rủi ro mắc phảisai sót mà ta gặp thường trong bộđiều khiển
Nhược
điểm
Các chương trình dài ra so vớichương trình viết cho bộ xử lýCISC Điều này do các nguyênnhân sau :
- Cấm thâm nhập bộ nhớ đối vớitất cả các lệnh ngoại trừ các lệnhđọc và ghi vào bộ nhớ Do đó tabuộc phải dùng nhiều lệnh để làmmột công việc nhất định
- Cần thiết phải tính các địa chỉhiệu dụng vì không có nhiều cáchđịnh vị
- Tập lệnh có ít lệnh nên các lệnhkhông có sẵn phải được thay thếbằng một chuỗi lệnh của bộ xử lýRISC
- Các chương trình dịch gặp nhiềukhó khăn vì có ít lệnh làm cho có
ít lựa chọn để diễn dịch các cấutrúc của chương trình gốc Sựcứng nhắc của kỹ thuật ống dẫncũng gây khó khăn
- Có ít lệnh trợ giúp cho ngôn ngữcấp cao
- Diện tích của bộ xử lý dùng cho bộđiều khiển lớn Giảm khả năng tíchhợp thêm vào vi xử lý
- Tốc độ tính toán còn chậm Thờigian xây dựng xong bộ vi xử lý là lâuhơn do các câu lệnh phức tạp nên khảnăng xảy ra rủi ro nhiều
CHƯƠNG II: KIẾN TRÚC MIPS 2.1 Giới thiệu về MIPS:
MIPS - Microprocessor without Interlocked Pipeline Stages: là một kiến trúc xử
lý kiểu RISC được phát triển bởi công ty MIPS technologies Các bộ xử lý MIPS được
phát triển như là một phần của chương trình nghiên cứu VLSI ở trường đại học Stanford
Trang 7máy tính MIPS sau khi nhận ra nhu cầu thương mại tương lai của thiết kế Phiên bảnMIPS R2000 đầu tiên ra đời năm 1985, sau đó là phiên bản MIPS R3000 năm 1988
Kiến trúc MIPS là kiến trúc các thanh ghi Tất cả các phép toán số học và logicđều chỉ xoay quanh thanh ghi (hay các hằng số được lưu trữ như là một thành phần củalệnh) Kiến trúc MIPS cũng bao gồm một số các câu lệnh đơn giản dùng để đọc dữ liệu từ
bộ nhớ vào thanh ghi và ghi dữ liệu từ thanh ghi sang bộ nhớ Vì vậy kiến trúc MIPS
được gọi là kiến trúc nap/lưu trữ,trong kiến trúc nạp/lưu trữ chỉ có những câu lệnh có thể truy cập vào bộ nhớ là các câu lệnh nạp/lưu trữ còn các câu lệnh khác chỉ có thể truy cập tới thanh ghi.
Kiến trúc tập lệnh MIPS (ISA) được phát triển từ kiến trúc tập lệnh MIPS I đếnkiến trúc tập lệnh MIPS V Vào cuối những năm 1990, kiến trúc MIPS đã được thiết kếxung quanh hai kiến trúc cơ bản sau:
MIPS32 cho kiến trúc 32-bit Kiến trúc MIPS-32bit dựa vào tập lệnh MIPS II ISAvới một vài lệnh được thêm vào từ tập lệnh MIPS III đến tập lệnh MIPS V ISA
MIPS64 cho kiến trúc 64-bit , kiến trúc MIPS-64bit thì dựa vào tập lệnh của MIPS
V ISA
Ngày này, kiến trúc MIPS được sử dụng rộng dãi trong các hệ thống nhúng nhưSeries2 TiVo, các thiết bị Window CE, các bộ định tuyến Cisco, các thiết bị chơi gamenhư Nitendo 64, Sony PlayStation MIPS được thiết kế một bộ tập lệnh đơn giản dễ hiểunên việc nghiên cứu kiến trúc MIPS rất hữu ích cho việc nghiên cứu về kiến trúc máytính
2.2 Các thành phần cơ bản của kiến trúc MIPS:
Kiến trúc MIPS bao gồm các thành phần sau:
MIPS instruction set architecture (ISA) - Kiến trúc tập lệnh MIPS: Định nghĩa
một tập các câu lệnh 32bit và 64 bit để đảm bảo tương thích với mọi bộ xử lý ápdụng kiến trúc MIPS Tập lệnh MIPS bao gồm tổng cộng 111 câu lệnh ở hệ 32 bit,
ví dụ như một câu lệnh MIPS dưới đây:
MIPS privileged resource architecture(PRA)-Kiến trúc tài nguyên phân quyền:
Đưa ra một tập các môi trường đảm bảo cho ISA hoạt động PRA cung cấp các cơchế cần thiết để quản lý các tài nguyên của bộ xử lý: bộ nhớ ảo, cache, các ngoạilệ…
MIPS application specific extension(ASE)-Các thành phần mở rộng tùy chọn cho ứng dụng: Cung cấp các chức năng nâng cao được thiết kế riêng biệt cho các
chức năng khác nhau
Trang 8 MIPS user defined instruction (UDI)-Câu lệnh được người dùng định nghĩa:
Đây là các câu lệnh đặc biệt cho các ứng dụng khác nhau với các mục đích khácnhau khi một bộ xử lý áp dụng kiến trúc MIPS
Trên thực tế máy tính làm việc thông qua việc lấy lệnh ngôn ngữ máy từ bộ nhớ, giải mã
và tính toán chúng Ngôn ngữ máy và các giá trị sẽ được tính toán và mã hóa thành mãnhị phân Máy tính chỉ làm việc với các giá trị nhị phân, để thực hiện xây dựng một kiếntrúc máy tính sử dụng kiến trúc MIPS thì các thành phần cơ bản phải bao gồm là:
o Program counter (PC): con trỏ chương trình
o Memory : Bộ nhớ
o Instruction Register: tập các thanh ghi lệnh
o Register File: tập các thanh ghi
o ALU: Khối đơn vị số học và logic
o CU: khối đợn vị kiểm soát
Tất cả các thành phần ngoại trừ CU, thì đều được kết nối với nhau bằng Bus Hầu hết cácbus của kiến trúc Mips đều có kích thước 32-bits Dưới đây là một minh họa về thànhphần và đường đi của dữ liệu trong kiến trúc MIPS Ngày nay việc cài đặt theo kỹ thuậtđường ống (Pipeline) và siêu vô hướng (Superscalar) là chung nhất cho các bộ xử lý hiệunăng cao
Hình 2.1 Thành phần và đường đi dữ liệu trong kiến trúc MIPS
2.3 Tập các thanh ghi trong kiến trúc MIPS:
Kiến trúc MIPS cung cấp một tập hợp gồm các thanh ghi chung, các thanh ghi dấuphẩy động FPU, thanh ghi chương trình (hay còn được gọi là con trỏ chương trình PC),
và các thanh ghi đặc biệt HI, LO Kích thước của thanh ghi trong kiến trúc MIPS có thể
là 32 bits ứng với MIPS32 hoặc 64 bits ứng với MIPS 64
Trang 9Hình 2.2 Mô tả thành phần thanh ghi trong MIPS R2000
2.3.1 Thanh ghi CPU
2.3.1.1 Tập thanh ghi MIPS (32 thanh ghi)
$at $1 Reserved for assembler Asembler Temporary
$v0-$v1 $2-$3 Expression evaluation
and results of a function Giá trị trả lại của hàm hoặc biểu thức
$a0-$a3 $4-$7 Argument Các tham số của hàm
preserved across call) Thanh ghi tạm
$k0-$k1 $26-$27 Reserved for OS kernel Dự trữ cho nhân OS
$gp $28 Pointer to global area Con trỏ toàn cục
Trang 10$ra $31 Return address (used by
function call) Địa chỉ trả về
- Thanh ghi zero( có tên là $zero:) chứa giá trị 0, không có một giá trị nào được ghi vào
thanh ghi zero
- Thanh ghi 1( có tên là $at): được gọi cho hợp ngữ tạm thời, thanh ghi này dành cho
tính toán các lệnh marco, và không nên được sử dụng cho các chương trình hợp ngữ
- Các thanh ghi $k0 và $k1: được sử dụng bởi các nhân( kernel) của hệ điều hành, và
không nên bị thay đổi bởi chương trình người dùng
- Thanh ghi cuối cùng $31 ($ra): được sử dụng giống như là một thanh ghi liên kết bởi
lệnh nhảy và lệnh liên kết, cái mà sẽ được sử dụng để gọi một thủ tục Thanh ghi $31được sử dụng để ghi nhớ địa chỉ trả về của một thủ tục được gọi
- Các thanh ghi $v0 và $v1: dùng để lưu trữ giá trị trả về của hàm.
- Các thanh ghi $t0-$t9: là các thanh ghi có nhớ lời gọi, dùng cho các giá trị tạm thời mà
không cần phải nhớ mỗi khi có lời gọi
- Các thanh ghi $s0-$s7: là các thanh ghi có nhớ lời gọi, dùng cho các giá trị không thay
đổi mỗi khi có lời gọi
- Thanh ghi $sp: là con trỏ stack, trỏ tới đỉnh của một stack.
- Thanh ghi $rp: là con trỏ frame.
- Thanh ghi $ra: ghi lại địa chỉ trả về mỗi khi có lời gọi hàm.
- Thanh ghi $gp: là con trỏ toàn cục trỏ tới vị trí giữa của khối bộ nhớ 64K vùng heap,
nơi chứa các biến và hằng số toàn cục
2.3.1.2 Thanh ghi đặc biệt (2 thanh ghi)
Hai thanh ghi đặc biệt được gọi là thanh ghi HI và thanh ghi LO, chúng được sửdụng để kiểm soát kết quả của một lệnh thực hiện nhân hoặc chia số nguyên Thao tácnhân của MIPS có kết quả chứa trong 2 thanh ghi HI và LO Bit 0-31 thuộc LO và 32-63thuộc HI
Trang 112.3.1.3 Thanh ghi chương trình(PC)
Sau khi một chương trình được viết như là một chương trình bằng ngôn ngữ hợpngữ sử dụng một trình tạo văn bản, chương trình được chuyển thành mã máy bằng mộtchương trình sử dụng gọi một trình biên dịch hợp ngữ Mã của ngôn ngữ máy được ghivào một file trên đĩa Khi mà một người muốn thực hiện chương trình này, một chươngtrình sử dụng khác, gọi một đường dẫn nạp chương trình, sẽ nạp và liên kết với tất cả cáckhối ngôn ngữ máy cần thiết bên trong bộ nhớ chính Các lệnh riêng biệt sẽ được ghi nhớ
tuần tự vào bộ nhớ Con trỏ chương trình( PC) là một thanh ghi được khởi tạo bởi hệ điều hành đến địa chỉ của lệnh đầu tiên của chương trình trong bộ nhớ Chú ý rằng địa chỉ trong con trỏ chương trình được gửi đến đầu vào địa chỉ của bộ nhớ thông qua một bus Sau khi một lệnh được lấy từ bộ nhớ và được nạp vào thanh ghi lệnh( IR) con trỏ PC sẽ được tăng để CPU có được địa chỉ cho lệnh tuần tự tiếp theo cho quá trình lấy lệnh.
2.3.1.4 Các thanh ghi lệnh
Thanh ghi lệnh IR là thanh ghi 32-bits dùng để nắm bản sao chép của lệnh đượcgọi đến gần đây nhất Trong kiến trúc MIPS thì có 3 định dạng lệnh khác nhau được địnhnghĩa: định dạng R, định dạng I và định dạng J
2.3.2 Thanh ghi FPU
Kiến trúc MIPS đưa ra các thanh ghi FPU sau:
32 thanh ghi dấu chấm phẩy động Các thanh ghi này có độ dài 32-bit nếu là bộFPU 32-bit hoặc 64 bit nếu là bộ FPU 64-bit
5 thanh ghi điều khiển FPU dùng để nhận diện và quản lý FPU
8 bộ mã điểu khiển số dấu chấm động là các thành phần của thanh ghi FCSR,FPcontrol/status register
2.3.2.1 Dữ liệu trong thanh ghi FPU
FPU hỗ trợ hai dạng dữ liệu: số dấu chấm động và số dấu chấm tĩnh:
- Số dấu chấm động độ chính xác đơn và kép được định nghĩa theo chuẩn IEEE.
- Số dấu chấm tĩnh là các số nguyên có dấu hỗ trợ bởi kiến trúc CPU.
Các dạng số dấu chấm động được cung cấp bởi FPU là:
- Số dấu chấm động chính xác đơn 32-bits (kiểu S):
- Số dấu chấm động với độ chính xác kép (kiểu D) 64-bits:
Trang 121bit 11 bit 52 bit
- Số dấu chấm động đơn kẹp đôi (kiểu PS) 64-bits:
Các định dạng số dấu chấm tĩnh hỗ trợ bởi FPU:
- Kiểu Word 32-bits:
2.3.2.2 Các thanh ghi đa năng
Trong phiên bản 1 của kiến trúc số dấu chấm động chỉ có trong kiến trúc MIPS64nhưng ở phiên bản 2 thì chúng được hỗ trợ trong cả kiến trúc MIPS32
FPU 32-bits có 32 thanh ghi 32-bits FPRs, mỗi thanh chứa một kiểu dữ liệu 32bits Kiểu xác định kép (Double-pricesion-kiểu D) được lưu trữ trong các cặp thanh ghichẵn, lẻ của FPRs, còn số nguyên dài (kiểu L) và kiểu Paired single (kiểu PS) thì khôngđược hỗ trợ
FPU 64-bits có 32 thanh ghi 64 bits số dấu chấm động, mỗi thanh ghi có thể chứamọi kiểu dữ liệu Để tương thích với FPU 32-bits, bit FR trong thanh ghi CP0 Statusđược sử dụng trong MIPS64 phiên bản 1 hoặc bất kỳ bộ xử lý phiên bản 2 nào hỗ trợFPU 64-bits để điểu chỉnh FPU sang trạng thái mà các thanh ghi FPRs được coi như cácthanh ghi 32 bits, và sẽ lưu trữ các kiểu dữ liệu giống FPRs 32-bits
o FR =0 : chế độ 64-bits
o FR =1 : chế độ 32-bits Khi đó chỉ 32 bits đầu được sử dụng, 32 bits saukhông dùng
Trang 13Hình 2.3 Thanh ghi đa năng
2.3.2.3 Các thanh ghi điều khiển
Có 5 thanh ghi điều khiển trong kiến trúc MIPS:
- FIR,FP Implementation and Revision Register
- FCCR, FP condition codes Register
- FEXR, FP Exception Register
- FENR, FP Enables Register
là nơi mà thông tin được lưu trữ và lấy ra theo từ nhớ ( word), một từ nhớ (word) là
Trang 14tương ứng với 32-bits Mỗi vùng trong bộ nhớ có 32-bits địa chỉ Trong kiến trúc MIPS,địa chỉ của bộ nhớ được đánh từ 0 đến 4,294,967,295 Trong kiến trúc MIPS thì một từnhớ là 32-bits và một byte là 8-bits Như vậy trong kiến trúc MIPS thì một từ bao gồm 4-Bytes, và đơn vị địa chỉ nhỏ nhất có thể của thông tin được tham biến trong bộ nhớ là một
byte Địa chỉ của byte đầu tiên trong từ nhớ cũng là địa chỉ của từ nhớ Tất cả các lệnh trong kiến trúc MIPS đều có 32-bits độ dài Vì vậy con trỏ chương trình được tăng lên
4 sau khi mỗi lệnh được thực hiện.
2.5 Kiểu dữ liệu và cách thức đánh địa chỉ
2.5.1 Kiểu dữ liệu:
Ta xét bộ xử lý R4000, đây là một bộ xử lí thiết kế theo kiến trúc MIPS, sử dụng 4định dạng dữ liệu là:
Kiểu Doubleword với 64-bit
Kiểu Word với 32-bit
Kiểu Halfword với 16-bit
Kiểu Byte với 8-bit
Trong đó thì trật tự sắp xếp của các byte trong các kiểu định dạng Halfword, word
và Doubleword có thể được thiết lập theo kiểu đầu to (big-endian) hoặc kiểu đầu nhỏ
(little-endian) Khi mà bộ xử lí được thiết lập theo kiểu đầu to, thì byte số 0 là byte có ý nghĩa cao nhất và ngược lại, đối với kiểu đầu nhỏ thì byte số 0 là byte có ý nghĩa thấp nhất.
Hình 2.4 Kiểu big-endian trong kiểu dữ liệu Word (32-bits)
Hình 2.5 Kiểu little-endian trong kiểu dữ liệu Word (32-bits)
Trang 15Hình 2.6: Dữ liệu kiểu đầu nhỏ trong Doubleword.
Hình 2.7 Dữ liệu đầu to trong Doubleword
2.5.2 Cách thức đánh địa chỉ:
Kiến trúc MIPS được biết đến với tập lệnh máy tính đơn giản nên các nhà thiết kếkiến trúc MIPS đã cung cấp cho chúng ta một tập hợp các lệnh cơ bản Trong trường hợpmuốn gọi một giá trị từ bộ nhớ chính hoặc ghi một giá trị vào bộ nhớ chính, chỉ một
phương thức đánh địa chỉ được cài đặt trong phần cứng của máy tính Phương pháp đánh địa chỉ này được hiểu như là phương pháp đổi chỗ nhiều địa chỉ cơ sở Phương thức
đánh địa chỉ đưa ra cách thức để biết được làm thế nào mà một toán hạng được xác định
Như chúng ta đã biết thì đối với một toán hạng nó có thể có 3 vị trí: trong thanh ghi, trong bộ nhớ, hoặc nằm ngay trong phần của câu lệnh và được hiểu như là một hắng
số Việc xác định một hằng số được coi như một toán hạng gọi là phương thức đánh địa
Trang 16chỉ tức thời Tương tự như vậy, việc xác định một toán hạnh được lưu trong thanh ghi gọi là phương thức đánh địa chỉ thanh ghi Mọi bộ xử lý đều chấp nhận hai phương
thức đánh địa chỉ này Sự khác nhau giữa bộ xử lí RISC và CISC là làm thế nào chúngxác định được một toán hạng trong bộ nhớ Việc thiết kế CISC tập trung vào sự biến đổirộng rãi của phương thức đánh địa chỉ bộ nhớ Còn việc thiết kế RISC chỉ chấp nhận duynhất một hoặc nhiều nhất là hai kiểu phương thức đánh địa chỉ trong câu lệnh nạp và ghi
bộ nhớ Tất cả các kiến trúc MIPS chấp nhận hai phương thức đánh địa chỉ sau đây:
Địa chỉ của toán hạng được tính toán bởi phép cộng nội dung của một thanh ghi
và một hằng số Nếu như là hằng số bằng 0, nội dung của thanh ghi được xử lý
giống như là địa chỉ của một toán hạng Trong phương thức này, địa chỉ bộ nhớđược tính toán giống như sau:
Address = contents of a register + constant.
Địa chỉ của toán hạng bộ nhớ được tính toán bởi phép cộng nội dung của hai thanh ghi Nếu như một thanh ghi là bằng 0, phương thức đánh địa chỉ này trở
thành giống như phương thức trên với hằng số 0 Trong phương thức này, địa chỉđược tính toán như sau:
Address = contents of register 1+ contents of register 2.
Kiến trúc Mips là một kiến trúc nạp và ghi ( Load/Store architecture), điều này cónghĩa là tất cả các lệnh truy cập vào bộ nhớ chính đều là các lệnh nạp và ghi( Load/storeinstruction) Một lệnh nạp truy cập giá trị từ bộ nhớ và đặt một bản copy của giá trị tìmthấy trong bộ nhớ vào một trong số tập hợp các thanh ghi
Ví dụ: Lw $s1,8($a0)
Lệnh này sẽ tính toán địa chỉ thật của vùng nhớ được truy cập bởi thao tác cộng nội dungcủa thanh ghi $a0 ( thanh ghi cơ sở) và 8 giá trị hằng (offset) Một bản copy của giá trịtruy cập từ bộ nhớ chính tại địa chỉ thực sẽ được nạp vào trong thanh ghi $s1 Một lệnhgiả mã tương đương như sau: $s1 = Mem[$a0 + 8]
Chú ý rằng trong ví dụ này thì địa chỉ cơ sở là giá trị của thanh ghi $a0, và số đổi chỗ làgiá trị hằng 8 Giá trị cở sở sẽ luôn luôn là giá trị của một trong những thanh ghi registerfile Và giá trị di chuyển luôn luôn là một giá trị hằng, giá trị hằng này có thể nhân cácgiá trị từ -32,768 đến +32,767 Trong trường hợp lệnh nạp một từ nhớ, địa chỉ thựccần phải là một con số mà là kết quả của một phép nhân với 4, bởi vì một từ nhớ bao giờcũng bao gồm 4 byte