写在开头,我看的版本是RISC-V,不是MIPS
2.22 Exercises
2.1
// f = g + (h - 5);
// f, g and h have been placed in registers x5, x6, x7
addi x7, x7, -5
add x5, x6, x7
2.2
/*
add f, g, h
add f, i, f
*/
f = i + (g + h);
2.3
// B[8] = A[i - j];
//i in x28, j in x29. A in x10, B in x11
sub x30, x28, x29
slli x30, x30, 3
add x31, x10, x30
ld x9, 0(x31)
sd x9, 64(x11)
2.4
B[g * 8] = 2 * A[f * 8] + 8;
2.5
little-endian:
0-7: abcdef12
big-endian:
0-7: 12efcdab
2.6
0xabcdef12 = a * (16^7) + b * (16^6) + c * (16^5) + d *(16^4) + e * (16^3) + f * (16^2) + 1 * 16 + 2
= 2882400018
2.7
//B[8] = A[i] + A[j];
//i in x28, j in x29, A in x10, B in x11
add x30, x10, x28
slli x30, x30, 3
add x31, x10, x29
slli x31, x31, 3
add x30, x30, x31
sd x9, 0(x30)
ld x9, 64(x11)
2.8
A[0] = A[8];
f = A[8] + A[0];
2.9
//addi x30, x10, 8
immediate: 000000001000
rs1: 01010
funct3: 000
rd: 11110
opcode: 0010011
//addi x31, x10, 0
immediate: 000000000000
rs1: 01010
funct3: 000
rd: 11111
opcode: 0010011
//sd x31, 0(x30)
immediate: 0000000
rs2: 11111
rs1: 11110
funct3: 011
immediate: 00000
opcode: 0100011
//ld x30, 0(x30)
immediate: 000000000000
rs1: 11110
funct3: 011
rd: 11110
opcode: 0000011
//add x5, x30, x31
funct7: 0000000
rs2: 11111
rs1: 11110
funct3: 000
rd: 00101
opcode: 0110011
2.10
/*
x5 = 0x8000000000000000, x6 = 0xD000000000000000
*/
2.10.1
//add x30, x5, x6
x30 = 0x5000000000000000
2.10.2
overflow
2.10.3
//sub x30, x5, x6
x30 = 0xB000000000000000
2.10.4
overflow