0

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

1 回答 1

1

至少有两个实用/简单的选择

1)从专用于目标字符串的内存区域的末尾开始并递减一个指针(确保字符串以 ascii 零结尾)。

  mov ah,[bx];
  dec bx

2)使用堆栈——你需要将操作分成两个循环,每个循环N次

  • 第一个循环:推N次
  • 下一个循环:弹出 N 次并写入 *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
}
于 2013-04-23T05:54:44.487 回答