Đề bài:
Cho mã C như sau:
int A[100], B[100];
for (i=1; i < 100; i++)
{
A[i] = A[i-1] + B[i];
}
chuyển mã C này sang Assembly.
Em có tìm được bài giải như sau:
li $t0, 1 # Starting index of i
li $t5, 100 # Loop bound
loop:
lw $t1, 0($a1) # Load A[i-1]
lw $t2, 4($a2) # Load B[i]
add $t3, $t1, $t2 # A[i-1] + B[i]
sw $t3, 4($a1) # A[i] = A[i-1] + B[i]
addi $a1, 4 # Go to i+1
addi $a2, 4 # Go to i+1
addi $t0, 1 # Increment index variable
bne $t0, $t5, loop # Compare with Loop Bound
halt:
nop
Anh chị nào biết thì chỉ dùm em 2 dòng lw với ạ. Em không hiểu, nếu code ghi lw $t1, 0($a1) thì phải load a1[0] chứ sau lại a[i-1]?
Tương tự như dòng dưới là load s2[1] chứ sao b[i] được?
Cho mã C như sau:
int A[100], B[100];
for (i=1; i < 100; i++)
{
A[i] = A[i-1] + B[i];
}
chuyển mã C này sang Assembly.
Em có tìm được bài giải như sau:
li $t0, 1 # Starting index of i
li $t5, 100 # Loop bound
loop:
lw $t1, 0($a1) # Load A[i-1]
lw $t2, 4($a2) # Load B[i]
add $t3, $t1, $t2 # A[i-1] + B[i]
sw $t3, 4($a1) # A[i] = A[i-1] + B[i]
addi $a1, 4 # Go to i+1
addi $a2, 4 # Go to i+1
addi $t0, 1 # Increment index variable
bne $t0, $t5, loop # Compare with Loop Bound
halt:
nop
Anh chị nào biết thì chỉ dùm em 2 dòng lw với ạ. Em không hiểu, nếu code ghi lw $t1, 0($a1) thì phải load a1[0] chứ sau lại a[i-1]?
Tương tự như dòng dưới là load s2[1] chứ sao b[i] được?
Comment