2011-12-15 6 views
1

アセンブリコードの.text部分に文字列ポインタを定義する方法はありますか?文字列を宣言するnasmアセンブリの.dataセグメントの外側

SECTION .text   

     global main    


main:       
     fmt: dd  "%s", 10, 0 

または多分文字列を構築し、それを指すレジスタを持っている、このすべてが.textセクションで行うことができる置きますか?

+0

はい。おそらく 'readdata'セクションの' .rodata'セクションも使うことができます。 –

+0

どうやったらいいですか? – meltuhamy

答えて

1

アセンブラはかなり間抜けであり、あなたは、このように、明示的にすべてのものを記述する必要があります。

SECTION .text   

     global main    


main:       
     ; Some code here, you don't want to execute data. 

     mov  ebx, fmt ; ebx points to fmt[0] ('%') 
     mov  eax, dword [pfmt] ; eax also points to fmt[0] ('%') 

     ; Some more code here. 

     pfmt dd fmt ; pfmt is a constant pointer to fmt[0] ('%') 
     fmt  db "%s", 10, 0 ; fmt is a constant string 

あなたがコーディング簡素化するためにマクロを使用することができる場合があります

%macro LoadRegWithStrAddr 2+ 

     jmp  %%endstr 
    %%str:  db  %2 
    %%endstr: 
     mov  %1, %%str 

%endmacro 

SECTION .text   

     global main    


main:       
     LoadRegWithStrAddr ebx, "%s", 10, 0 ; ebx points to "%s\n" 

LoadRegWithStrAddr ebx, "%s", 10, 0はに展開します

を参照してください。

+0

あなたのお手伝いをしていただきありがとうございます。私はそれを行くだろう.. – meltuhamy

関連する問題