我在定义“内存位置”时遇到了麻烦。根据“英特尔 64 和 IA-32 软件开发人员手册”,许多指令可以使用内存位置作为操作数。例如 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 时显示:非法指令
如果 MOVBE 被注释掉,编译时会出现以下错误:错误:操作数 1 的大小无效
如何为使用指令集参考中显示的“m”选项分配内存?
[CPU=x64,编译器=yasm]