Bounty:为提供代码的任何人提供+50声望点,使此子程序能够使用负数。
我写了一个MIPS程序,将华氏温度转换为摄氏温度。它会打开自己的输出窗口(即UART),并以摄氏度正确显示该值。它在从C到汇编的调用时执行所有这些操作,反之亦然。整个代码发布在下面。
我正在努力让它与负数一起工作。由于某种原因,现在只是画一个空白。如何更改itoa
函数以编写此检查?
任何人都有任何想法如何在MIPS中使用负值?
.ent itoa
itoa:
// putting the stack frame together
addiu sp, sp, -16
sw fp, 12(sp)
move fp, sp
sw a0, 16(fp)
sw a1, 20(fp)
sw s0, 4(fp)
sw s1, 0(sp)
// there is no divide immediate, so using s1
li s1, 10
itoa_div_begin:
divu a0, s1
mfhi s0
mflo a0
addiu s0, s0, 0x30
addiu sp, sp, -1
sb s0, 0(sp)
beq a0, zero, itoa_div_done
nop
j itoa_div_begin
nop
itoa_div_done:
itoa_copy_begin:
lb s0, 0(sp)
sb s0, 0(a1)
addiu sp, sp, 1
subu s1, sp, fp
addiu a1, a1, 1
beq s1, zero, itoa_copy_done
nop
j itoa_copy_begin
nop
itoa_copy_done:
li s0, 0
sb s0, 0(a1)
move v0, a1
lw a0, 16(fp)
lw a1, 20(fp)
lw s0, 4(fp)
lw s1, 0(fp)
// stack frame
move sp, fp
lw fp, 12(sp)
addiu sp, sp, 16
jr ra
nop
.end itoa
答案 0 :(得分:6)
您可以在itoa_div_begin
:
li t0, 0x40000000
and t0, a0, t0
beqz t0, itoa_div_begin
nop
li t0, 45
sb t0, 0(a1)
addi a1, a1, 1
not a0, a0
addi a0, a0, 1
itoa_div_begin:
做什么:
-
,然后