「記憶場所」の定義に困っています。「Intel 64 and IA-32 Software Developer's Manual」によると、多くの命令でメモリ位置をオペランドとして使用できます。たとえば、MOVBE (バイトをスワップした後にデータを移動):
命令: MOVBE m32 , r32
問題は、メモリの場所をどのように定義するかです。.bss セクションで定義された変数を使用しようとしました:
section .bss
memory: resb 4 ;reserve 4 byte
memorylen: equ $-memory
section .text
global _start
_start:
MOV R9D, 0x6162630A
MOV [memory], R9D
SHR [memory], 1
MOVBE [memory], R9D
編集:->
MOV EAX, 0x01
MOV EBX, 0x00
int 0x80
<-EDIT
SHR がコメント アウトされている場合、yasm (yasm -f elf64 .asm) は問題なくコンパイルされますが、stdio を実行すると、次のように表示されます: Illegal Instruction
また、MOVBE がコメント アウトされている場合、コンパイル時に次のエラーが発生します:エラー: オペランド 1 のサイズが無効です
命令セットのリファレンスで示されている「m」オプションを使用するためにメモリを割り当てるにはどうすればよいですか?
[CPU=x64、コンパイラ=yasm]