隐含:操作数在指令定义中隐含指定。例子:CLA
, CME
, INP
.
它主要用于零地址(堆栈组织)和一地址(累加器组织)指令。
立即数:操作数在指令本身中指定,主要用于常量。示例:ADD R1,#3
,MUL R1,R2,#7
但问题来了如何检查指令:
1)PUSH 3
和
2)LD 7
第一个是零地址指令(基于堆栈),第二个是累加器指令。在这两条指令中,操作数都在指令本身中定义。哪种寻址模式更受欢迎,或者最能描述它们?
如何检查指令是隐含的还是即时的?
x86 上隐式操作数的更多示例:SAHF
、LAHF
和CPUID
.
来源:https ://en.wikipedia.org/wiki/CPUID
在汇编语言中,CPUID 指令不采用显式参数,因为 CPUID 隐式使用 EAX 寄存器(有时是 ECX)来确定在 EAX、EBX、ECX 和 EDX 中返回的信息。
来源:http ://www.felixcloutier.com/x86/LAHF.html
LAHF — Load Status Flags into AH Register
This instruction executes as described above in compatibility mode and legacy mode. It is valid in 64-bit mode only if CPUID.80000001H:ECX.LAHF-SAHF[bit 0] = 1.
来源:http ://www.felixcloutier.com/x86/SAHF.html
SAHF — Store AH into Flags
Loads the SF, ZF, AF, PF, and CF flags of the EFLAGS register with values from the corresponding bits in the AH register (bits 7, 6, 4, 2, and 0, respectively). Bits 1, 3, and 5 of register AH are ignored; the corresponding reserved bits (1, 3, and 5) in the EFLAGS register remain as shown in the “Operation” section below.
This instruction executes as described above in compatibility mode and legacy mode. It is valid in 64-bit mode only if CPUID.80000001H:ECX.LAHF-SAHF[bit 0] = 1.
使用示例:(来源:https ://www.slideshare.net/rbtaccess/flag-control )
MOV AH, 25H ; immediate source operand
SAHF ; implicit operands
更多示例包括CLC
、STC
和CMC
,它们分别清除、设置或翻转进位标志 CF。(CF 是 FLAGS 中的一个位,而不是整个寄存器。)