这是C代码:
unsigned int reverse(register unsigned int x)
{
x = (((x & 0xaaaaaaaa) >> 1) | ((x & 0x55555555) << 1));
x = (((x & 0xcccccccc) >> 2) | ((x & 0x33333333) << 2));
x = (((x & 0xf0f0f0f0) >> 4) | ((x & 0x0f0f0f0f) << 4));
x = (((x & 0xff00ff00) >> 8) | ((x & 0x00ff00ff) << 8));
return((x >> 16) | (x << 16));
}
这是我的MIPS汇编代码:
.data
prompt:
.asciiz " please enter a binary number of up to 8 digits: \n"
prompt2:
.asciiz " / "
.text
.globl main
main:
la $a0, prompt
li $v0,4
syscall
li $v0,5
syscall
move $t3,$v0
andi $t0,$t3,0xAAAAAAAA
srl $t1,$t0,1
andi $t0,$t3,0x55555555
sll $t2,$t0,1
or $t3,$t2,$t1
andi $t0,$t3,0xCCCCCCCC
srl $t1,$t0,2
andi $t0,$t3,0x33333333
sll $t2,$t0,2
or $t3,$t2,$t1
andi $t0,$t3,0xF0F0F0F0
srl $t1,$t0,4
andi $t0,$t3,0x0F0F0F0F
sll $t2,$t0,4
or $t3,$t2,$t1
andi $t0,$t3,0xFF00FF00
srl $t1,$t0,8
andi $t0,$t3,0x00FF00FF
sll $t2,$t0,8
or $t3,$t2,$t1
srl $t1,$t3,16
sll $t2,$t3,16
or $t3,$t2,$t1
la $a0,prompt2
li $v0,4
syscall
move $a0,$t3
li $v0,1
syscall
li $v0,10
syscall
我尝试将C代码转换为MIPS但它无法正常工作。输出通常是负整数。请帮我将此代码转换为MIPS程序集。我的代码出了什么问题?
答案 0 :(得分:0)
我建议您也尝试使用mips编译器在汇编阶段后停止编译,以防您遇到麻烦。然后,您可以比较生成的代码。我建议不进行优化编译。
此链接可以帮助您(假设您可以访问mips编译器)。 How can I compile to assembly with gcc
答案 1 :(得分:0)
我犯了一个大错。我不希望输出为ASCII码。当我们输入1时它等于00000031并且它意味着二进制比特0000 0000 0000 0000 0000 0000 0011 0001 ..但我认为数字1的二进制比特等于0000 0001 ..这就是为什么输出与我的不同期待.. - user3003505