我在与定义“存储位置”的麻烦。 按照“英特尔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)编译没有问题,但执行标准输入输出显示了当: 非法指令
如果MOVBE被注释掉编译时会出现以下错误: 错误:无效的大小操作数1
我该如何要使用由指令集参考所示的“M”选项分配内存?
[CPU = 64,编译= YASM]