转换ASCII字符数字会在Assembler(nasm)中产生分段错误

时间:2016-01-06 00:45:27

标签: assembly x86 segmentation-fault nasm

我是这个论坛的新手,所以请原谅我明显的错误。我正在尝试编写一个代码,用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

0 个答案:

没有答案