【发布时间】:2010-11-20 21:48:21
【问题描述】:
我正在尝试学习汇编(请多多包涵),但在这一行出现编译错误:
mov byte [t_last], [t_cur]
错误是
error: invalid combination of opcode and operands
我怀疑这个错误的原因仅仅是 mov 指令不可能在两个内存地址之间移动,但是半小时的谷歌搜索我无法确认 - 是这样吗?
另外,假设我是对的,这意味着我需要使用寄存器作为复制内存的中间点:
mov cl, [t_cur]
mov [t_last], cl
推荐使用什么寄存器(或者我应该使用堆栈代替)?
【问题讨论】:
-
有时最好去 source 而不是谷歌搜索,这里例如是 Intel 64 & IA-32 指令 AM,您可以在其中看到
mov的操作数组合, intel.com/Assets/PDF/manual/253666.pdf -
一条指令不能取两个内存操作数的规则有例外;见here。
-
关于多内存操作数的另一个问题在这里:stackoverflow.com/questions/52573554/…
-
基本上是 Why isn't movl from memory to memory allowed? 的副本,它解释了一些 CPU 架构 / ISA 设计为什么不这样做的原因。
标签: assembly x86 instructions mov