将int转换为字符串

时间:2013-12-11 22:31:10

标签: mips mips32

在MIPS程序集中,如何将整数(如255)解析为字符串'2' '5' '5'

255可能在$t0

'2' '5' '5'然后可以存储在$t1中然后打印。

我该怎么做?

3 个答案:

答案 0 :(得分:2)

这是Python中的版本。只需将其翻译成mips程序集即可。

def to_str(n):
    output = ''
    while True:
        m = n % 10
        output = str(m) + output
        n = n / 10
        if n == 0:            
            break
    print(output)

这个想法是在基础上(在这种情况下为10)重复得到分裂的余数。 例如:

n = 255
n % 10 -> 5, n = 255 / 10 = 25
n % 10 -> 5, n = 25 / 10 = 2
2 % 10 -> 2, n = 2 / 10 = 0

现在,只需要获得除法的剩余部分,然后按相反的顺序打印它们。

这是mips程序集中的一个解决方案:

.data
    N: .word 2554
    digits: .space 16 # number of digits * 4 bytes
    num_digits: .word 3 # number of digits - 1

.text
    lw $t0, N # $t0 = N
    lw $t1, num_digits
    sll $t1, $t1, 2
    la $s0, digits
    add $s0, $s0, $t1
loop:
    div $t2, $t0, 10
    mfhi $t2 # remainder is in $t2
    sw $t2, 0($s0)
    subi $s0, $s0, 4
    div $t0, $t0, 10
    beqz $t0, print
    b loop
print:
    # print contents of digits
    li $t0, 0 # loop counter
    lw $t1, num_digits
    la $s0, digits
print_loop:
    bgt $t0, $t1, end
    # print the digit
    lw $a0, 0($s0)
    li $v0, 1
    syscall

    # put a space between digits
    la $a0, 32
    li $v0, 11
    syscall

    # move the next digit and increment counter
    addi $s0, $s0, 4
    addi $t0, $t0, 1    
    b print_loop
end:

这导致以下输出:

2 5 5 4 
-- program is finished running (dropped off bottom) --

答案 1 :(得分:0)

将数字转换为另一个基数中的字符串的想法基本上是重复除以基数,在本例中为10,并向后写入余数。这是最简单的解决方案。

对于十进制,你有另一个选项,即double dabble,它可以将二进制转换为压缩BCD而不进行除法。从那时起,您可以将半字节解压缩为字符

答案 2 :(得分:0)

Asterisk表现非常出色!我只是在写作,以使他的答案更加完整。

消息

     -- program is finished running (dropped off bottom) --
显示

是因为他没有以

结束他的节目
                  li $v0, 10
                  syscall

您应该始终使用上述行完成程序以正常终止执行。

来自http://logos.cs.uic.edu/366/notes/mips%20quick%20tutorial.htm

e.g. To indicate end of program, use exit system call; thus last lines of program should be:

    li $v0, 10     # system call code for exit = 10
    syscall        # call operating sys