Kien-Truc-May-Tinh - Truong-Van-Cuong - Lecture-04-Chapter-02 - Language-Of-The-Computer - 03 - (Cuuduongthancong - Com)

You might also like

Download as pdf or txt
Download as pdf or txt
You are on page 1of 36

COMPUTER ARCHITECTURE

Chapter 2
Lecture 3

Instruction: Language of
the Computer

CuuDuongThanCong.com https://fb.com/tailieudientucntt
The goals
• 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 2
CuuDuongThanCong.com https://fb.com/tailieudientucntt
Chapter contents
1. Introduction
2. Operations/operands of the Computer
Hardware
3. Signed and Unsigned number (review)
4. MIPS Instruction
5. Arithmetic instruction
6. Logical instruction
7. MIPS Memory Access Instructions
8. Branch/jump instruction

Sep-16 3
CuuDuongThanCong.com https://fb.com/tailieudientucntt
References
• Slide:
• Computer Organization and Design, 4th Edition, Patterson & Hennessy, ©
2008, MK
• Mary Jane Irwin, Penn State University
• KTMT, ĐH BKTPHCM
• Textbook: Chương 2 (p.74 – p.221)
• Software:
• Mars / Qtspim
• MIPS reference Data
• Resources:
• https://uit.edu.vn/~ktmt/mips-tutorial
• https://uit.edu.vn/~ktmt/references
• https://www.cs.umd.edu/class/sum2003/cmsc311/Notes/Mips/jump.html
• https://www.cs.umd.edu/class/sum2003/cmsc311/Notes/Mips/load32.ht
ml
• https://www.cs.umd.edu/class/sum2003/cmsc311/Notes/Mips/pseudojum
p.html

Sep-16 4
CuuDuongThanCong.com https://fb.com/tailieudientucntt
Lecture contents
1. MIPS Memory Access Instructions
instruction
2. Logical instruction

Sep-16 5
CuuDuongThanCong.com https://fb.com/tailieudientucntt
MIPS Memory Access Instructions
Register File
Tại sao cần sử dụng các 32 bits
5
lệnh di chuyển dữ liệu src1 addr 32 src1
5 data
giữa bộ nhớ và thanh src2 addr 32
5 locations
ghi? dst addr
32 src2
32
write data data
• MIPS có hai lệnh di chuyển dữ
liệu cơ bản để truy xuất bộ nhớ write control

• 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).
1. MIPS Memory Access Instructions
CuuDuongThanCong.com https://fb.com/tailieudientucntt
Machine Code Representation

Tất cả các lệnh thuộc I-Format


Instruction B31-26 B25-21 B20-16 B15-0
opcode rs rt immediate
lw $rt, <offset>$rs) 100 011 - - offset
lb $rt, <offset>$rs) 100 000 - - offset
lbu $rt, <offset>$rs) 100 100 - - offset
sw $rt, <offset>$rs) 101 011 - - offset
sw $rt, <offset>$rs) 101 100 - - offset

Sep-16 1. MIPS Memory Access Instructions 7


CuuDuongThanCong.com https://fb.com/tailieudientucntt
How to determine memory address
 Địa
chỉ 32bit của bộ nhớ được xác định bằng cách
cộ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
 16bit 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

Sep-16 1. MIPS Memory Access Instructions 8


CuuDuongThanCong.com https://fb.com/tailieudientucntt
Example
lw $t0, 4($s3) #load word from
memory
sw $t0, 8($s3) #store word to
memory

Sep-16 1. MIPS Memory Access Instructions 9


CuuDuongThanCong.com https://fb.com/tailieudientucntt
Machine Language - Load Instruction

lw $t0, 24($s3)

35 19 8 2410
Memory
2410 + $s3 = 0xf f f f f f f f

. . . 0001 1000 0x120040ac


$t0
+ . . . 1001 0100
. . . 1010 1100 = $s3 0x12004094

0x120040ac
0x0000000c
0x00000008
0x00000004
0x00000000
Sep-16 1. MIPS Memory Access data
Instructions word address (hex)
10
CuuDuongThanCong.com https://fb.com/tailieudientucntt
Byte Addresses
• 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)

little endian byte 0


3 2 1 0
msb lsb
0 1 2 3
big endian byte 0
1. MIPS Memory Access Instructions
CuuDuongThanCong.com https://fb.com/tailieudientucntt
Byte Addresses
• Ex: 0000 0001 0010 0011 0100 0101 0110 0111
Little Endian Big Endian

x..x1101 x..x1101
x..x1100 x..x1100
x..x0111 00000001 x..x0111 01100111
x..x0110 00100011 x..x0110 01000101
x..x0101 01000101 x..x0101 00100011
x..x0100 01100111 x..x0100 00000001
x..x0011 x..x0011
x..x0010 x..x0010

Sep-16 1. MIPS Memory Access Instructions 12


CuuDuongThanCong.com https://fb.com/tailieudientucntt
Loading and Storing Bytes
• MIPS cung cấp các lệnh để di chuyển các byte
lb $t0, 1($s3)# mã máy?
sb $t0, 6($s3) # Mã máy

 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ớ

1. MIPS Memory Access Instructions


CuuDuongThanCong.com https://fb.com/tailieudientucntt
Summary
• 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ào
thanh 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ớ
Sep-16 1. MIPS Memory Access Instructions 14
CuuDuongThanCong.com https://fb.com/tailieudientucntt
§2.7 Instructions for Making Decisions
Conditional Operations
• 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.
• Định dạng lệnh: I-Format
• beq rs, rt, L1
• Nếu (rs == rt) rẽ nhánh tới nhãn lệnh L1;
• bne rs, rt, L1
• Nếu (rs != rt) rẽ nhánh tới nhãn lệnh L1;

2. Conditional branch
CuuDuongThanCong.com https://fb.com/tailieudientucntt
Example
bne $s0, $s1, Lbl #go to Lbl if
$s0$s1
beq $s0, $s1, Lbl #go to Lbl if
$s0=$s1
• Ex: if (i==j) h = i + j;
bne $s0, $s1, Lbl1
add $s3, $s0, $s1
Lbl1: ...
 Định dạng lệnh (I format):
0x05 16 17 16 bit offset

 Làm thế nào để xác định được địa chỉ rẽ nhánh?

2. Conditional branch
CuuDuongThanCong.com https://fb.com/tailieudientucntt
Specifying Branch Destinations
• 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ếp
theo
• Giới hạn khoảng rẽ nhánh là -215 to +215-1

2. Conditional branch
CuuDuongThanCong.com https://fb.com/tailieudientucntt
Specifying Branch Destinations

16 Tại sao lại ghép


offset 2 bit?
sign-extend

00
Địa chỉ rẽ nhánh đích

32 32
Add
PC 32
32 Add
32
32
4
32 ?

Sep-16 2. Conditional branch 18


CuuDuongThanCong.com https://fb.com/tailieudientucntt
In Support of Branch Instructions
• 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:
slt $t0, $s0, $s1 # if $s0 < $s1 then
# $t0 = 1 else
# $t0 = 0
• Định dạng lệnh (R format):
0 16 17 8 0x24
• Một số dạng khác của slt
slti $t0, $s0, 25 # if $s0 < 25 then $t0=1 ...
sltu $t0, $s0, $s1# if $s0 < $s1 then $t0=1 ...
sltiu $t0, $s0, 25# if $s0 < 25 then $t0=1 ...

2. Conditional branch 2
CuuDuongThanCong.com https://fb.com/tailieudientucntt
Aside: More Branch Instructions
• 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

slt $at, $s1, $s2 #$at set to 1 if


bne $at, $zero, Label #$s1 < $s2

• less than or equal to ble $s1, $s2, Label


• greater than bgt $s1, $s2, Label
• great than or equal to bge $s1, $s2, Label
 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
2. Conditional branch
$at CuuDuongThanCong.com https://fb.com/tailieudientucntt
Translated Pseudo instructions
Pseudoinstruction Translation
slt $t0, $rt, $rs
bge $rt, $rs, LABEL
beq $t0, $zero, LABEL
slt $t0, $rs, $rt
bgt $rt, $rs, LABEL
bne $t0, $zero, LABEL
slt $t0, $rs, $rt
ble $rt, $rs, LABEL
beq $t0, $zero, LABEL
slt $t0, $rt, $rs
blt $rt, $rs, LABEL
bne $t0, $zero, LABEL

Sep-16 2. Conditional branch 21


CuuDuongThanCong.com https://fb.com/tailieudientucntt
Unconditional branch instruction
• MIPS có một lệnh rẽ nhánh không điều kiện Jump

j label #go to label


 Instruction Format (J Format):
0x02 26-bit address

from the low order 26 bits of the jump instruction


26

00

32
4
PC 32

3. Unonditional branch
CuuDuongThanCong.com https://fb.com/tailieudientucntt
Branching Far Away
• Làm thể nào khi địa chỉ rẽ nhánh nằm ngoài tầm
offset 16 bit
 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:

3. Unonditional branch
CuuDuongThanCong.com https://fb.com/tailieudientucntt
Assignments
• Translating Some Pseudoinstructions
Pseudoinstruction Translation

mov $rt, $rs

li $rs, small

li $rs, big

la $rs, big

lw $rt, big($rs)

Sep-16 2. Conditional branch 24


CuuDuongThanCong.com https://fb.com/tailieudientucntt
Compiling If Statements
• C code:
if (i==j) f = g+h;
else f = g-h;
• f, g, … in $s0, $s1, …
• Compiled MIPS code:

2. Conditional branch
CuuDuongThanCong.com https://fb.com/tailieudientucntt
Compiling Loop Statements
• C code:
while (save[i] == k) i += 1;
• i in $s3, k in $s5, address of save in $s6
• Compiled MIPS code:

2. Conditional branch
CuuDuongThanCong.com https://fb.com/tailieudientucntt
Compiling switch Statement
switch (i) {
case 0: f = i + j; break;
case 1: f = g + h; break;
case 2: f = g – h; break;
case 3: f = i – j; break;
Default: f = 0; break
}

Sep-16 2. Conditional branch 27


CuuDuongThanCong.com https://fb.com/tailieudientucntt
Compiling switch Statement

Sep-16 2. Conditional branch 28


CuuDuongThanCong.com https://fb.com/tailieudientucntt
Procedures
• Hàm giúp lập trình viên phân chia chương trình
thà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ột
khố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)

Sep-16 3. Procedures 29
CuuDuongThanCong.com https://fb.com/tailieudientucntt
Instructions for Accessing Procedures
• MIPS: Lệnh gọi thủ tục
jal ProcedureAddress #jump and
link
• Lưu địa chỉ lệnh tiếp theo (PC+4) và nhảy tới hàm
được gọi
• Định dạng lệnh (J format):
0x03 26 bit address

• Nhảy tới địa chỉ lệnh tiếp thep (PC+4) được lưu
trong $ra
jr $ra #return
3. Procedures
CuuDuongThanCong.com https://fb.com/tailieudientucntt
Six Steps in Execution of a Procedure
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
3. Procedures
CuuDuongThanCong.com https://fb.com/tailieudientucntt
Leaf Procedure Example
• C code (hàm không gọi các hàm khác):
int leaf_example (int g, h, i, j)
{ int f;
f = (g + h) - (i + j);
return f;
}
• Các đối số g, …, j in $a0, …, $a3
• Kết quả trong $v0

3. Procedures
CuuDuongThanCong.com https://fb.com/tailieudientucntt
Leaf Procedure Example
• MIPS code:
leaf_example:
add $t0, $a0, $a1 Procedure body
add $t1, $a2, $a3
sub $v0, $t0, $t1 Result
jr $ra
Return

3. Procedures
CuuDuongThanCong.com https://fb.com/tailieudientucntt
Spilling Registers
• Điều gì xảy ra khi sô thanh ghi lớn hơn các đối số
phân bổ và các giá trị trả về ?
• callee sử dụng stack – a last-in-first-out queue (LIFO)
 Thanh ghi $sp (29) được sử dụng
high addr
để giữ địa chỉ của stack (stack
“lớn” theo chiều đi xuống)
top of stack $sp
 Chèn dữ liệu vào stack– push
$sp = $sp – 4
sw data,0($sp)

 Xóa dữ liệu khỏi stack - pop


$sp = $sp + 4
low addr
$sp = $sp + 4
3. Procedures
CuuDuongThanCong.com https://fb.com/tailieudientucntt
Leaf Procedure Example
• C code (hàm có gọi các hàm khác):
int leaf_example (int g, h, i, j)
{ int f;
f = (g + h) - (i + j);
return f;
}
• 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

3. Procedures
CuuDuongThanCong.com https://fb.com/tailieudientucntt
Leaf Procedure Example
• MIPS code:
leaf_example:
addi $sp, $sp, -4
sw $s0, 0($sp) Save $s0 on stack
add $t0, $a0, $a1
Procedure body
add $t1, $a2, $a3
sub $s0, $t0, $t1
add $v0, $s0, $zero Result
lw $s0, 0($sp)
addi $sp, $sp, 4 Restore $s0
jr $ra Return

3. Procedures
CuuDuongThanCong.com https://fb.com/tailieudientucntt

You might also like