【问题标题】:How to print the first digits of a number in MIPS Assembly Programming? [duplicate]如何在 MIPS 汇编编程中打印数字的前几位? [复制]
【发布时间】:2014-09-28 18:46:04
【问题描述】:

我是 MIPS 汇编编程的初学者,我想知道在读入数字后如何打印数字的第一个数字。

.data
number_1: .word


.text
#read in first number
li $v0, 5
syscall
sw $v0, number_1

#print first digit
li $v0, 1
lw $a0, number_1
syscall

#end program
li $v0, 10
syscall

例如,如果我输入 590,我只想打印“5”。另外我将如何分别打印接下来的两个数字?

使用上面的代码,它只打印我输入的整数:590 我试过用 lb 而不是 lw,但它打印的是“78”,我猜这个数字是十六进制或其他基数。

提前致谢

【问题讨论】:

  • 用其他语言或伪代码你会怎么做?

标签: assembly mips digits mars-simulator


【解决方案1】:

对于您拥有的这个号码,您需要分别获取第 2 位和第 3 位的数字 mod 10 或 mod 100。 模数是您的下一个数字,您可以重复此操作,直到除法的结果为 0。假设您不使用浮点数。

我对 MIPS 汇编的建议始终是用 C 等高级语言提供通用解决方案,这里有一个类似于我上面概述的解决方案:

int n = 590 ;
while( n >= 10 )
{
    printf( "%d\n", n % 10 ) ;
    n = n / 10 ;
}
printf( "%d\n", n ) ;

【讨论】:

    【解决方案2】:

    数字以十六进制存储在内存中。你想要的是十进制的第一个数字,必须计算出来。对于 3 位数字,整数除以 100 会得到您的结果。通用解决方案可以在here找到。

    【讨论】:

    • 整数以二进制形式存储在内存中。十六进制只是将 4 位二进制块分组为字母数字字符的一种方便人类可读的方式,并且转换只发生在调试器内部。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-20
    相关资源
    最近更新 更多