Bài tập thực hành kiến trúc máy tính năm 2024

Thực hành kiến trúc máy tính

ự 4

Bảng tóm tắt các lệnh trong bài thực hành

Instruction

Meaning

Instruction Format

add

$s1, $s2, $s3

$s1 = $s2 + $s3

$s1 = $s2 + $s3

op = 0

op = 0

rs = $s2 rt = $s3 rd = $s1 sa = 0

rs = $s2 rt = $s3 rd = $s1 sa = 0

f = 0x20

f = 0x21

addu $s1, $s2, $s3

sub

$s1, $s2, $s3

$s1 = $s2 – $s3

$s1 = $s2 – $s3

$s1 = $s2 & $s3

$s1 = $s2 | $s3

op = 0

op = 0

op = 0

op = 0

rs = $s2 rt = $s3 rd = $s1 sa = 0

rs = $s2 rt = $s3 rd = $s1 sa = 0

rs = $s2 rt = $s3 rd = $s1 sa = 0

rs = $s2 rt = $s3 rd = $s1 sa = 0

f = 0x22

f = 0x23

f = 0x24

f = 0x25

subu $s1, $s2, $s3

and

or

$s1, $s2, $s3

$s1, $s2, $s3

xor

nor

sll

$s1, $s2, $s3

$s1, $s2, $s3

$s1,$s2,10

$s1 = $s2 ^ $s3

$s1 = ~($s2|$s3)

$s1 = $s2 << 10

op = 0

op = 0

op = 0

rs = $s2 rt = $s3 rd = $s1 sa = 0

rs = $s2 rt = $s3 rd = $s1 sa = 0

f = 0x26

f = 0x27

f = 0x00

rs = 0

rs = 0

rs = 0

rt = $s2 rd = $s1 sa = 10

rt = $s2 rd = $s1 sa = 10

rt = $s2 rd = $s1 sa = 10

srl

sra

$s1,$s2,10

$s1 = $s2>>>10

$s1 = $s2 >> 10

(Hi, Lo) = $s1*$s2

(Hi, Lo) = $s1*$s2

op = 0

op = 0

op = 0

op = 0

op = 0

f = 0x02

f = 0x03

f = 0x18

f = 0x19

f = 0x1A

$s1, $s2, 10

mult $s1, $s2

multu $s1, $s2

rs = $s1 rt = $s2

rs = $s1 rt = $s2

rs = $s1 rt = $s2

rd = 0

rd = 0

rd = 0

sa = 0

sa = 0

sa = 0

div

$s1, $s2

Hi = $s1/$s2

Lo = $s1%$s2

divu $s1, $s2

Hi = $s1/$s2

op = 0

rs = $s1 rt = $s2

rd = 0

sa = 0

f = 0x1B

Lo = $s1%$s2

mfhi $s1

mflo $s1

$s1 = Hi

$s1 = Lo

op = 0

op = 0

rs = 0

rs = 0

rt = 0

rt = 0

rd = $s1 sa = 0

rd = $s1 sa = 0

f = 0x10

f = 0x12

Các lệnh số học/luận lý có hằng số

Imm16 \= 10

addi $s1, $s2, 10

addiu $s1, $s2, 10

andi $s1, $s2, 10

$s1 = $s2 + 10

op = 0x8 rs = $s2 rt = $s1

op = 0x9 rs = $s2 rt = $s1

op = 0xc rs = $s2 rt = $s1

op = 0xd rs = $s2 rt = $s1

op = 0xe rs = $s2 rt = $s1

$s1 = $s2 + 10

$s1 = $s2 & 10

$s1 = $s2 | 10

$s1 = $s2 ^ 10

$s1 = 10 << 16

Imm16 \= 10

Imm16 \= 10

Imm16 \= 10

Imm16 \= 10

Imm16 \= 10

ori

$s1, $s2, 10

xori $s1, $s2, 10

lui

$s1, 10

op = 0xf

0

rt = $s1

Các lệnh rẽ nhánh, nhảy

Imm26

j

label

jump to label

op = 2

branch if ($s1 == $s2) op = 4

branch if ($s1 != $s2) op = 5

Imm16

Imm16

Imm16

Imm16

Imm16

beq

bne

$s1, $s2, label

$s1, $s2, label

rs = $s1 rt = $s2

rs = $s1 rt = $s2

blez $s1, label

bgtz $s1, label

bltz $s1, label

branch if ($s1 <= 0)

branch if ($s1 > 0)

branch if ($s1 < 0)

op = 6

op = 7

op = 1

rs = $s1

rs = $s1

rs = $s1

0

0

0

3

Thực hành kiến trúc máy tính

ự 4

bgez $s1, label

slt $t0,$s1,$s2

branch if ($s1 >= 0)

$t0=($s1<$s2?1:0)

$t0=($s1<$s2?1:0)

$t0=($s1<10?1:0)

$t0=($s1<10?1:0)

op = 1

op = 0

op = 0

rs = $s1

1

Imm16

rs = $s1 rt = $s2

rs = $s1 rt = $s2

rd = $t0

rd = $t0

0

f = 0x2a

f = 0x2b

sltu $t0,$s1,$s2

slti $t0,$s1,10

sltiu $t0,$s1,10

0

op = 0xa rs = $s1 rt = $t0

op = 0xb rs = $s1 rt = $t0

Imm16 \= 10

Imm16 \= 10

Các lệnh truy xuất bộ nhớ load và store

$s1, imm16($s0)

s1 = MEM[s0+imm16] op = 0x20 rs = $s0 rt = $s1

Imm16

Imm16

Imm16

Imm16

Imm16

Imm16

Imm16

Imm16

lb

lh

$s1, imm16($s0)

$s1, imm16($s0)

$s1, imm16($s0)

$s1, imm16($s0)

$s1, imm16($s0)

$s1, imm16($s0)

$s1, imm16($s0)

s1 = MEM[s0+imm16] op = 0x21 rs = $s0 rt = $s1

s1 = MEM[s0+imm16] op = 0x23 rs = $s0 rt = $s1

s1 = MEM[s0+imm16] op = 0x24 rs = $s0 rt = $s1

s1 = MEM[s0+imm16] op = 0x25 rs = $s0 rt = $s1

MEM[s0+imm16] = s1 op = 0x28 rs = $s0 rt = $s1

MEM[s0+imm16] = s1 op = 0x29 rs = $s0 rt = $s1

MEM[s0+imm16] = s1 op = 0x2b rs = $s0 rt = $s1

lw

lbu

lhu

sb

sh

sw

4

Thực hành kiến trúc máy tính

B ng tóm t t các l nh trong bài thực hành

ự 4

s ore( ), oa ( ),

a o arra (BYTE, HALF, WORD, FLOAT, DOUBLE, ASCII, ASCIIZ,

SPACE … ) r arra . a e

eo or a ss a a as , : 5130xxxx_lab4_bai1a.asm

B 1. ệ ệ .

ư ướ 2 lab 2).

với a = 4, b = 3, c = 2, d = 1

a, b, c, d ố ư ư sẵn ở vùng data ị

ị kq ư ẵ ướ .

.data

x:

a:

b:

c:

d:

.word

.word

.word

.word

.word

0

1

2

3

4

0

kq: .word

.text

main:

quan sát giá trị “kq” ở cửa sổ “da a”

#$s0 chứa địa chỉ của biến x

la

$s0, x

#địa chỉ biến (a, b, c, d, kq) lần lược là $s0 +

#(4, 8, 12, 16, 20)

thêm code tính toán biểu thức f

D – – .

B 2. ắ ả

10 sau:

1, 6, 3, 23, 3, 7, 8, 34, 24, 50

ế ư ế ạ n.

5

Thực hành kiến trúc máy tính

ự 4

B 3.

ự :

“K M 13”

ế ạ ư ớ ự ự

ế ế ư ư ạ ự .

B 4. Xuất giá trị ra LED 7 oạn

S d ng công c “Digital Lab Sim” (trong menu “Tool”), viết chư ng trình hi n thị số có

hai ch số bất kỳ ư c nhập t ngư i dùng.

Đoạn chư ng trình mẫu dưới ây hi n thị số “10” . Tham kh o ph n “Help” c a công c

này hi u rõ chư ng trình.

# Display LED's Value using Digital Lab Sim,

# please read "help"

.data

LEDL: .byte

LEDR: .byte

1

0

# Left Digit value

# Right Digit value

LEDFONT1: .byte 0x3f, 0x06, 0x5b, 0x4f

.text

la

la

la

li

li

$t0, LEDL

load address of Left Digit value byte

$t1, LEDR # load address of Right Digit value byte

$t5, LEDFONT1

$t2, 0xFFFF0011

$t3, 0xFFFF0010

# load address of Left Digit

# load address of Right Digit

# load value of Left Digit

lbu $t0, 0($t0)

6

Thực hành kiến trúc máy tính

ự 4

lbu $t1, 0($t1)

load value of Right Digit

add $t0,$t0,$t5

get the LEDFONT1[LEDL]

lb

$t0,0($t0)

sb

$t0, 0($t2)

push the LEDFONT1[LEDL] to Left LED

add $t1,$t1,$t5 # get the LEDFONT1[LEDR]

lb

$t1,0($t1)

sb

$t1, 0($t3) # push the LEDFONT1[LEDR] to Right LED

li

syscall

$v0, 10

# system call for exit

# we are out of here.

7