使用Assembler进行有趣的提示,将输入ASCII转换为dec

时间:2016-01-06 15:36:10

标签: input ascii nasm system-calls prompt

我想将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

0 个答案:

没有答案