-2
每次我尝试编译我的NASM,那里是一个“流行”的代码错误(“流行人”在这种情况下),它给了我一个错误。NASM(英特尔)ASM上弹出
20: error: invalid combination of opcode and operands
在第20行,我有
pop al
什么问题?
每次我尝试编译我的NASM,那里是一个“流行”的代码错误(“流行人”在这种情况下),它给了我一个错误。NASM(英特尔)ASM上弹出
20: error: invalid combination of opcode and operands
在第20行,我有
pop al
什么问题?
问题实际上是汇编程序提供的错误信息:“操作码和操作数的无效组合”。指令POP
没有POP r8
编码可能。换句话说,可以不弹出一个8位的值从堆栈
最接近的等效将pop ax
,它使用一个POP r16
编码弹出一个16位的值从堆栈入ax
寄存器。然而,这是不完全一样的代码,因为它会修改这两个低8位的一半(al
)和16位ax
寄存器的高8位的一半(ah
)。
另一种方法是直接从堆栈加载值,使用类似mov al, BYTE PTR [(r/e)sp]
。因为这不会改变堆栈指针,所以您需要手动调整它。
下一次,请同时指定您的目标平台是什么。这很重要,因为与32位和64位保护模式相比,16位实模式寻址模式的可能性非常有限。如果您没有指定您定位的模式,那么您得到的答案可能不适合您。喜欢这里,我不知道该mov
指令是否应该使用rsp
(64位),esp
(32位),或sp
(16位)。
你甚至阅读使用手册吗?即使是谦卑的8086(从“al”假设)也可以“推”或“弹出”一个8位寄存器。 –
我建议你谷歌为“8086指令集”,尤其是对“adressing器官功能障碍综合征”,并试图了解这一切'R32,R/m32'等东西手段 – Tommylee2k