Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Assembly YASM mov指令给出错误:操作数1的大小无效_Assembly_Tasm_Yasm - Fatal编程技术网

Assembly YASM mov指令给出错误:操作数1的大小无效

Assembly YASM mov指令给出错误:操作数1的大小无效,assembly,tasm,yasm,Assembly,Tasm,Yasm,我正在尝试执行一些来自TASM的基本YASM,这行代码将出错: mov [var], 7 我这样定义了变量:var db 5。 即使在尝试执行var:db 5之后,它仍然出错并说: 错误:操作数1的大小无效 与TASM不同,YASM/NASM不查看var的声明来确定它是否为字节、字、dword等。操作数大小需要在任何指令中指定,而在使用的寄存器中它不是隐式的。所以你必须写作 mov byte [var], 7 注意 mov [var], bl 不需要字节,因为8位操作数大小是从8位寄存器b

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

mov [var], 7
我这样定义了变量:var db 5。 即使在尝试执行var:db 5之后,它仍然出错并说:

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


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

mov byte [var], 7
注意

mov [var], bl

不需要字节,因为8位操作数大小是从8位寄存器bl的使用中推断出来的。

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

mov byte [var], 7
注意

mov [var], bl

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

thx!是var的字节,还是7?@sefsf:它适用于[var]。虽然实际上是mov[var],字节7也可以工作-mov的两个操作数必须具有相同的大小,因此如果它知道其中一个操作数的大小就足够了。它们是指定操作数大小的其他可能方法:GAS使用助记符后缀b、w、l。ASM也会查看var的类型,否则它会使用后缀或指令修饰符,例如,data=byte,请参见@nate eldredge这是否仅适用于MOV或任何调用变量的指令?@sefsf:它适用于任何具有内存操作数的指令。对于其他操作数为立即加法字节[var]、7或加法字节[var]、字节7、单操作数指令负字节[var]的指令,以及具有两个不同大小操作数的指令movsx eax、字节[var].thx,您尤其需要它!是var的字节,还是7?@sefsf:它适用于[var]。虽然实际上是mov[var],字节7也可以工作-mov的两个操作数必须具有相同的大小,因此如果它知道其中一个操作数的大小就足够了。它们是指定操作数大小的其他可能方法:GAS使用助记符后缀b、w、l。ASM也会查看var的类型,否则它会使用后缀或指令修饰符,例如,data=byte,请参见@nate eldredge这是否仅适用于MOV或任何调用变量的指令?@sefsf:它适用于任何具有内存操作数的指令。对于另一个操作数为立即加法字节[var]、7或加法字节[var]、字节7、一个操作数指令负字节[var]的指令以及具有两个不同大小操作数的指令movsx eax、字节[var],您尤其需要它。