如何颠倒程序集中数组的顺序?
现在我的代码给我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






