2011-10-23 11 views
3

したがって、NASMを使用しているLinux用のx86アセンブリプログラムで作業しています。このプログラムは基本的にユーザーに自分の名前と好みの色を要求します。これを行うと.bssセクションで宣言された変数で2つの文字列を格納した後、プログラムの版画「ユーザーのまさか名、好きな色は、あまりにも、私の好きな色です!ユーザー入力の修正 - x86 Linuxアセンブリ

私が午前問題はさ私は、文字列は、ユーザーが入力した私がすべきバッファを宣言した長さだけだったどのくらいかわからないので、出力の巨大なスペースがあること。

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 

コード私がやっている何のためには、上記であります誰かが、入力された文字列の長さを見つける、または文字を一度に取り込んでthの長さを見つけるための良い方法がありますか電子文字列?

ありがとうございます。

答えて

1

int80の後にgetnameが返された場合、EAXには実際に読み取られたバイト数、または負のエラー表示が含まれます。 Cのエラーリターンのため

あなたべき

  1. チェック
  2. ストア戻り値、それはあなたの入力の長さを与えるよう

等価コード:

char name[20]; 
int rc; 

rc = syscall(SYS_read, 0, name, 20-1); // leave space for terminating NUL 
if (rc < 0) { 
    // handle error 
} else { 
    name[rc] = '\0';      // NUL terminate the string 
} 
+0

I試してみましたが、何らかの理由で、私が変数が.bssにあると宣言したものの戻り値をいつも得ています....私はsometをやっています間違っていますか? – nmagerko

+0

@nmagerko:int 80の後、EAXに入力文字列の長さがないと言っていますか? –

+0

^はい。これは理にかなっていますか? – nmagerko

関連する問題