MIPS输出错误

时间:2014-08-07 15:28:53

标签: mips spim

输入第二个值后输入基数后输出错误。

希望你们中的一些人能够识别我的错误:

错误:指令在0x00400060处引用未定义的符号   [0x00400060] 0x102a0000 beq $ 1,$ 10,0 [hex-0x0040005c]

进展:目前陷入第2步。

我想做的是,

1)用户输入小数值

2)用户输入转换类型

3)根据之前选择的转换类型

,转到所需的子程序

4)显示输出

.data 
prompt: .asciiz "Enter the decimal number to convert: "
base: .asciiz "Select type of base (2 for binary,16 for hexadecimal or 8 for octal): " 
ans1: .asciiz "\nBinary Output is equivalent:"
ans2: .asciiz "\nOctal Output is equivalent:"
ans3: .asciiz "\nHexadecimal Output equivalent:0x" 
result1: .space 8 
.text 
.globl main 
main: 

la $a0, prompt #Display message
li $v0, 4 
syscall
li $v0, 5 
syscall
beq $v0, $zero, Exit #Exit if 0 decimal is entered 
move $t0, $v0   #Else copy value entered into temporaries

askbase:

li $v0, 4
la $a0, base #Display message
syscall
li $v0, 5
syscall
add $t1,$zero,$v0   #Add desired value/base entered into t1

beq $t2,16,hex #if base 16 is entered,goto hex subroutine
beq $t2,8,oct
beq $t2,2,bin

la $a0, ans3 
li $v0, 4 
syscall 
li $t0, 8   # counter 
la $t3, result1 # where answer will be stored 

Hex: 

beqz $t0, Exit  # branch to exit if counter is equal to zero 
rol $t2, $t2, 4 # rotate 4 bits to the left 
and $t4, $t2, 0xf   # mask with 1111 
ble $t4, 9, Sum # if less than or equal to nine, branch to sum 
addi $t4, $t4, 55   # if greater than nine, add 55 

b End 

Sum: 
addi $t4, $t4, 48   # add 48 to result 

End: 
sb $t4, 0($t3)  # store hex digit into result 
addi $t3, $t3, 1    # increment address counter 
addi $t0, $t0, -1   # decrement loop counter 
j Loop 

Exit: la $a0, result1 
li $v0, 4 
syscall 
la $v0, 10 
syscall

2 个答案:

答案 0 :(得分:0)

看起来第29行beq $t2,16,hex的拼写错误应为beq $t2,16,Hex。请注意Hex上的大写字母。您还有许多未定义的标签:Loop,oct,bin ......如果没有这些标签,您将遇到问题。将一些东西设置为占位符是一个好主意(直到你定义了它们的子程序)。也许让他们都分支到Exit:。如果没有实际的标签,汇编程序将无法解析您的分支指令。

答案 1 :(得分:0)

您尚未在$t7中存储任何内容,因此没有特别理由期望$t7等于16。

你可能想写的是:

beq $t1,16,hex

由于$t1是您存储基数的寄存器。

但是,我真的不明白为什么你会想要以当前代码的结构方式跳转。 hex子例程依赖于几个寄存器(如$t0$t3)已初始化为某些值,如果采用beq,则会跳过初始化。