【发布时间】:2021-02-09 16:52:06
【问题描述】:
我正在尝试做一些来自 TASM 的基本 YASM,这行代码会出错:
mov [var], 7
我已经像这样定义了变量:var db 5.
即使在尝试做var: db 5 之后,它仍然会出错并说:
错误:操作数 1 的大小无效
【问题讨论】:
我正在尝试做一些来自 TASM 的基本 YASM,这行代码会出错:
mov [var], 7
我已经像这样定义了变量:var db 5.
即使在尝试做var: db 5 之后,它仍然会出错并说:
错误:操作数 1 的大小无效
【问题讨论】:
与 TASM 不同,YASM/NASM 不会查看 var 的声明来确定它是字节、字、双字等。操作数大小需要在任何不隐含的指令中指定正在使用的寄存器。所以你必须写
mov byte [var], 7
注意
mov [var], bl
不需要byte,因为 8 位操作数大小是通过使用 8 位寄存器 bl 推断出来的。
【讨论】:
[var]。虽然实际上 mov [var], byte 7 也可以工作 - mov 的两个操作数必须具有相同的大小,所以如果它知道其中一个的大小就足够了。
b,w,l€ASM也看var的类型,否则它使用后缀或指令修饰符,例如data=byte,见euroassembler.eu/eadoc/#DATAeq
add byte [var], 7 或 add [var], byte 7)、单操作数指令(neg byte [var])以及具有两个不同大小的操作数的指令(movsx eax, byte [var]),您尤其需要它。