1/62
Looks like no tags are added yet.
Select the RISC-V implementation of *a = b + c. Assume a is a pointer in a1 and b and c are in a2 and a3, respectively.
a. lw t0, 0(a1) add t0, a2, a3
b. add t0, a2, a3 lw t0, 0(a1)
c. sw t0, 0(a1) add t0, a2, a3
d. add t0, a2, a3 sw t0, 0(a1)
d. add t0, a2, a3 → sw t0, 0(a1)
Given the IEEE 754 single-precision word 0xC11A0000, what is its value in decimal?
−9.625
What is the decimal value of register s4 after executing these instructions?
addi s1, zero, 87
addi s2, zero, 53
xor s3, s2, zero
addi s3, s3, 1
add s4, s1, s3
141
What is the decimal value of the immediate operand in addi t0, s0, 0x1FF?
a. -2047
b. -511
c. 2047
d. 511
d. 511
Represent the decimal value −13.75 in IEEE 754 single-precision format. Write the answer in hexadecimal.
0xC15C0000
Consider two processors doing the same job. P1 has a clock rate of 1.5 GHz, an average CPI of 1.8, and executes 3.0E9 instructions. P2 has a clock rate of 2 GHz, an average CPI of 1.2, and executes 4.0E9 instructions. How much faster is P2 than P1? Here xEy means x × 10ʸ.
1.5×
Given the RISC-V R-format machine code 0x007302b3, what is its destination operand?
a. x10
b. x7
c. x5
d. x6
c. x5 (t0)
Assume all numbers are represented as 8-bit signed numbers. What is +65 + 65? Give the decimal answer without spaces.
−126
A processor runs a program at 4 GHz. Type A instructions account for 40% with CPI 1, type B for 35% with CPI 3, and type C for 25% with CPI 5. The program executes 2 billion instructions. What is the total execution time?
a. 1.1 seconds
b. 1.25 seconds
c. 1.35 seconds
d. 1.4 seconds
c. 1.35 seconds
Given the branch instruction beq with machine code 0x01ee8463, what are its source registers?
a. x30, x31
b. x29, x29
c. x5, x6
d. x29, x28
e. x29, x30
e. x29, x30
Select the RISC-V implementation of a = b + *c. Assume a and b are in a1 and a2, respectively, and c is a pointer in a3.
a. li t0, 0(a3) add a1, a2, t0
b. sw t0, 0(a3) add a1, a2, t0
c. la t0, 0(a3) add a1, a2, t0
d. lw t0, 0(a3) add a1, a2, t0
d. lw t0, 0(a3) → add a1, a2, t0
What are the values of t0 and t1 after executing the following code?
li s0, 67 li s1, -13 div t0, s0, s1 rem t1, s0, s1
a. t0 = 0xfffffffb, t1 = 0x00000010
b. t0 = 0x00000005, t1 = 0xfffffffd
c. t0 = 0xfffffffb, t1 = 0x00000005
d. t0 = 0xfffffffb, t1 = 0x00000002
d. t0 = 0xfffffffb, t1 = 0x00000002
Registers s1 and s2 hold the base addresses of integer arrays A and B, respectively. Which C statement is equivalent to the code below?
lw t0, 24(s1) addi s0, t0, 1 sw s0, 20(s2)
a. A[24] = B[20] + 1
b. B[20] = A[24] + 1
c. A[5] = B[6] + 1
d. B[5] = A[6] + 1
d. B[5] = A[6] + 1
What is the destination address of the sw instruction below, in hexadecimal?
li s0, 0x1001BCDE addi s1, s0, 0x321 sw s0, 1(s1)
0x1001C000
Assume the first instruction starts at 0x00400000. What is the decimal value of the encoded 12-bit immediate field of beq t0, zero, else?
addi s0, zero, 100
slti t0, s0, -100
beq t0, zero, else
addi t2, t2, 1
j endif
else: addi t2, t2, -1
endif: nop
a. 8
b. 3
c. 2
d. 6
d. 6 (the branch target is 12 bytes ahead)
Given the memory contents below on a little-endian RISC-V system, what is the value of s0 after the code executes?
ADDRESS VALUE
0x10010000 0x1a
0x10010001 0x2b
0x10010002 0x3c
0x10010003 0x4d
0x10010004 0x5e
0x10010005 0x6f
li $t1, 0x10010004
addi $t1, $t1, -4
lh $s0, 2($t1)
a. 0x00003c4d
b. 0x00006f5e
c. 0x3c4d5e6f
d. 0x00002b1a
e. 0x4d3c2b1a
f. 0x00004d3c
f. 0x00004d3c
A 32-bit integer array A[] has base address 0x20230200. Which element will t0 hold after the code executes?
lui s0, 0x20230 addi s0, s0, 0x20C lw t0, 4(s0)
a. A[1]
b. A[2]
c. A[5]
d. A[0]
e. A[3]
f. A[4]
f. A[4]
The RISC-V stack grows toward lower addresses. Which code is appropriate to allocate and store one word on the stack?
a. addi sp, sp, -4 sw s0, 0(sp)
b. addi sp, sp, 0 sw s0, 0(sp)
c. addi sp, sp, 4 sw s0, 0(sp)
d. addi sp, sp, -8 sw s0, 4(sp)
a. addi sp, sp, -4 → sw s0, 0(sp)
Which instructions store PC + 4 in ra before transferring control?
a. j
b. jr
c. jal
d. jalr
e. beq
c and d. jal and jalr, when rd is ra
What is the hexadecimal value of s2 after executing this RISC-V code?
li s0, 1
lui s1, 0xFFFFF
ori s1, s1, 2047
add s2, s0, s1
0xFFFFF800
What is the value of s0 after executing the following code?
.data
x: .byte -24
.text
la t0, x
lb s0, 0(t0)
a. 0xffe8
b. 0xe8
c. 0x000000e8
d. 0xffffffe8
d. 0xffffffe8
Select the RISC-V implementation of a += 0x12345678. Assume a is in s0.
a. li t0, 0x12345 addi t0, t0, 0x678 add s0, s0, t0
b. lui t0, 0x1234 addi t0, t0, 0x5678 add s0, s0, t0
c. lui t0, 0x12345 addi t0, t0, 0x678 add s0, zero, t0
d. lui t0, 0x12345 addi t0, t0, 0x678 add s0, s0, t0
d. lui t0, 0x12345 → addi t0, t0, 0x678 → add s0, s0, t0
What is the decimal value of s5 after executing the following code?
.data: A: .word 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15
.text
li s1, 0
li s3, 10
la s2, A
loop:
add t1, s1, s1
add t1, t1, t1
add t1, t1, s2
lw t0, 0(t1)
add s5, s5, t0
addi s1, s1, 2
bne s1, s3, loop
25
What hexadecimal value is stored in s2 after executing the program on a little-endian RISC-V CPU?
.data
A: .word 0xa1b2c3d4
.text
la t0, A
lb s1, 0(t0)
andi s2, s1, 0xf0
a. 0x000000c0
b. 0x000000a0
c. 0x000000c3
d. 0x000000d0
d. 0x000000d0
What is the output of the following program?
.text
li t0, -2
li t1, 2
blt t0, t1, else
li a0, 1
addi a0, a0, 5
j print
else:
li a0, 2
addi a0, a0, 7
print:
li a7, 1 ecall
a. 1
b. 2
c. 7
d. 5
e. 6
f. 9
f. 9
Assume t0 holds the decimal value 512. What range of t1 causes signed overflow when add t2, t0, t1 is executed?
a. 0x7FFFD00 - 0x7FFFFFFF
b. 0x7FFFDFF - 0x7FFFFFFF
c. 0x7FFFFE00 - 0x80000000
d. 0x7FFFFE00 - 0x7FFFFFFF
d. 0x7FFFFE00–0x7FFFFFFF
What is the output of the following program?
.text
li t0, -10
li t1, 10
bltu t0, t1, else
li a0, 10
addi a0, a0, 5
j print
else:
li a0, 20
addi a0, a0, 7
print:
li a7, 1 ecall
a. 15
b. 20
c. 7
d. 27
e. 5
f. 10
a. 15
Which of the following instructions can be used to clear s0?
a. AND s0, s0, zero
b. XOR s0, s0, s0
c. XOR s0, s0, zero
d. AND s0, s0, s0
a and b. AND s0, s0, zero and XOR s0, s0, s0
Which of the following instructions have a 20-bit immediate field?
a. lui
b. auipc
c. jal
d. sw
e. lw
f. addi
g. beq
a, b, and c. lui, auipc, and jal
Which of the following is equivalent to the RISC-V pseudoinstruction li t0, 0x20241120?
a. lui t0, 0x202411 ori t0, t0, 0x20
b. lui t0, 0x2024 addi t0, t0, 0x1120
c. lui t0, 0x2024 ori t0, t0, 0x1120
d. lui t0, 0x20241 addi t0, t0, 0x120
d. lui t0, 0x20241 → addi t0, t0, 0x120

Bản đồ bộ nhớ của hệ thống RISC-V 32-bit, lưu theo thứ tự đầu nhỏ. Mỗi dòng liệt kê bốn byte theo thứ tự địa chỉ tăng dần.
Hãy cho biết giá trị số 32-bit ở địa chỉ 0x400000, ở hệ 16. Ví dụ 0x12345678.
0x007302B3
Sau đoạn lệnh hợp ngữ bên dưới, hai thanh ghi s0 và t1 bằng bao nhiêu?
lui s0, 0x400 addi s0, s0, 0x18 lh t1, 0(s0)
s0 = 0x00400018, t1 = 0xFFFFF0EF (lh mở rộng dấu).
Lệnh ở địa chỉ 0x400014 có thanh ghi đích rd là gì? Ví dụ t6.
s3 (x19)
Lệnh thứ 3 được trình bày trong bản đồ bên là lệnh tương đương với phép chia. Đó là phép chia với hằng số bằng mấy? Ví dụ 2, 7, 8, 15.
128 (srli dịch phải 7 bit).
Hằng số của lệnh ở địa chỉ 0x400008 bằng mấy? Viết ở hệ 16. Ví dụ 0x1234.
0x7
Hãy cho biết thao tác của lệnh ở địa chỉ 0x400010 là gì. Ví dụ add, bne, lui.
beq
Giả định bản đồ chứa mảng A gồm 3 phần tử 8-bit có dấu, ở địa chỉ cơ sở 0x400009. Hãy xác định giá trị và sắp xếp chúng tăng dần. Ví dụ 0x11 < 0x12 < 0x13.
0xDE < 0x00 < 0x74 (−34 < 0 < 116).
Sau khi kết thúc chương trình RISC-V sau, thanh ghi a0 = -7. Hãy viết một lệnh bị thiếu ở vị trí …
ADDI t1, x0, 3 … XOR a0, t1, t2 # a0 = -7
ADDI t2, x0, -6
Một phần mềm gồm 15% lệnh tốn 3 chu kỳ, 35% lệnh tốn 5 chu kỳ và 10% lệnh tốn 2 chu kỳ. Các lệnh còn lại tốn 4 chu kỳ. CPI trung bình của phần mềm là bao nhiêu?
4
Hãy liệt kê đủ dạng lệnh trong 6 dạng của RISC-V 32-bit không chứa hằng số.
Dạng R
Nhận xét nào sau đây đúng?
L1: beq t1, t2, L2 addi t3, x0, 0 L2: jal ra, L1 L3: jalr x0, ra, 8
a. Hằng số L1 trong lệnh jal sẽ được biên dịch thành hằng số dương.
b. Hằng số L2 trong lệnh beq sẽ được biên dịch thành hằng số âm.
c. Hằng số 8 ở lệnh jalr và hằng số L2 trong lệnh beq có số lượng bit biểu diễn bằng nhau.
d. Thanh ghi ra sẽ chứa số âm.
c. Hai lệnh có 12 bit được mã hóa cho hằng số.

Bản đồ bộ nhớ của hệ thống RISC-V 32-bit, lưu theo thứ tự đầu nhỏ. Mỗi dòng liệt kê bốn byte theo thứ tự địa chỉ tăng dần.
Hãy cho biết giá trị số 32-bit ở địa chỉ 0x400018, ở hệ 16. Ví dụ 0x12345678.
0xFE9FF0EF
Sau đoạn lệnh hợp ngữ bên dưới, hai thanh ghi s0 và t1 bằng bao nhiêu?
lui s0, 0x400 addi s0, s0, 0x16 lh t1, 0(s0)
s0 = 0x00400016, t1 = 0x00001234
Lệnh ở địa chỉ 0x400000 có thanh ghi nguồn rs1 là gì? Ví dụ t6.
t1 (x6)
Lệnh thứ 3 được trình bày trong bản đồ bên là lệnh tương đương với phép chia. Đó là phép chia với hằng số bằng mấy? Ví dụ 2, 7, 8, 15.
8 (srli dịch phải 3 bit).
Trong bản đồ, lệnh beq duy nhất ở địa chỉ nào? Ví dụ 0x1234.
0x400010
Hãy cho biết thao tác của lệnh ở địa chỉ 0x400008 là gì. Ví dụ add, bne, lui.
srli
Giả định bản đồ chứa mảng A gồm 3 phần tử 8-bit có dấu, ở địa chỉ cơ sở 0x400014. Hãy xác định giá trị và sắp xếp chúng tăng dần. Ví dụ 0x11 < 0x12 < 0x13.
0xB7 < 0x34 < 0x59 (−73 < 52 < 89).
Sau khi kết thúc chương trình RISC-V sau, thanh ghi a0 = -5. Hãy viết một lệnh bị thiếu ở vị trí …
ADDI t1, x0, -2 … XOR a0, t1, t2 # a0 = -5
ADDI t2, x0, 5
Một phần mềm gồm 10% lệnh tốn 4 chu kỳ, 40% lệnh tốn 6 chu kỳ, 30% lệnh tốn 8 chu kỳ, còn lại là lệnh 10 chu kỳ. CPI trung bình của phần mềm là bao nhiêu?
7,2
Hãy liệt kê đủ các dạng lệnh trong 6 dạng của RISC-V 32-bit có hằng số và độ dài của hằng số là 20 bit.
Dạng U và J (20 bit được mã hóa).
Nhận xét nào sau đây đúng?
L1: jal ra, L2 addi t3, x0, 0 L2: beq t1, t2, L1 L3: jalr x0, ra, 8
a. Hằng số L1 trong lệnh beq sẽ được biên dịch thành hằng số âm.
b. Hằng số L2 trong lệnh jal sẽ được biên dịch thành hằng số âm.
c. Hằng số L2 trong lệnh jal có phạm vi biểu diễn nhỏ hơn hằng số L1 trong lệnh beq.
d. Thanh ghi ra sẽ chứa địa chỉ của lệnh jalr ở dòng 4.
a. Hằng số L1 trong lệnh beq sẽ được biên dịch thành hằng số âm.

Bản đồ bộ nhớ của hệ thống RISC-V 32-bit, lưu theo thứ tự đầu nhỏ. Mỗi dòng liệt kê bốn byte theo thứ tự địa chỉ tăng dần.
Hãy cho biết giá trị số 32-bit ở địa chỉ 0x400008, ở hệ 16. Ví dụ 0x12345678.
0x038B0B13
Sau đoạn lệnh hợp ngữ bên dưới, hai thanh ghi s0 và t1 bằng bao nhiêu?
lui s0, 0x400 addi s0, s0, 0x16 lb t1, 0(s0)
s0 = 0x00400016, t1 = 0x0000001F
Lệnh ở địa chỉ 0x400000 có thanh ghi nguồn rs2 là gì? Ví dụ t6.
t2 (x7)
Lệnh cuối cùng được trình bày trong bản đồ bên là lệnh tương đương với phép nhân. Đó là phép nhân với hằng số bằng mấy? Ví dụ 2, 7, 8, 15.
4 (slli dịch trái 2 bit).
Lệnh dạng U ở địa chỉ 0x400004 có toán hạng là hằng số bằng mấy? Viết ở hệ 16. Ví dụ 0x1234.
0x40
Hãy cho biết thao tác của lệnh ở địa chỉ 0x400004 là gì. Ví dụ add, bne, lui.
lui
Giả định bản đồ chứa mảng A gồm 3 phần tử 8-bit có dấu, ở địa chỉ cơ sở 0x400009. Hãy xác định giá trị và sắp xếp chúng tăng dần. Ví dụ 0x11 < 0x12 < 0x13.
0x8B < 0x03 < 0x0B (−117 < 3 < 11).
Viết một lệnh RISC-V còn thiếu để thực hiện biểu thức a = (a + b) * 64 - a.
ADD t2, s3, s4 … SUB s3, t3, s4
SLLI t3, t2, 6 (s4 giữ a đầu vào, s3 nhận kết quả).
Biết t0 = 0x35B9D2E4, t1 = 0x0F0F0F0F. Giá trị của t2 bằng bao nhiêu sau khi thực hiện lệnh XOR t2, t0, t1?
0x3AB6DDEB
Giải thích nào về lệnh RISC-V bne t1, t2, -16 là đúng?
a. Nếu t1 != t2 thì rẽ nhánh về 4 lệnh sau lệnh hiện thời.
b. Nếu t1 != t2 thì rẽ nhánh về 4 lệnh trước lệnh hiện thời.
c. Nếu t1 == t2 thì rẽ nhánh về 4 lệnh sau lệnh hiện thời.
d. Nếu t1 == t2 thì rẽ nhánh về 4 lệnh trước lệnh hiện thời.
b. Nếu t1 != t2 thì rẽ nhánh về 4 lệnh trước lệnh hiện thời.
Bộ xử lý RISC-V có tần số xung nhịp 1 GHz thực hiện phần mềm gồm 200.000 lệnh máy với CPI = 3, 200.000 lệnh máy với CPI = 4 và 300.000 lệnh máy với CPI = 2. Hỏi phần mềm đó chạy trong bao lâu?
2 ms (0,002 giây).