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

05 bo lenh mips 32 bit

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 (953.14 KB, 110 trang )

HỆ THỐNG MÁY TÍNH
04 – BỘ LỆNH MIPS 32 bit


Gii thiu
2

ă

Nhim v c bn nht ca CPU l phi thc
hin cỏc lnh c yờu cu, gi l instruction

ă

Cỏc CPU sẽ sử dụng các tập lệnh (instruction
set) khác nhau để có thể giao tiếp với nó


Kớch thc lnh
3

ă

ă

Kớch thc lnh b nh hng bi:
Ô

Cu trỳc ng truyn bus

Ô



Kớch thc v t chc b nh

Ô

Tc CPU

Gii phỏp ti u lnh:
Ô

Dựng lnh cú kớch thc ngn, mỗi lệnh chỉ nên được
thực thi trong đúng 1 chu k CPU

Ô

Dựng b nh cache


B lnh MIPS
4

ă

Chỳng ta s lm quen vi tp lnh cho kin trỳc MIPS
(PlayStation 1, 2; PSP; Windows CE, Routers)

ă

c xõy dng theo kin trỳc (RISC) vi 4 nguyờn tc:
Ô


Cng n gin, cng n nh

Ô

Cng nh gn, x lý cng nhanh

Ô

Tng tc x lý cho nhng trng hp thng xuyờn xy ra

Ô

Thit k ũi hi s tha hip tt


Cấu trúc cơ bản của 1 chương trình hợp
ngữ trên MIPS
5

.data

# khai báo các data label (có thể hiểu là các biến)
# sau chỉ thị này

label1: <kiểu lưu trữ> <giá trị khởi tạo>
label2: <kiểu lưu trữ> <giá trị khởi tạo>

.text


# viết các lệnh sau chỉ thị này

.globl <các text label tồn cục, có thể truy xuất từ các file khác>
.globl main

# Đây là text label toàn cục bắt buộc của program


main:


# điểm text label bắt đầu của program


Hello.asm
6

.data
str:

# data segment

.asciiz “Hello asm !”
.text
.globl

# text segment
main

main:


# starting point of program
addi $v0, $0, 4

# $v0 = 0 + 4 = 4 à print str syscall

la $a0, str

# $a0 = address(str)

syscall

# excute the system call


B lnh MIPS Thanh ghi
7

ă

L n v lu tr data duy nht trong CPU

ă

Trong kin trỳc MIPS:
Ô

Ô

Cú tng cng 32 thanh ghi đánh số từ $0 à $31

n

Càng ít càng dễ quản lý, tính tốn càng nhanh

n

Có thể truy xuất thanh ghi qua tên của nó (slide sau)

Mỗi thanh ghi có kích thước cố định 32 bit
n

Bị giới hạn bởi khả năng tính tốn của chip xử lý

n

Kích thước toán hạng trong các câu lệnh MIPS bị giới hạn ở
32 bit, nhóm 32 bit gọi là từ (word)


Thanh ghi toỏn hng
8

ă

Nh chỳng ta ó bit khi lp trình, biến
(variable) là khái niệm rất quan trọng khi
muốn biểu din cỏc toỏn hng tớnh toỏn

ă


Trong kin trỳc MIPS khơng tồn tại khái niệm
biến, thay vào đó là thanh ghi toán hạng


Thanh ghi toỏn hng
9

ă

Ngụn ng cp cao (C, Java): toỏn hng = bin (variable)
Ô

ă

ă

Cỏc bin lu trong b nh chớnh

Ngụn ngữ cấp thấp (Hợp ngữ): toán hạng chứa trong các thanh ghi
Ô

Thanh ghi khụng cú kiu d liu

Ô

Kiu d liu thanh ghi được quyết định bởi thao tác trên thanh ghi

So sỏnh:
Ô


u: Thanh ghi truy xut nhanh hn nhiu b nh chớnh

Ô

Khuyt: Khụng nh b nh chớnh, thanh ghi l phần cứng có số lượng
giới hạn và cố định à Phải tính tốn kỹ khi sử dụng


Mt s thanh ghi toỏn hng quan tõm
10

ă

Save register:
Ô

MIPS ly ra 8 thanh ghi ($16 - $23) dùng để thực hiện các phép
tính số học, được đặt tên tương ứng l $s0 - $s7

Ô

ă

Tng ng trong C, cha giỏ tr bin (variable)

Temporary register:
Ô

MIPS ly ra 8 thanh ghi ($8 - $15) dùng để chứa kết quả trung
gian, được đặt tờn tng ng l $t0 - $t7


Ô

Tng ng trong C, để chứa giá trị biến tạm (temporary
variable)


Bảnh danh sách thanh ghi MIPS
11

Thanh ghi 1 ($at) để dành cho assembler. Thanh ghi 26 – 27 ($k0 - $k1) để dành cho OS


B lnh MIPS 4 thao tỏc chớnh
12

ă

Phn 1: Phộp toỏn s hc (Arithmetic)

ă

Phn 2: Di chuyn d liu (Data transfer)

ă

Phn 3: Thao tỏc lun lý (Logical)

ă


Phn 4: R nhỏnh (Un/Conditional branch)


Phn 1: Phộp toỏn s hc
13

ă

Cỳ phỏp:
opt

opr, opr1, opr2

Ô

opt (operator): Tờn thao tỏc (toỏn t, tỏc t)

Ô

opr (operand): Thanh ghi (toỏn hng, tỏc t ớch)
cha kt qu

Ô

opr1 (operand 1): Thanh ghi (toỏn hng ngun 1)

Ô

opr2 (operand 2): Thanh ghi / hằng số
(toán hạng nguồn 2)



Vớ d
14

ă

Gi s xột cõu lnh sau:
add a, b, c
Ô Ch

th cho CPU thc hin phộp cng

aòb+c
Ô a,

b, c c gi l thanh ghi toỏn hng

Ô Phộp

toỏn trờn ch cú thể thực hiện với đúng 3

tốn hạng (khơng nhiều cũng khơng ít hơn)


Cng, tr s nguyờn
15

ă


Cng (Add):
Ô

Cng cú du:

add

$s0, $s1, $s2

Ô

Cng khụng du:

addu $s0, $s1, $s2

Ô

Din gii:

$s0 ò $s1 + $s2

(u: unsigned)

C/C++: (a = b + c)
ă

Tr (Subtract):
Ô

Tr cú du:


sub

$s0, $s1, $s2

Ô

Tr khụng du:

subu $s0, $s1, $s2

Ô

Din gii:

$s0 ò $s1 - $s2
C/C++: (a = b - c)

(u: unsigned)


Nhn xột
16
ă

Toỏn hng trong cỏc lnh trờn phi l thanh ghi

ă

Trong MIPS, lnh thao tỏc vi s nguyờn cú du c biu din

di dng bự 2

ă

Lm sao bit 1 phộp tốn được biên dịch từ C (ví dụ a = b + c) là
thao tác có dấu hay khơng dấu? Da vo trỡnh biờn dch

ă

Cú th dựng 1 toỏn hng va l ngun va l ớch
add $s0, $s0, $s1

ă

Cng, trừ với hằng số? à $s2 sẽ đóng vai trị l hng s
Ô

Cng: addi $s0, $s1, 3

Ô

Tr:

addi

$s0, $s1, -3

(addi = add immediate)



Vớ d 1
17
ă

Chuyn thnh lnh MIPS t lnh C:
a=b+c+de

ă

ă

Chia nh thành nhiều lệnh MIPS:
add

$s0, $s1, $s2

# a=b+c

add

$s0, $s0, $s3

# a=a+d

sub

$s0, $s0, $s4

# a=a–e


Tại sao dùng nhiều lệnh hơn C?

à Bị giới hạn bởi số lượng cổng mạch toán tử và thit k bờn trong cng
mch
ă

Ký t # dựng chỳ thích trong hợp ngữ cho MIPS


Vớ d 2
18

ă

Chuyn thnh lnh MIPS t lnh C:
f = (g + h) (i + j)

ă

Chia nh thnh nhiu lệnh MIPS:
add

$t0, $s1, $s2

# temp1 = g + h

add

$t1, $s3, $s4


# temp2 = i + j

sub

$s0, $t0, $t1

# f = temp1 – temp2


Lu ý: Phộp gỏn ?
19

ă

Kin trỳc MIPS khụng cú cng mạch dành riêng
cho phép gán

à Giải pháp: Dùng thanh ghi zero ($0 hay $zero)
luụn mang giỏ tr 0
ă

Vớ d:
add $s0, $s1, $zero

Tương đương: $s0 = $s1 + 0 = $s1 (gỏn)
ă

Lnh add $zero, $zero, $s0 cú hp l ?



Phộp nhõn, chia s nguyờn
20

ă

Thao tỏc nhõn / chia ca MIPS có kết quả
chứa trong cặp 2 thanh ghi tên là $hi và $lo
Bit 0-31 thuộc $lo và 32-63 thuộc $hi



Tài liệu bạn tìm kiếm đã sẵn sàng tải về

Tải bản đầy đủ ngay
×