汇编代码问题

时间:2016-03-18 05:09:28

标签: assembly mips mips32

所以我一直在学习装配和上课的小项目。 它是一个简单的程序,可以在不使用内置的多指令的情况下将两个数字相乘。相反,它通过移位添加来实现。但我无法在QtSpim控制台中显示结果。

.text

main:

li $v0, 0
li $t0, 1
li $t1, 0
li $a0, 2
li $a1, 3

main_loop:

    beq $a1, $zero, main_end
    beq $a0, $zero, main_end

    and $t1, $t0, $a1
    beq $t1, 1, main_do_add
    beq $t1, 0, main_do_shift

    main_do_add:
        addu $v0, $v0, $a0

    main_do_shift:
        sll $a0, $a0, 1
        srl $a1, $a1, 1

    j main_loop

main_end:
    li $v0, 10

我对装配很新,这是第一个真正的程序。所以我不确定我做错了什么。

1 个答案:

答案 0 :(得分:1)

您只是忘了打印该值。

这是经过更正和注释的程序。注意:我检查你的乘法逻辑,但结果是6,所以我猜这就是你想要的。

我建议在几乎每个asm行添加侧边栏注释,这样您就可以按照逻辑并将其与用于实现它的说明进行比较。

无论如何,这是代码[请原谅无偿的风格清理]:

    .text

main:

    li      $v0,0
    li      $t0,1
    li      $t1,0
    li      $a0,2
    li      $a1,3

main_loop:

    beq     $a1,$zero,main_end
    beq     $a0,$zero,main_end

    and     $t1,$t0,$a1
    beq     $t1,1,main_do_add
    beq     $t1,0,main_do_shift

main_do_add:
    addu    $v0,$v0,$a0

main_do_shift:
    sll     $a0,$a0,1
    srl     $a1,$a1,1

    j       main_loop

main_end:
    # BUGFIX -- this was missing
    move    $a0,$v0                     # get result to argument register
    li      $v0,1                       # print integer
    syscall

    li      $v0,10                      # exit program
    syscall