COMPUTER ARCHITECTURE
Chapter 2
Lecture 3
Instruction: Language of
the Computer
CuuDuongThanCong.com
/>
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: Rtype, 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.
2
Sep-16
CuuDuongThanCong.com
/>
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
3
Sep-16
CuuDuongThanCong.com
/>
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:
•
•
•
•
/> /> /> />ml
• />p.html
4
Sep-16
CuuDuongThanCong.com
/>
Lecture contents
1. MIPS Memory Access Instructions
instruction
2. Logical instruction
5
Sep-16
CuuDuongThanCong.com
/>
MIPS Memory Access Instructions
Tại sao cần sử dụng các
lệnh di chuyển dữ liệu
giữa bộ nhớ và thanh
ghi?
Register File
32 bits
src1 addr
src2 addr
dst addr
write data
5
5
5
32
• 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).
data
32
locations
32 src2
data
write control
1. MIPS Memory Access Instructions
CuuDuongThanCong.com
32 src1
/>
Machine Code Representation
Tất cả các lệnh thuộc I-Format
Instruction
B31-26
B25-21
B20-16
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
CuuDuongThanCong.com
1. MIPS Memory Access Instructions
/>
B15-0
7
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
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
Sep-16
CuuDuongThanCong.com
1. MIPS Memory Access Instructions
/>
8
Example
lw
sw
$t0, 4($s3) #load word from
memory
$t0, 8($s3) #store word to
memory
Sep-16
CuuDuongThanCong.com
1. MIPS Memory Access Instructions
/>
9
Machine Language - Load Instruction
lw $t0, 24($s3)
35
19
8
Memory
2410 + $s3 =
. . . 0001 1000
+ . . . 1001 0100
. . . 1010 1100 =
0x120040ac
Sep-16
CuuDuongThanCong.com
2410
0xf f f f f f f f
0x120040ac
$t0
0x12004094
$s3
1. MIPS Memory Access data
Instructions
0x0000000c
0x00000008
0x00000004
0x00000000
word address (hex)
10
/>
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)
3
2
1
little endian byte 0
0
msb
lsb
0
1
2
3
big endian byte 0
1. MIPS Memory Access Instructions
CuuDuongThanCong.com
/>
Byte Addresses
• Ex: 0000 0001 0010 0011 0100 0101 0110 0111
Big Endian
Little Endian
x..x1101
x..x1100
x..x1101
x..x1100
x..x0111
00000001
00100011
x..x0110
x..x0101
x..x0100
x..x0011
x..x0010
01000101
01100111
x..x0111 01100111
x..x0110 01000101
x..x0101 00100011
x..x0100 00000001
x..x0011
x..x0010
Sep-16
CuuDuongThanCong.com
1. MIPS Memory Access Instructions
/>
12
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
/>
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
CuuDuongThanCong.com
1. MIPS Memory Access Instructions
/>
14
• 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
/>
§2.7 Instructions for Making Decisions
Conditional Operations
Example
bne $s0, $s1, Lbl
$s0$s1
beq $s0, $s1, Lbl
$s0=$s1
• Ex:
Lbl1:
#go to Lbl if
if (i==j) h = i + j;
bne $s0, $s1, Lbl1
add $s3, $s0, $s1
...
Định dạng lệnh (I format):
0x05
#go to Lbl if
16
17
16 bit offset
Làm thế nào để xác định được địa chỉ rẽ nhánh?
2. Conditional branch
CuuDuongThanCong.com
/>
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
/>
Specifying Branch Destinations
Tại sao lại ghép
2 bit?
16
offset
sign-extend
00
Địa chỉ rẽ nhánh đích
32
32
PC
32
Sep-16
CuuDuongThanCong.com
32
4
Add
32
Add
32
?
32
2. Conditional branch
/>
18
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
# $t0 = 1
# $t0 = 0
then
else
• Định dạng lệnh (R format):
0
16
17
8
• Một số dạng khác của slt
0x24
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
CuuDuongThanCong.com
/>
2
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
bne
$at, $s1, $s2
#$at set to 1 if
$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
/>
Translated Pseudo instructions
Pseudoinstruction
Translation
bge $rt, $rs, LABEL
slt $t0, $rt, $rs
beq $t0, $zero, LABEL
bgt $rt, $rs, LABEL
slt $t0, $rs, $rt
bne $t0, $zero, LABEL
ble $rt, $rs, LABEL
slt $t0, $rs, $rt
beq $t0, $zero, LABEL
blt $rt, $rs, LABEL
slt $t0, $rt, $rs
bne $t0, $zero, LABEL
Sep-16
CuuDuongThanCong.com
2. Conditional branch
/>
21
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
/>
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
/>
Assignments
• Translating Some Pseudoinstructions
Pseudoinstruction
Translation
mov $rt, $rs
li $rs, small
li $rs, big
la $rs, big
lw $rt, big($rs)
Sep-16
CuuDuongThanCong.com
2. Conditional branch
/>
24
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
/>