我是这个论坛的新手,所以请原谅我明显的错误。我正在尝试编写一个代码,用ASCII码字符转换机器编号的单个数字。我的策略是先将它们转换为除法并将其余部分放在一个数组中,然后再打印该数组。
我一整天都在努力,我无法绕过它。当我运行代码时,我会遇到分段错误,除非我选择一个可以被10整除的数字。例如10000,200或500. P.s.数字以错误的顺序打印,但必须相对容易解决。
以下是编译器的信息:
nasm -f elf32 division.asm
ld -m elf_i386 -s -o division division.o
这是代码
section .text
global _start
_start:
mov dword [arrvar], digit
mov eax, [value]
call convert
mov dword [arrvar], digit
call printarray
mov eax, 1
int 80h
convert:
mov ebx, 10
div ebx
push edx
add edx, '0'
mov ecx, [arrvar]
mov [ecx], edx
add dword [arrvar], 4
inc byte [elements]
pop edx
cmp eax, 0
jne convert
ret
printarray:
mov ecx, [arrvar]
mov eax, 4
mov ebx, 1
mov edx, 1
int 80h
add dword [arrvar], 4
dec byte [elements]
cmp byte [elements], 0
jne printarray
mov eax, 4
mov ecx, newl
mov edx, 1
mov ebx, 1
int 80h
ret
mov eax, 1
int 80h
section .data
newl db 10
value dd 1000500000
elements db 0
section .bss
arrvar resb 4
digit resd 100