首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >这里怎么输出第二个数字?

这里怎么输出第二个数字?
EN

Stack Overflow用户
提问于 2012-08-30 07:26:06
回答 1查看 622关注 0票数 0

根据规范,我的输出应该是这样的:

代码语言:javascript
复制
00:00
00:01
00:12
01:23
12:34
23:45
34:56
45:67
56:78
67:89
78:9A
89:AB
9A:BC
AB:CD
BC:DE
CD:EF
DE:F0
EF:01
F0:12
01:23
12:34

诸若此类。我编写了两个程序集子程序,一个进行十六进制转换,另一个从测试程序中获取要打印的数字,现在我得到了这个输出,它开始类似于它应该看起来的样子:

代码语言:javascript
复制
0:
1:
2:
3:
4:
5:
6:
7:
8:
9:
A:
B:
C:
D:
E:
F:
0:
1:
2:
3:
4:
5:

因此,我似乎得到了最右边的数字,但我应该如何得到其余的数字呢?它在分配里说

例如:内存位置0x0047114包含二进制值0101 0011 (十六进制0x53)内存位置0x0047115包含二进制值0001 0110 (十六进制0x16)内存位置0x0047116包含二进制值0000 (十六进制0x00)内存位置0x0047117包含二进制值0000 (十六进制0x00)调用者将寄存器r4设置为0x0047114并调用puttime;在新行上输出16:53。

从我最近发布的其他问题中可以获得更多的背景知识,这些问题都是相同的作业,但重点是其中的其他部分:

https://stackoverflow.com/questions/12105322/how-to-proceed-coding-for-this-assignment

加载单词和移动的区别?

https://stackoverflow.com/questions/12152323/why-is-load-word-not-working

我的转换程序是:

代码语言:javascript
复制
.global hexasc 

        .text
        .align 2

hexasc: movi r8, 0x09
        movi r9, 0x0f
        andi r4, r4, 0x0f #keep only 4 bits
        bgt r4, r8, L1  #is x>9?
        movi r2, 0x30
        add r2, r2, r4  
        andi r2, r2, 0xff
        ret  

L1:     movi r2, 0x37
        add r2, r2, r4
        andi r2, r2, 0xff
        ret

我认为上面的内容是正确和有效的,但我不知道如何编写中间部分,该部分获取变量并将其传递给我的子程序:

代码语言:javascript
复制
.macro PUSH reg
        subi    sp, sp, 4
        stw     \reg, 0(sp)
.endm

.macro POP reg
        ldw     \reg, 0(sp)
        addi    sp, sp, 4
.endm

.global puttime 

        .text
        .align 2

puttime: 
        PUSH r31
        ldw r8,0(r4)            # put the variable in register 8
        PUSH r8
        nop
        movi r4, 0x0A           # put newline char in register 4
        movia   r9,putchar      # copy subroutine address to a register
        callr   r9              # call subroutine via register
        POP r8
        mov r4, r8
        call hexasc
        mov r4, r2
        movia   r9,putchar      # copy subroutine address to a register
        callr   r9
        movi r4, 0x3A
        movia r9, putchar
        callr r9
        POP r31
        ret

任何帮助都是非常感谢的。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-08-30 23:53:55

我认为您需要对输入数据中的每个十六进制数字调用两次十六进制。您需要在每次调用十六进制之间将输入数据右移4位,因为十六进制只转换输入数据的底部4位。

顺便说一下,使用PUSH和POP并不是惯用的MIPS代码。在MIPS中,您通常会在输入到例程时从堆栈指针中减去一个常量值,并在退出路由时添加常量值。如下所示:

代码语言:javascript
复制
puttime:
  subi sp, 8       # reserve space for 2 words on the stack
  sw   r31, 4(sp)
  ...
  lw   r31, 4(sp)
  addi sp, 8
  ret
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12191889

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档