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。
我在标有注释的行上有一个神秘的段错误,我看不到我是如何尝试访问未对齐的内存的……关于这怎么可能失败的任何想法?