


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: