Đề bài:
Cho mã C như sau:
int A[100], B[100];
for (i=1; i < 100; i++)
{
A* = A[i-1] + B*;
}
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*
add $t3, $t1, $t2 # A[i-1] + B*
sw $t3, 4($a1) # A* = A[i-1] + B*
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* được?
[QUOTE=15520141;359339]
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* được?[/QUOTE]
Em nhìn kĩ lại thử xem, i=1 chứ không phải bằng 0. Vòng lặp đầu tiên thì a1[i-1] = a1[0].
Chào Dũng,
- Trường mình không có môn học nào được gọi là Kỹ thuật Máy tính, nhưng lại có môn học Kiến trúc Máy tính. Hai cái này hoàn toàn khác nhau -> bạn tự xử.
- $a1, $a2 ở đâu ra thế? Không biết 2 thanh ghi này là gì thì sao mình trả lời câu hỏi của bạn được.
Thân ái,
T. Đ. Dương.
[QUOTE=11520537;359351]Chào Dũng,
- Trường mình không có môn học nào được gọi là Kỹ thuật Máy tính, nhưng lại có môn học Kiến trúc Máy tính. Hai cái này hoàn toàn khác nhau -> bạn tự xử.
- $a1, $a2 ở đâu ra thế? Không biết 2 thanh ghi này là gì thì sao mình trả lời câu hỏi của bạn được.
Thân ái,
T. Đ. Dương.[/QUOTE]
Đã nhầm còn quên nữa thì đúng là hậu đậu quá đi mất.
a1 là đc của mảng A ạ, còn a2 là đc của mảng B. Nhưng giờ em hiểu rồi anh:salute:
[QUOTE=15520141;359364]
a1 là đc của mảng A ạ, còn a2 là đc của mảng B. Nhưng giờ em hiểu rồi anh:salute:[/QUOTE]
Ờ, anh đùa thôi, tự giải đi, đi kiếm code của thằng khác mà làm gì, lỡ đâu nó cài bug cho thì hỏng cả đời.