现在我的代码给了我1846倒退。我不知道如何反转数组打印输出1846而不是6481.我想我需要一个循环来反转它但我不知道如何实现它。任何帮助,将不胜感激。谢谢。
.data
enter_message:
.ascii "Enter a binary value:\n"
enter_message_length:
.int 22
name:
.space 50
buffersize:
.int 0
someLength:
.int 50
array:
.space 50
.text
.global _start
_start:
mov $1846, %eax
mov $10, %ebx
mov $0, %edi
While_Loop:
cmp $0, %eax
je Convert_to_ASCII
mov $0, %edx
div %ebx
add $48, %edx
movb %dl, buffersize(%edi)
add $1, %edi
jmp While_Loop
Convert_to_ASCII:
mov $4, %eax
mov $1, %ebx
mov $buffersize, %ecx
mov %edi, %edx
int $0x80
mov $1, %eax
int $0x80
答案 0 :(得分:1)
至少有两个实用/简单的选项
1)从专用于目标字符串的内存区域的末尾开始并递减指针(确保字符串以ascii零结尾)。
mov ah,[bx];
dec bx
2)使用堆栈 - 您需要将操作拆分为两个循环,每次N次迭代
2.1)写入临时字符串(与堆栈相同的机制,但使用更少的空间和更复杂的指令)。
2.5)使用递归
3)由于这个问题基本上是关于十进制到ascii转换的,所以使用一个算法,该算法首先使用最大数量(这通常通过试验减法实现:)
int biggest = 10000;
while (biggest) {
digit='0';
while (number >= biggest) { number -=biggest; digit++; }
output(digit); // tune this to skip leading zeros
biggest/=10; // or read next from a table
}