2011-10-16 13 views
4

の取得これは、簡単な質問には、うまくいけば、です。今、私が持っている:のLinux x86のASMユーザー入力

section .data 
    greet:  db 'Hello!', 0Ah, 'What is your name?', 0Ah ;simple greeting 
    greetL:  equ $-greet         ;greet length 
    colorQ:  db 'What is your favorite color?'   ;color question 
    colorL:  equ $-colorQ         ;colorQ length 
    suprise1: db 'No way '        
    suprise1L equ $-suprise1 
    suprise3: db ' is my favorite color, too!', 0Ah 

section .bss 
    name:  resb 20          ;user's name 
    color:  resb 15          ;user's color 

section .text 
    global _start 
_start: 

    greeting: 
     mov eax, 4 
     mov ebx, 1 
     mov ecx, greet 
     mov edx, greetL 
     int 80            ;print greet 

    getname: 
     mov eax, 3 
     mov ebx, 0 
     mov ecx, name 
     mov edx, 20 
     int 80            ;get name 

    askcolor: 
     ;asks the user's favorite color using colorQ 

    getcolor: 
     mov eax, 3 
     mov ebx, 0 
     mov ecx, name 
     mov edx, 20 
     int 80 

    thesuprise: 
     mov eax, 4 
     mov ebx, 1 
     mov ecx, suprise1 
     mov edx, suprise1L 
     int 80 

     mov eax, 4 
     mov ebx, 1 
     mov ecx, name 
     mov edx, 20 
     int 80 

     ;write the color 

     ;write the "suprise" 3 

     mov eax, 1 
     mov ebx, 0 
     int 80 

だから何それがないことは、あまりにも、私の好きな色まさか--name-- --color--」、名前と色を求める、と言うのです

私が助けが必要なのは、上記の「名前」と「色」の変数がユーザーの入力後どれくらい長いかを調べる方法です。そうでなければ、私はその間に長い、彼らは可能サイズは、私が前に宣言したものです。

は、任意およびすべてのヘルプをありがとうございました。

答えて

2

readシステムコールは、eaxレジスタで読み取られたバイト数を返します。この数字が<であれば、何らかの読み取りエラーがありました。

+0

私は、read命令の後にeaxで "returned"という値を使用しようとしましたが、これは元々どれくらいバッファを宣言していたかを返すだけです – nmagerko

1

あなたをbしますeループを読み込みます。

最も簡単な方法は、一度に1バイトずつLF(バイト10)を検索することです。

+0

詳細をご記入ください。私はユーザー入力を読む方法を理解していますが、どれくらいの時間がわからなければ、一度に1バイトずつ入力を保存できますか?また、どのようにして整数メソッドに文字列を使用せずにバイト10を文字と比較できますか? – nmagerko

+0

バイトは非常に短い整数です。 – Joshua

+0

私は通常、長さ80のバッファを宣言し、ユーザがそれを超えると文句を言います。 – Joshua

1

これはかなり古くなっていますが、将来これを見る人にとっては、基本的に1行でOPが求めていることを達成する別の方法があります。これは理想的ではないかもしれませんが、このようなことはうまくいくはずです。基本的には、ユーザーの入力する単語の長さを把握しようとするのではなく、 'RED'や 'ORANGE'などのようなものを入力すると仮定します。色は8文字のようになります。つまり、私たちは以下のことを行うことができます。

.bss 
    color:  resb  8 

ここでも、その理想的な、それはそれはあまりにも多くの仕事と、この場合には、いくつかの余分なバイトはずの効果を行いません。