DB is used for storing byte and DW is used for storing a word (2 bytes). In the code given below, a and b are the variables. Example Assembly CodeĬonsider an example to understand the behavior of MOV instruction. The MOV instruction does not affect any value in the flag register. Therefore, both source and destination operands cannot be memory address. It is not possible to transfer data directly from one memory location to another. The 8086 MOV instruction supports the following operands: Source
No exception is generated to indicate this condition.The destination operand can be any register or a memory location whereas the source operand can be a register, memory address, or a constant/immediate. In the real-address mode, if the ESP or SP register is 1, 3, or 5 when the PUSHA/PUSHAD instruction is executed, the processor shuts down due to a lack of stack space. When in virtual-8086 mode and the I/O privilege level (IOPL) is less than 3, the PUSHF/PUSHFD instruction causes a general protection exception (#GP). Others may treat these mnemonics as synonyms (PUSHF/PUSHFD) and use the current setting of the operand-size attribute to determine the size of values to be pushed from the stack, regardless of the mnemonic used. Some assemblers may force the operand size to 16 when PUSHF is used and to 32 when PUSHFD is used. The PUSHF instruction is intended for use when the operand-size attribute is 16 and the PUSHFD instruction for when the operand-size attribute is 32.
The PUSHF (push flags) and PUSHFD (push flags double) mnemonics reference the same opcode. See the section titled "EFLAGS Register" in Chapter 3 of the Intel Architecture Software Developer's Manual, Volume 1, for information about the EFLAGS registers. (These instructions reverse the operation of the POPF/ POPFD instructions.) When copying the entire EFLAGS register to the stack, the VM and RF flags (bits 16 and 17) are not copied instead, the values for these flags are cleared in the EFLAGS image stored on the stack. Intel Pentium Instruction Set Reference PUSHF - Push EFLAGS Register onto the Stack Codeĭecrements the stack pointer by 4 (if the current operand-size attribute is 32) and pushes the entire contents of the EFLAGS register onto the stack, or decrements the stack pointer by 2 (if the operand-size attribute is 16) and pushes the lower 16 bits of the EFLAGS register (that is, the FLAGS register) onto the stack.