1

アセンブリ言語(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
4

1 に答える 1

3

いいえ、(少なくとも通常は) それほど単純ではありません。

ユーザーが入力したものは、数値ではなく文字列として読み取られます。通常、文字列 (通常は 1 バイト以上の長さ) を読み取ってから、整数に変換する必要があります。変換を行う前に、文字列内のすべての文字が数字であることを確認したり、変換と検証を組み合わせたりすることができます。

具体的にReadConsoleコールを見ると、心に留めておくべきことが 2 つあります。まず、コンソールへのハンドルを取得する必要があります。通常はGetStdHandle. 次に、ReadConsole期待される半ダースほどのパラメータをすべて指定する必要があります。

于 2012-04-05T17:56:07.760 に答える