2012-04-01 2 views
1

Ich versuche, eine Eingangsdaten mit einem ganzzahligen Wertx86 NASM Assembly - die Eingabe mit Integer-Vergleich von Werten

hier die grundlegenden Code I

section .bss 
    input resb 2 

section .text 
global _start 
_start: 
    mov eax, 3 
    mov ebx, 1 
    mov ecx, input 
    mov edx, 5 
    int 0x80 
    mov eax, [input] 
    cmp eax, 20 // This is what I cannot get to work, it never compares it to 20 even if i enter 20 as input 
    je next 

Alle wollen bin mit vergleichen ich wirklich weiß, ist, wie man die If-Anweisung in Assembly ausführt, um die Eingabe mit einer Ganzzahl zu vergleichen.

Ich würde wirklich jede Hilfe mit diesem apprecaite, danke.

Antwort

2

Sie vergleichen eax (das erste Byte Eingangs ) with the integer 20`. Dies ist die DC4 Steuerzeichen, die mit ziemlicher Sicherheit nicht Ihre Eingabe.

Wenn Sie 20 an der Zahl vergleichen wollen, dann werden Sie müssen Eingang in eine Zahl konvertieren erste (und akzeptieren mehr als ein Zeichen der Eingabe).

+0

okay, gibt es eine schnelle Möglichkeit, die Eingabe in eine Zahl zu konvertieren oder gibt es eine Möglichkeit, 20 in einen com umzuwandeln parentierbarer Wert? andere Codes Ich habe versucht, waren: mov eax, [num1] sub eax, '0' cmp eax, 20 ich es einfach nicht bekommen, wie die Eingabe zu konvertieren wie der Integer-Wert – user1306751

+0

Die aussehen 'Atoi'-libc-Funktion kann von Interesse sein. – duskwuff

0

Versuchen Sie diesen Code verwenden ...

section .bss 
    input resb 2 

section .text 
global _start 
_start: 
    mov eax, 3 
    mov ebx, 1 
    mov ecx, input 
    mov edx, 5 
    int 0x80 
    mov eax, dword[input];dword is require for double word size 
    cmp eax, 20 
    je next 
+1

Ich habe deinen Beitrag repariert. Bitte beachten Sie in Zukunft die Verwendung von Codeblöcken. – ChiefTwoPencils