2012-04-05 81 views
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中。數據定義了一個字節?

編輯:

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 
+0

什麼平臺/操作系統? – kuba 2012-04-05 17:44:05

+0

剛編輯原稿。 – Nogg 2012-04-05 17:47:34

+0

這應該可以幫助你http://stackoverflow.com/questions/523185/a-simple-assembly-input-question – 2012-04-05 17:55:35

回答

3

不,這不是(至少通常)這麼簡單。

什麼用戶輸入將被解讀爲一個字符串,不是一個數字。您通常必須讀取字符串(通常會多於一個字節),然後將其轉換爲整數。在進行轉換之前,您可能需要驗證字符串中的所有字符都是數字,或者您可能希望將轉換與驗證結合起來。

特別注意ReadConsole呼叫,有兩點需要注意。首先,您需要檢索控制檯的句柄,通常使用GetStdHandle。然後,你需要提供ReadConsole所需的所有參數。[

+0

謝謝,我得到它的工作。生病編輯我的代碼,但我有另一個問題是如果即時通訊寫入一個字符串如何可以把人進入字符串的變量?我需要輸出2個字符串嗎? 1字符串說「請輸入」,然後變量「5」,然後另一個字符串「數字」因此,當它一起出現時,它是「請輸入5個數字」 – Nogg 2012-04-05 18:07:28

+0

@Nogg:喲,這就是它。 – 2012-04-05 18:13:18