输入第二个值后输入基数后输出错误。
希望你们中的一些人能够识别我的错误:
错误:指令在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
答案 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
,则会跳过初始化。