【问题标题】:MIPS assembly: How do you read a string as ascii characters and put it into an arrayMIPS 汇编:如何将字符串读取为 ascii 字符并将其放入数组中
【发布时间】:2020-11-17 01:48:11
【问题描述】:

例如,你有一个字符串和一个缓冲区:

text: .asciiz "111100010"
buffer: .space 1000

如何将每个数字转换为 ascii 字符并将它们存储在缓冲区中?

即缓冲区应该有这个内容:(“1”的ASCII码是49,“0”是48)

494949494848484948

我知道如何单独打印它们,因为我可以使用系统调用代码 1 将它们解释为整数

main:
    la $a0,text
    j print
    
    print_done:
    
    li $v0,10
    syscall
    
print:  move $s0,$a0  #save addr 
print_loop:

    #addi $s0,$s0,20
    
    lb $s1,($s0)
    beqz $s1,print_done    # check end of string  
    li $v0,1        # print as int
    move $a0,$s1
    syscall

    addi $s0,$s0,1      # move forward
    j print_loop

但是这些字符是分开打印出来的。如何将它们全部放入缓冲区并一起打印?

谢谢!

【问题讨论】:

  • 如果您只有 0 或 1,您可以简单地迭代字符串并在看到 0 或 1 时放入 48 或 49。是什么导致了您的问题?
  • 是的,但我每次都必须检查它是 0 还是 1。由于“0”只有48,有没有办法直接将“0”的ascii码放入缓冲区?

标签: assembly mips mips32


【解决方案1】:

MARS 有一组丰富的系统调用。您可以将数字以十进制(有符号或无符号)、十六进制、二进制等形式打印到控制台。

但是,尽管功能很丰富,但它们绝不是一个完整的编程模型。这些不同的打印表单只能打印到控制台——没有这些版本可以打印到文件或打印到内存中的字符串缓冲区。

如果要将十进制数字打印到缓冲区,则必须对其进行编程,以逐个字符地打印。在您的情况下,如果输入只能选择两个字符,则工作相对简单。

您作为字符串“101”的输入将变为字符串“494849”的输出。对于输入字符串中的每个字符,您将两个字符添加到缓冲区。如果输入字符为“1”,则将“4”后跟“9”添加到缓冲区,否则将“4”后跟“8”添加到缓冲区。附加一个尾随的 null,然后您可以将内存缓冲区打印为字符串。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-31
    • 1970-01-01
    • 2012-09-11
    • 2018-12-14
    • 1970-01-01
    • 2013-03-07
    相关资源
    最近更新 更多