我有一个mips的项目及其关于十进制到二进制的转换我设法编写代码并且它工作正常但是你们都知道当我们在纸上进行十进制到二进制转换时我们反向写出结果并且这是关键点因为我的程序按正常顺序写1和0,因为它只是在屏幕上打印我不能给出反转它的命令。
如果我将varibles存储在数组中并将其反转或使用堆栈,我该如何反转呢?请知道我的知识非常低(从代码中可以看出)并且我坚持使用它。请帮助我。
.data
ms1_msg:.asciiz "Enter The Number:"
.text
.globl main
main:
la $a0,ms1_msg
li $v0,4
syscall
li $v0,5 #user enters number and it is stored in t0
syscall
move $t0,$v0
addi $t1,$zero,1 #t1=1
addi $t2,$zero,2 #t2=2
add $t5,$zero,1 #t5=1
add $t8,$zero,$zero
add $t6,$zero,$t0 #t6=1
loop1: #trying to find the counter for loop 2
addi $t5,$t5,1
div $t0,$t2
mflo $t4
beq $t4,$t1,loop2
sub $t0,$t0,$t0
add $t0,$t4,$t0
j loop1
取值
loop2: #twith using the counter (t5) I define how many times loop should circle.
addi $t9,$t9,1
div $t6,$t2
mfhi $t7
mflo $t8
move $a0, $t7
li $v0, 1
syscall
beq $t9,$t5,exit
sub $t6,$t6,$t6
add $t6,$t8,$t6
j loop2
exit:
li $v0,10
syscall
答案 0 :(得分:1)
你的标题是“二进制到十进制”,但你的描述和代码暗示“十进制到二进制”,所以我假设后者。
不需要缓冲区将数字显示为二进制字符串。这只是移动和屏蔽的问题,你可以按照你想要的任何顺序进行。
例如,以下代码将在其二进制表示中打印一个值,省略前导零:
uint32_t value = 1234;
bool foundAOne = false;
int bit = 31;
printf("%d in binary is ", value);
do {
// Check the most significant bit (i.e. the "leftmost" bit)
if (value & 0x80000000) {
foundAOne = true;
printf("1");
} else {
if (foundAOne || bit == 0) {
printf("0");
}
}
bit--;
// Shift out the current msb and move all other bits one step
// to the left
value <<= 1;
} while (bit >= 0);
printf("\n");
将其转换为MIPS程序集应该是一项相当简单的任务。