Chuyển code C sang mã assembly MIPS

Hiện tại mình đang đọc tới chương 2 của quyển computer organization and design 2012 four edition, có gặp 1 VD chuyển một đoạn code viết bằng C sang dạng mã assembly. Đoạn code viết bằng C có nội dung như sau:

int sum(int n, int acc)
{
	if(n > 0)
		return sum(n - 1, acc + n);
	else
		return acc;
}

Mình đã chuyển sang mã assembly như sau:

sum:
	addi $sp, $sp, -12
	sw $a0, 8($sp)
	sw $a1, 4($sp)
	sw $ra, 0($sp)
	slti $t0, $a0, 1
	beg $t0, $zero, L1
	addi $v0, $a1, $zero
	addi $sp, $sp, 12
	jr $ra
	L1:
		addi $a0, $a0, -1
		addi $a1, $a1, $a0
		jal sum
	lw $a0, 8($sp)
	lw $a1, 4($sp)
	lw $ra, 0($sp)

Nhờ mọi người kiểm tra giúp mình.

3 dòng lw đâu có reach tới được. Mà cái sum() này cũng đâu cần push lên stack tạm làm gì. Bỏ 3 dòng sw với 3 dòng lw là được rồi.

2 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?