assembly 如何在MIPS中使用syscall打印二进制/十六进制时截断前导零

rqdpfwrv  于 5个月前  发布在  其他
关注(0)|答案(1)|浏览(48)

我有这样一段代码,它使用syscall将十进制转换为二进制:

.text 

main:

    li $v0, 35
    li $a0, 3
    syscall

字符串
它将3转换为二进制。这是输出:

00000000000000000000000000000011


这是打印Hex:

0x00000003


但是我想截断二进制和十六进制的前导零。有什么想法吗?我还想从十六进制中删除'x'

qyyhg6bp

qyyhg6bp1#

简而言之,没有办法使用MARS/QtSpim系统调用来进行这种格式化。
我很惊讶我们没有一个标准答案!
MARS环境似乎被设计为允许简单的编程,但它还远未完成,而且实际上是不可定制的,因此您需要编写代码来完成这样的事情。
在另一个环境中,我们可以将打印Map到一个字符串(或一个文件)进行后期处理,比如删除前导零,但这里不行。这些打印函数只会进入控制台,所以没有办法捕获它们的输出并重新处理。
在另一个环境中,我们会有通用的格式化功能,比如printf,但这里没有。这些模拟器也没有标准库,所以我们只能得到系统调用。
这些模拟器没有理由做更多的事情,因为它们的目标是教学。

相关问题