MIPS Memory Access Instructions• MIPS có hai lệnh di chuyển dữ liệu cơ bản để truy xuất bộ nhớ • Dữ liệu được nạp từ bộ nhớ vào một thanh ghi lw hoặc lưu từ thanh ghi vào bộ nhớ sw trong
Trang 1COMPUTER ARCHITECTURE
Lecture 3
Instruction: Language of the Computer
Chapter 2
Trang 2• Bốn nguyên tắc thiết kế cơ bản
• Ba toán hạng trong máy tính
• Biểu diễn lệnh trong máy tính
• Phân loại được lệnh theo 3 định dạng:
R-type, I-Type, J-Type
• Phân loại được lệnh theo chức năng
• Chuyển đổi lệnh giữa các ngôn ngữ: cấp cao, hợp ngữ, và ngôn ngữ máy.
Sep-16
The goals
2
Trang 51 MIPS Memory Access Instructions
Trang 61 MIPS Memory Access Instructions
• MIPS có hai lệnh di chuyển dữ
liệu cơ bản để truy xuất bộ nhớ
• Dữ liệu được nạp từ bộ nhớ vào
một thanh ghi (lw) hoặc lưu từ
thanh ghi vào bộ nhớ (sw) trong
tập thanh ghi (register file)
MIPS Memory Access Instructions
Register File
src1 addr src2 addr dst addr write data
32 bits
src1 data
src2 data
32 locations
32 5
32
5 5 32
Trang 71 MIPS Memory Access Instructions
Trang 81 MIPS Memory Access Instructions
Địa chỉ 32bit của bộ nhớ được xác định bằng cáchcộng vào địa chỉ nền một giá trị offset
The memory address – a 32 bit address – is formed
by adding the contents of the base address register
to the offset value
16 bit giá trị offset giới hạn các vị trí bộ nhớ nằm
trong khoảng 213 or 8,192 words (215 or 32,768 bytes) của địa chỉ nền
Giá trị offset có thể là âm hoặc dương
How to determine memory address
Trang 91 MIPS Memory Access Instructions
Trang 101 MIPS Memory Access Instructions
Trang 111 MIPS Memory Access Instructions
• Hầu hết các kiến trúc đều đánh địa chỉ từng byte trong bộ nhớ
• Địa chỉ của 1 word trong bộ nhớ phải chia hết cho 4
• Big Endian: địa chỉ của word là MSB
IBM 360/370, Motorola 68k, MIPS , Sparc, HP PA
• Little Endian: địa chỉ của word là LSB
Intel 80x86, DEC Vax, DEC Alpha (Windows NT)
Trang 121 MIPS Memory Access Instructions
• Ex: 0000 0001 0010 0011 0100 0101 0110 0111
Byte Addresses
00000001 00100011 01000101 01100111
01100111 01000101 00100011 00000001
x x1101 x x1100 x x0111 x x0110 x x0101 x x0100 x x0011 x x0010
Trang 131 MIPS Memory Access Instructions
• MIPS cung cấp các lệnh để di chuyển các byte
Loading and Storing Bytes
Byte nào được nạp và lưu?
load byte đặt byte từ bộ nhớ vào byte đầu tiên bên phải của thanh ghi đích
- Chuyển gì xảy ra với các bit còn lại trong thanh ghi?
store byte lấy 1 byte từ thanh ghi và ghi vào bộ nhớ
Chuyển gì xảy ra với các bit còn lại trong bộ nhớ
Trang 141 MIPS Memory Access Instructions
• Lw: Nạp một word từ một vị trí trong bộ nhớ vào thanh
ghi Địa chỉ bộ nhớ là địa chi byte
• Lb: Nạp một byte từ một vị trí trong bộ nhớ vào thanh
ghi Giá trị nạp được mở rộng dấu trước khi nạp vào
thanh ghi
• lbu Nạp một byte từ một vị trí trong bộ nhớ vào thanh
ghi Giá trị nạp được mở rộng bit zero trước khi nạp vàothanh ghi
• Sw: Lưu một giá trị từ thanh ghi vào một vị trí trong bộ
nhớ Địa chỉ bộ nhớ là địa chi byte
• Sb: Lưu giá trị 8 bit thấp của thanh ghi vào một vị trí
trong bộ nhớ
Summary
Trang 152 Conditional branch
• Rẽ nhánh tới một nhãn lệnh nếu điều kiện là đúng
• Ngược lại, tiếp tục thực hiện lệnh kế tiếp.
Trang 172 Conditional branch
• Sử dụng một thanh ghi để cộng thêm 16bit
offset-• Thanh ghi nào? Instruction Address Register (the PC)
• PC được tự động cập nhật (PC+4) trong chu
kỳ nạp lệnh vì vậy nó giữ địa chỉ của lệnh tiếptheo
• Giới hạn khoảng rẽ nhánh là -215 to +215-1
Specifying Branch Destinations
Trang 18Tại sao lại ghép
2 bit?
Trang 192 Conditional branch
• Chúng ta có beq, bne, vậy các loại rẽ nhánh khác thì sao?
• Chúng ta cần thêm một lệnh nữa: stl (set on less than)
• Lệnh Set on less than:
Trang 202 Conditional branch
• Có thể dung slt, beq, bnevà thanh ghi $zero
để tạo ra các điều kiện khác
• less than blt $s1, $s2, Label
• less than or equal to ble $s1, $s2, Label
• greater than bgt $s1, $s2, Label
• great than or equal to bge $s1, $s2, Label
Aside: More Branch Instructions
slt $at, $s1, $s2 #$at set to 1 if
bne $at, $zero, Label #$s1 < $s2
Các lệnh rẽ nhánh này có được trong tập lệnh được xem là các lệnh giả (pseudo instructions), được công nhận (mở rộng) bởi trình thông dịch (assembler)
Đây chính là lý do tại sao trình thông dịch cần thanh ghi
$at
Trang 223 Unonditional branch
• MIPS có một lệnh rẽ nhánh không điều kiện Jump
Unconditional branch instruction
Instruction Format (J Format):
Trang 233 Unonditional branch
• Làm thể nào khi địa chỉ rẽ nhánh nằm ngoài tầmoffset 16 bit
Branching Far Away
Chèn lệnh jump để có thể “nhảy” xa hơn
beq $s0, $s1, L1
Thành:
bne $s0, $s1, L2
j L1 L2:
Trang 24li $rs, small
li $rs, big
la $rs, big
lw $rt, big($rs)
Trang 262 Conditional branch
• C code:
while (save[i] == k) i += 1;
• i in $s3, k in $s5, address of save in $s6
• Compiled MIPS code:
Compiling Loop Statements
Trang 282 Conditional branch
Compiling switch Statement
Trang 293 Procedures
• Hàm giúp lập trình viên phân chia chương trìnhthành các khối chức năng để:
Dễ dàng cho việc viết và sửa lỗi
Cho phép dùng lại code
• Hàm giúp lập trình viên tập trung hiện thực mộtkhối chức năng đơn giản tại một thời điểm
Các tham số là giao diện giữa hàm và phần còn lại của chương trình, các tham số gồm có đối số
truyền cho hàm (arguments) và giá trị trả về
(results)
Procedures
Trang 313 Procedures
1 Caller đặt các tham số vào nơi mà thủ tục (callee)
có thể truy xuất chúng
• $a0 - $a3: 4 thanh ghi đối số ngõ vào
2 Caller di chuyển sự điều khiển đến callee
3 Callee thu thập các tài nguyên lưu trữ cho thủ tục
4 Callee thực hiện các nhiệm vụ
5 Callee đặt các kết quả vào nơi mà chương trình
có thể truy xuất nó
• $v0 - $v1: hai thanh ghi chứa giá trị trả về
6 Callee trả quyền điều khiển về cho Caller
• $ra: thanh ghi chứa địa chỉ trở về return address
Six Steps in Execution of a Procedure
Trang 323 Procedures
• C code (hàm không gọi các hàm khác):
int leaf_example (int g, h, i, j){ int f;
Trang 333 Procedures
• MIPS code:
leaf_example:
add $t0, $a0, $a1
add $t1, $a2, $a3
sub $v0, $t0, $t1
Leaf Procedure Example
Procedure body Result
Return
Trang 34 Thanh ghi $sp (29) được sử dụng
để giữ địa chỉ của stack (stack
“lớn” theo chiều đi xuống)
Trang 35• Các đối số g, …, j in $a0, …, $a3
• f in $s0 (vì vậy,cần bảo toàn giá trị $s0 trong stack)
• Kết quả trong $v0
Leaf Procedure Example
Trang 36add $t0, $a0, $a1
add $t1, $a2, $a3
Restore $s0 Result
Return