Immediate Addressing Mode
In this addressing mode, the operand is stored as part of the instruction. The immediate operand, which is stored along with the instruction, resides in the code segment -- not in the data segment. This addressing mode is also faster to execute an instruction because the operand is read with the instruction from memory. Here are some examples:
| Example: Immediate Operands |
|
MOV AL, 20 ; move the constant 20 into register AL ADD AX, 5 ; add constant 5 to register EAX MOV DX, offset msg ; move the address of message to register DX
|
Register addressing mode
In this addressing mode, the operands may be:
- reg16: 16-bit general registers: AX, BX, CX, DX, SI, DI, SP or BP.
- reg8 : 8-bit general registers: AH, BH, CH, DH, AL, BL, CL, or DL.
- Sreg : segment registers: CS, DS, ES, or SS. There is an exception: CS cannot be a destination.
For register addressing modes, there is no need to compute the effective address. The operand is in a register and to get the operand there is no memory access involved.
| Example: Register Operands |
|
MOV AX, BX ; mov reg16, reg16 ADD AX, SI ; add reg16, reg16 MOV DS, AX ; mov Sreg, reg16
|
Some rules in register addressing modes:
1. You may not specify CS as the destination operand.
Example: mov CS, 02h –> wrong
2. Only one of the operands can be a segment register. You cannot move data from one segment register to another with a single mov instruction. To copy the value of cs to ds, you would have to use some sequence like:
mov ds,cs -> wrong
mov ax, cs
mov ds, ax -> the way we do it
You should never use the segment registers as data registers to hold arbitrary values. They should only contain segment addresses.