MIPS十进制到二进制的转换代码正在工作,但结果必须反转,如何?
我有一个关于mips的项目,关于十进制到二进制的转换,我设法写了代码,它工作得很好,但正如大家所知,当我们在纸上进行十进制到二进制的转换时,我们写的结果是相反的,这是关键点,因为我的程序按正常顺序写1和0,因为它只是在屏幕上打印,所以我不能给出一个答案命令将其反转 我应该如何反转它我应该在数组中存储变量并反转它或使用堆栈请我的知识非常低(正如你从代码中看到的),我被它卡住了。请帮助我MIPS十进制到二进制的转换代码正在工作,但结果必须反转,如何?,mips,Mips,我有一个关于mips的项目,关于十进制到二进制的转换,我设法写了代码,它工作得很好,但正如大家所知,当我们在纸上进行十进制到二进制的转换时,我们写的结果是相反的,这是关键点,因为我的程序按正常顺序写1和0,因为它只是在屏幕上打印,所以我不能给出一个答案命令将其反转 我应该如何反转它我应该在数组中存储变量并反转它或使用堆栈请我的知识非常低(正如你从代码中看到的),我被它卡住了。请帮助我 .data ms1_msg:.asciiz "Enter The Number:" .text .globl m
.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
你的标题是“二进制到十进制”,但是你的描述和代码暗示了“十进制到二进制”,所以我假设是后者
不需要缓冲区将数字显示为二进制字符串。这只是一个移动和掩蔽的问题,你可以按照你想要的任何顺序来做
例如,以下代码将以二进制表示形式打印一个值,并省略前导零:
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");
uint32\u t值=1234;
bool foundAOne=false;
int位=31;
printf(“二进制中的%d是”,值);
做{
//检查最高有效位(即“最左边”位)
如果(值&0x8000000){
foundAOne=真;
printf(“1”);
}否则{
if(foundAOne | |位==0){
printf(“0”);
}
}
位--;
//移出当前msb并一步移动所有其他位
//左边
值我修正了这个错误,我需要十进制到二进制的转换,但是因为我在循环中用li$v0,1打印1和0,我不知道如何反转它。这是因为你要除以2并检查余数,这实际上是相同的(尽管速度较慢)正如我在回答中所解释的那样,你也可以按相反的顺序处理这些位,从而得到正确的打印输出。我很难将你的代码完全转换成mips,但我会尝试,谢谢你…我没有使用掩码方法,我试着在内存中放入变量(sw)尝试读取它们(lw),然后我计划反转读取过程(lw从最后一个一直到第一个),但在写入读写内存代码后,我意外地使用了一种方法,我的新打印循环现在以相反的方式写入二进制(正确的形式)发生这种情况是因为我以相反的顺序阅读了1和0,无论如何,你是唯一一个给出答案的人,答案也在这里,所以我给了你问题的答案。谢谢你。。。
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");