如何颠倒程序集中数组的顺序?

现在我的代码给我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

回到顶部