section .data
bufChar: equ 0
section .bss
bufNum: resb 1
bufMult: resb 1
. . .
leerNumero:
xor eax,eax
mov [bufNum],eax
add eax,1
mov [bufMult],eax
inicioLeerNumero:
mov edx,1
mov ecx,bufChar
mov ebx,0
mov eax,3
int 80h
cmp byte [ecx + edx - 1],10 ; Segfaults here.
je rLeerNumero
cmp byte [ecx + edx - 1],48
jl noNumero
cmp byte [ecx + edx - 1],57
jg noNumero
sub eax,48
mul word [bufMult]
jo overflow
add [bufNum],eax
jo overflow
mov eax,10
mul word [bufMult]
jo overflow
mov [bufMult],eax
jmp inicioLeerNumero
rLeerNumero:
mov eax,bufNum
ret
noNumero:
mov eax,errorNumero
mov ebx,lErrorNumero
call imprimir
jmp salir
overflow:
mov eax,errorOverflow
mov ebx,lErrorOverflow
call imprimir
jmp salir
このコードは、少なくとも紙では機能するはずです。Cライブラリをリンクせずにアセンブリで完全にいくつかの宿題をする必要があるため、ホイールを再発明し、コンソールからEAXに数値を読み取る方法を作成する理由.
コメントでマークされた行で謎のセグメンテーション違反が発生しており、整列していないメモリにアクセスしようとしている方法がわかりません...これがどのように失敗するかについてのアイデアはありますか?