0

我正在尝试将 MIPS 寄存器中的无符号整数值作为 ASCII 文本打印到控制台。

换句话说,让我们假设 $a0 中有“0x4ab3c823”。我想在 xSPIM 中将“4ab3c823”打印到控制台。

这是我的尝试。我不断得到十进制值,而不是 ASCII。这只是整个程序的一个片段,所以我把剩下的删掉了。

.data
printspace:   .space 8
.text
printHex:
    move    $t0,$a0
    la      $a0,printspace  #Save address of 8 blank bytes to $a0
    sw      $t0,0($a0)      #Copys the integer I want to print to $a0's address in memory
    li      $v0 1
    syscall

    jr      $ra
4

2 回答 2

1

我假设您的意思是您想要十六进制输出,因为 ASCII 输出将与其他字母一起使用。

我认为 SPIM 没有十六进制输出。这意味着您必须逐个字符地打印。这将涉及一次获取 $a0 四个位,并添加一个常量(取决于它是在 0-9 还是 AF 之间)以将其转换为可打印的 ASCII 字符。

在 MARS 模拟器中,li $v0 34以十六进制打印。

于 2014-10-05T03:20:23.257 回答
0

经过一番摆弄,我得到了以下内容来做我需要的事情。为将来的聚会张贴。

.text

hexToConsole:
    #$t0 already contains what we want to print

    li      $t1,58          
    la      $t2,0xf0000000  


    maskAndShift:
            beq     $t0,$zero,exit    
            and     $t3,$t2,$t0           
            sll     $t0,$t0,4               
            srl     $t3,$t3,28              
            addi    $t3,$t3,48              
            blt     $t3,$t1,print     
            addi    $t3,$t3,39              
            b       print

    print:
            move    $a0,$t3                 
            li      $v0,11                  
            syscall
            b       maskAndShift

    exit:
            j       $ra
于 2014-10-05T17:05:54.563 回答