赏金:为提供代码的任何人提供+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
Run Code Online (Sandbox Code Playgroud)
您可以在上面的代码中包含此内容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:
Run Code Online (Sandbox Code Playgroud)
什么是:
-结果,和| 归档时间: |
|
| 查看次数: |
734 次 |
| 最近记录: |