基本用户输入

时间:2012-04-05 17:40:30

标签: winapi assembly x86 masm irvine32

我正在学习一些汇编语言(x86 Irvine.32 windows7),并且有一个关于如何从用户输入的问题。我所拥有的这本书并未深入探讨。我想提示用户:

myfirst BYTE "Welcome! This program calculates the sum of a list of numbers.", 0dh, 0ah, 0dh, 0ah ; greeting 
        BYTE "How many integers will be added? : "

然后用户将输入X.如何读取用户输入的内容并将其放入变量?

就像这样简单:

INVOKE ReadConsole, SomeVairable

其中SomeVairable在.data中定义为一个字节?

编辑:

INCLUDE Irvine32.inc

BufSize = 80

.data
buffer BYTE BufSize DUP(?)
stdInHandle HANDLE ?
bytesRead   DWORD ?
myfirst BYTE "Welcome! This program calculates the sum of a list of numbers.", 0dh, 0ah, 0dh, 0ah ; greeting 
        BYTE "How many integers will be added? : "
mysecond BYTE "Please enter the "

.code
main PROC

    mov edx, OFFSET myfirst                         ;move the location of myfirst into edx
    call WriteString    

    ; Get handle to standard input
    INVOKE GetStdHandle, STD_INPUT_HANDLE
    mov stdInHandle,eax

    ; Wait for user input
    INVOKE ReadConsole, stdInHandle, ADDR buffer,
      BufSize, ADDR bytesRead, 0


    exit
main ENDP
END main

1 个答案:

答案 0 :(得分:3)

不,这不是(至少通常)那么简单。

用户输入的内容将被读取为字符串,而不是数字。您通常必须读取字符串(通常长度超过一个字节),然后将其转换为整数。您可能需要在进行转换之前验证字符串中的所有字符是否为数字,或者您可能希望将转换与验证结合起来。

专门针对ReadConsole电话,要记住两件事。首先,您需要检索控制台的句柄,通常使用GetStdHandle。然后,您需要向ReadConsole提供所需的所有半打参数。