打印MIPS注册内容

时间:2014-10-04 22:23:27

标签: assembly mips system-calls spim

我正在尝试将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

2 个答案:

答案 0 :(得分:1)

我认为你的意思是你想要十六进制输出,因为ASCII输出将是其他字母。

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

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

答案 1 :(得分: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