我正在尝试使用纳姆来编译我的程序,我遇到了一个关于纳姆语法的问题。实际上我正在写这段代码:
mov byte [edi],[esi]
NASM只是给我一个错误,说
操作码和操作数的组合无效。
所以我想问一下我是否可以直接在一行中交换内存数据,而无需使用其他寄存器作为介质。
您使用的指令格式是非法的。处理器不理解在两个内存位置之间移动。这就是您收到错误的原因。通过使用直接寄存器寻址模式(使用方括号),您给它存储在列出的每个寄存器中的内存地址。
处理器根本做不到这一点。我很抱歉。你必须找到一种不同的方法来做你想做的事情。
现在,movsb指令将从esi指向的地址向edi指向的地址移动一个字节。这可能是您试图寻找的,但在这种情况下,代码很简单
movsb
没有参数。它还将根据方向标志的值(通常是清晰的,因此它会递增)递增或递减esi和edi。
您可以使用rep修饰符重复指令,重复次数由ecx中存储的值指示。
记住,值IN edi和esi将由movsb指令更改。如果使用movsB,它们将递增或递减一。
如果您需要在内存中交换两个值,则可以使用一个额外的寄存器来完成,正如另一个用户在响应我使用两个寄存器时指出的那样:
mov edx, [edi]
xchg edx, [esi]
mov [edi], edx
这将交换edi
和esi
内容所指向的内存地址的内容。没有比这更短的方法了。