アセンブラはかなり間抜けであり、あなたは、このように、明示的にすべてのものを記述する必要があります。
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
はに展開します
を参照してください。
はい。おそらく 'readdata'セクションの' .rodata'セクションも使うことができます。 –
どうやったらいいですか? – meltuhamy