Tải bản đầy đủ (.pdf) (36 trang)

kiến trúc máy tính trương văn cường lecture 04 chương ter 02 language of the computer 03 sinhvienzone com

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (1.22 MB, 36 trang )

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

/>

×