【问题标题】:Print MIPS Register Contents打印 MIPS 寄存器内容
【发布时间】:2014-10-04 22:23:26
【问题描述】:

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

【问题讨论】:

    标签: assembly mips system-calls spim


    【解决方案1】:

    我假设你的意思是你想要十六进制输出,因为 ASCII 输出会带有其他字母。

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

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

    【讨论】:

    • 我会尝试重申我想做的事情。我自己无法理解十六进制、ASCII 等,所以很难解释……例如,我有寄存器 $t1 = a1b2c3d4。我想做的就是将这个“a1b2c3d4”打印到控制台。据我了解,我需要获取寄存器的单个字符,确定是 a-f 还是 0-9,添加适当的偏移量,然后打印为 char(系统调用 11)?我只是不确定是否有一种简单的方法可以在不将每个单独的字符加载到内存中进行打印的情况下做到这一点。理想情况下,我一次打印所有“a1b2c3d4”,而不是一个字母一个字母。
    • @user3290553 不幸的是,SPIM 没有简单的系统调用来做到这一点。您不必一定要查找字符,因为对于 0-9,ASCII 值是您的数字 + ASCII 值“0”。对于 a-f,您添加 int('a')-10。详情看这里stackoverflow.com/questions/19370600/…
    【解决方案2】:

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

    .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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-03-29
      • 2015-12-30
      • 1970-01-01
      • 2015-06-25
      • 2017-07-30
      • 1970-01-01
      • 1970-01-01
      • 2020-10-23
      相关资源
      最近更新 更多