我想将ASCII字符数从输入转换为小数,但提示行为很有趣。我想询问用户要转换的数字的位数和数字本身。提示忽略第一个用户输入请求。稍微搞清楚代码之后,我发现提示总是要求一个输入变量少于我为其编码。那是为什么?
所以问题似乎存在于系统调用内,而不是在函数''string_to_int'中
以下是编译器信息:
nasm -f elf64 convinput.asm
ld -s -o convinput convinput.o
以下是代码:
section .text
global _start
_start:
mov eax, 3
mov ebx, 2
mov edx, 1
mov ecx, dignum
int 80h
mov eax, 3
mov ebx, 2
mov edx, 1
mov ecx, data
int 80h
mov esi, data
movzx ecx, byte [dignum]
xor ebx,ebx ; clear ebx
call string_to_int
mov eax, 1
int 80h
string_to_int:
xor ebx,ebx
movzx eax, byte [esi]
inc esi
sub al,'0' ; convert from ASCII to number4
mov ebx, 10
mul ebx
add ebx,eax ; ebx = ebx*10 + eax
dec byte [dignum]
cmp byte [dignum], 0
jne string_to_int
mov eax,ebx
ret
section .bss
dignum resb 1
data resb 1000
; ESI = pointer to the string to convert
; ECX = number of digits in the string (must be > 0)
; Output:
; EAX = integer valu