lOMoARcPSD| 58137911
BÀI TẬP KIẾN TRÚC MÁY TÍNH KIẾN
TRÚC BỘ LỆNH
---
Câu 1: Hãy tìm mã hợp ngữ MIPS tương đương với chương trình C sau:
A.
x = 5 y = x – 2 a = x * 4 b = y * 2
z = (x + a) (y + b) Biết
rằng các biến x, y, a, b là các số nguyên 32 bit.
Trả lời.
addi $t0,$zero,5 // x = 5
addi $t1,$t0,-2 // y = x - 2
sll $t2,$t0,2 // a = x * 4
sll $t3,$t1,1 // b = y * 2
add $t5,$t0,$t2 // $t5 = x + a
add $t6,$t1,$t3 // $t6 = y + b
sub $t4,$t5,$t6 // z = (x+a)-(y+b)
B. x = y + a[5]
Giả sử mỗi phần tử của mảng a là một word/từ nhớ 4 bytes.
Trả lời.
a, x, y: $s0, $t1, $t2
lw $t0,20($s0) // $t0 = a[5] add $t1,$t2,$t0
// x = y + a[5]
Câu 2: Phân biệt sự khác nhau giữa Big Endian và Little Endian. MIPS sử dụng Big End hay Little
End?
Câu 3: Cho các cặp số x, y như sau:
x
4
12
19
60
y
- 6
- 9
- 12
88
lOMoARcPSD| 58137911
Hãy biểu diễn x, y theo nhị phân 8 bit có dấu bù 2 và thực hiện tính x + y theo hệ nhị phân.
Để biểu diễn số âm dạng 2, chúng ta nghịch đảo các bit của biểu diễn nhị
phân của số dương tương ứng rồi cộng thêm 1.
Trả lời.
* x = 4, y = -6 x=0000 0100
6 = 4 + 2 = 0000 0110
y = -6 = !(0000 0110) + 1 = 1111 1001 + 1 = 1111 1010
0000 0100 1111
1010
---------
1111 1110 -> -2
* x = 12, y = -9 x=12 = 8 + 4 =
0000 1100 9 = 8 + 1 = 0000
1001 y = -9 = !(0000 1001) + 1
= 1111 0110 + 1 = 1111 0111
0000 1100
1111 0111
---------
0000 0011 -> 3
* x = 19,y = -12 x = 19 = 16 + 2
+ 1 = 0001 0011 12 = 8 + 4 =
0000 1100
y = -12 = !(0000 1100) + 1 = 1111 0011 + 1 = 1111 0100
0001 0011
1111 0100 ---------
0000 0111 -> 7
* x = 60, y = 88 x = 60 = 32 + 16 + 8
+ 4 = 0011 1100 y = 88 = 64 + 16 +
8 = 0101 1000
lOMoARcPSD| 58137911
0011 1100 0101
1000
---------
1001 0100 = -128 + 16 + 4 = -108 (overflow: tràn s)
Câu 4: Liệt kê các định dạng lệnh của MIPS.
Trả lời.
R, I, J
Hãy biểu diễn nhị phân lệnh: add $t0, $s1, $s2
$t0=8
$s1=17
$s2=18
000000 10001 10010 01000 00000 100000 op
rs rt rd shamt func
Câu 5: Mô tả các bước chuyển đổi một chương trình C thành mã máy thực thi trên máy tính.
Câu 6: Cho đoạn mã sau:
If (x > 0) h = 0 else h = x với x, h
được lưu trong $s0, $s1. Hãy dịch sang assembly MIPS đoạn mã trên.
slti $t0,$s0,0 // $t0 = 1 nếu x < 0, $t0 = 0 nếu x>= 0 beq
$t0,$zero,else // Nhảy đến else nếu x >= 0 addi $s1,$zero,0
// h = 0 j exit
else: addi $s1,$s0,0// h = x
exit:

Preview text:

lOMoAR cPSD| 58137911
BÀI TẬP KIẾN TRÚC MÁY TÍNH KIẾN TRÚC BỘ LỆNH ---
Câu 1: Hãy tìm mã hợp ngữ MIPS tương đương với chương trình C sau: A.
x = 5 y = x – 2 a = x * 4 b = y * 2
z = (x + a) – (y + b) Biết
rằng các biến x, y, a, b là các số nguyên 32 bit. Trả lời. addi $t0,$zero,5 // x = 5 addi $t1,$t0,-2 // y = x - 2 sll $t2,$t0,2 // a = x * 4 sll $t3,$t1,1 // b = y * 2 add $t5,$t0,$t2 // $t5 = x + a add $t6,$t1,$t3 // $t6 = y + b sub $t4,$t5,$t6 // z = (x+a)-(y+b) B. x = y + a[5]
Giả sử mỗi phần tử của mảng a là một word/từ nhớ 4 bytes. Trả lời. a, x, y: $s0, $t1, $t2
lw $t0,20($s0) // $t0 = a[5] add $t1,$t2,$t0 // x = y + a[5]
Câu 2: Phân biệt sự khác nhau giữa Big Endian và Little Endian. MIPS sử dụng Big End hay Little End?
Câu 3: Cho các cặp số x, y như sau: x 4 12 19 60 y - 6 - 9 - 12 88 lOMoAR cPSD| 58137911
Hãy biểu diễn x, y theo nhị phân 8 bit có dấu bù 2 và thực hiện tính x + y theo hệ nhị phân.
• Để biểu diễn số âm dạng bù 2, chúng ta nghịch đảo các bit của biểu diễn nhị
phân của số dương tương ứng rồi cộng thêm 1. Trả lời. * x = 4, y = -6 x=0000 0100 6 = 4 + 2 = 0000 0110
y = -6 = !(0000 0110) + 1 = 1111 1001 + 1 = 1111 1010 0000 0100 1111 1010 --------- 1111 1110 -> -2
* x = 12, y = -9 x=12 = 8 + 4 = 0000 1100 9 = 8 + 1 = 0000
1001 y = -9 = !(0000 1001) + 1 = 1111 0110 + 1 = 1111 0111 0000 1100 1111 0111 --------- 0000 0011 -> 3
* x = 19,y = -12 x = 19 = 16 + 2 + 1 = 0001 0011 12 = 8 + 4 = 0000 1100
y = -12 = !(0000 1100) + 1 = 1111 0011 + 1 = 1111 0100 0001 0011 1111 0100 --------- 0000 0111 -> 7
* x = 60, y = 88 x = 60 = 32 + 16 + 8
+ 4 = 0011 1100 y = 88 = 64 + 16 + 8 = 0101 1000 lOMoAR cPSD| 58137911 0011 1100 0101 1000 ---------
1001 0100 = -128 + 16 + 4 = -108 (overflow: tràn số)
Câu 4: Liệt kê các định dạng lệnh của MIPS. Trả lời. R, I, J
Hãy biểu diễn nhị phân lệnh: add $t0, $s1, $s2 $t0=8 $s1=17 $s2=18
000000 10001 10010 01000 00000 100000 op rs rt rd shamt func
Câu 5: Mô tả các bước chuyển đổi một chương trình C thành mã máy thực thi trên máy tính.
Câu 6: Cho đoạn mã sau:
If (x > 0) h = 0 else h = x với x, h
được lưu trong $s0, $s1. Hãy dịch sang assembly MIPS đoạn mã trên.
slti $t0,$s0,0 // $t0 = 1 nếu x < 0, $t0 = 0 nếu x>= 0 beq
$t0,$zero,else // Nhảy đến else nếu x >= 0 addi $s1,$zero,0 // h = 0 j exit else: addi $s1,$s0,0// h = x exit: