2012-04-05 19 views
1

Ich arbeite am Erlernen einiger Assembly Language (x86 Irvine.32 windows7) und hatte eine Frage zur Eingabe von einem Benutzer. Das Buch, das ich habe, geht auch nicht in die Tiefe. Ich möchte den Benutzer aufzufordern:Grundlegende Benutzereingabe

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? : " 

dann wird der Benutzer Eingang X. Wie lese ich was die Benutzereingaben und es in eine Variable setzen?

ist es so einfach wie:

INVOKE ReadConsole, SomeVairable 

Wo SomeVairable in .data als ein Byte definiert up?

edit:

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

welche platform/os? – kuba

+0

Habe gerade das Original bearbeitet. – Nogg

+0

Dies sollte Ihnen helfen http://StackOverflow.com/Questions/523185/A-Simple-Assembly-Input-Question –

Antwort

3

Nein, es ist nicht (zumindest meistens) so einfach.

Was der Benutzer eingibt, wird als Zeichenfolge gelesen, keine Nummer. Normalerweise müssen Sie die Zeichenfolge lesen (die normalerweise länger als ein Byte ist) und sie dann in eine Ganzzahl konvertieren. Möglicherweise möchten Sie überprüfen, ob alle Zeichen in der Zeichenfolge Ziffern sind, bevor Sie die Konvertierung durchführen, oder Sie möchten die Konvertierung mit der Überprüfung kombinieren.

Mit Blick auf die ReadConsole Aufruf, gibt es zwei Dinge zu beachten. Zuerst müssen Sie einen Handle zur Konsole abrufen, normalerweise mit GetStdHandle. Dann müssen Sie ReadConsole mit allen halben Dutzend oder so Parametern liefern, die es erwartet.

+0

Danke, ich habe es zur Arbeit gebracht. Ich bearbeite meinen Code, aber eine andere Frage, die ich habe, ist, ob ich eine Zeichenfolge schreibe, wie kann ich die Variable, die die Person eingegeben hat, in die Zeichenfolge einfügen? Würde ich 2 Strings ausgeben müssen? 1 String "Bitte geben Sie" dann die Variable "5" dann eine andere Zeichenfolge "Zahlen" Also wenn es zusammen kommt, ist es "Bitte geben Sie 5 Zahlen" – Nogg

+0

@Nogg: yup, das ist so ziemlich so. –