【问题标题】:YASM mov instruction gives error: invalid size for operand 1YASM mov 指令给出错误:操作数 1 的大小无效
【发布时间】:2021-02-09 16:52:06
【问题描述】:

我正在尝试做一些来自 TASM 的基本 YASM,这行代码会出错:

mov [var], 7

我已经像这样定义了变量:var db 5.
即使在尝试做var: db 5 之后,它仍然会出错并说:

错误:操作数 1 的大小无效

【问题讨论】:

    标签: assembly tasm yasm


    【解决方案1】:

    与 TASM 不同,YASM/NASM 不会查看 var 的声明来确定它是字节、字、双字等。操作数大小需要在任何不隐含的指令中指定正在使用的寄存器。所以你必须写

    mov byte [var], 7
    

    注意

    mov [var], bl
    

    不需要byte,因为 8 位操作数大小是通过使用 8 位寄存器 bl 推断出来的。

    【讨论】:

    • @sefsf:适用于[var]。虽然实际上 mov [var], byte 7 也可以工作 - mov 的两个操作数必须具有相同的大小,所以如果它知道其中一个的大小就足够了。
    • 它们是其他可能的方法如何指定操作数大小:GAS使用助记符后缀b,w,l€ASM也看var的类型,否则它使用后缀或指令修饰符,例如data=byte,见euroassembler.eu/eadoc/#DATAeq
    • @nate-eldredge 这仅适用于 MOV 或任何调用变量的指令吗?
    • @sefsf:它适用于任何带有内存操作数的指令。对于其他操作数为立即数的指令(add byte [var], 7add [var], byte 7)、单操作数指令(neg byte [var])以及具有两个不同大小的操作数的指令(movsx eax, byte [var]),您尤其需要它。
    • @nate-eldredge 谢谢!
    猜你喜欢
    • 2018-05-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多