x86 寻址模式下常量和直接寻址的区别
Difference between Constants and Direct addressing in x86 addressing modes
我想知道使用操作数寻址模式时汇编代码之间的区别。例子
mov ax, 25 // 其中 25 被视为常数
mov ax, [1000] // [1000] 被认为是内存位置
我的问题是,常量和内存位置之间的差异是因为方括号[1000] 还是有其他原因。 mov(opcode) 是 cpu 指令集的一部分吗?
将不胜感激一些答案。谢谢!
根据您的汇编程序,您必须使用适当的语法,以便它可以区分常量和内存位置。一些汇编程序使用您展示的语法,一些汇编程序需要 $
立即数前缀,一些汇编程序使用 ptr
,等等。请查阅您的汇编程序文档。
mov
是助记符,根据操作数的不同有不同的机器码表示。例如,您使用的 mov ax, 25
实际上是具有操作码 B8
的 mov r16, imm16
。 mov ax, [1000]
可以是具有操作码 A1
的 mov ax, moffs16
。请参阅指令集参考。
我想知道使用操作数寻址模式时汇编代码之间的区别。例子 mov ax, 25 // 其中 25 被视为常数 mov ax, [1000] // [1000] 被认为是内存位置
我的问题是,常量和内存位置之间的差异是因为方括号[1000] 还是有其他原因。 mov(opcode) 是 cpu 指令集的一部分吗? 将不胜感激一些答案。谢谢!
根据您的汇编程序,您必须使用适当的语法,以便它可以区分常量和内存位置。一些汇编程序使用您展示的语法,一些汇编程序需要 $
立即数前缀,一些汇编程序使用 ptr
,等等。请查阅您的汇编程序文档。
mov
是助记符,根据操作数的不同有不同的机器码表示。例如,您使用的 mov ax, 25
实际上是具有操作码 B8
的 mov r16, imm16
。 mov ax, [1000]
可以是具有操作码 A1
的 mov ax, moffs16
。请参阅指令集参考。