如何颠倒程序集中数组的顺序?
现在我的代码给我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
回答:
至少有两个实际的/易选项
1)启动从专用于目标串的存储器区域的端部和递减一个指针(确保字符串与ASCII零结束) 。
mov ah,[bx]; dec bx
2)使用堆栈 - 你需要做的工作拆分到两个回路,每N次迭代
- 第一环:推N次
- 下一个循环:弹出N次,写to * bx ++
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
}
通常实现以上是 如何颠倒程序集中数组的顺序? 的全部内容, 来源链接: utcz.com/qa/259473.html