指令中的寻址方式是用来确定操作数地址以找到指令所需的操作数。
8086和80286的字长是16位,一般情况下只处理8位和16位操作数,只是在乘、除指令中才会有32位操作数。
80386及其后继机型字长为32位,除了可处理8位和16位操作数外,还可处理32位操作数,在乘、除法情况下可产生64位操作数。

1.立即寻址

操作数本就包含在指令中,立即数寻址是指指令所需的操作数直接在指令代码中,随着取指令一起取到CPU中。这种操作数称为立即数。立即数可以是8位或16位的。
image.png
立即数用来表示常数,它经常用于给寄存器赋初值,并且只能用于源操作数字段,不能用于目的操作数字段,且源操作数长度应与目的操作数长度一致。在汇编指令中,立即数若是数值常数可直接书写,若是字符常数则应加上引号。

  1. mov eax,12345678h ;给EAX赋初值
  2. add bx,1234h ;给BX加上之1234h
  3. sub cl,2 ;从CL减去值2
  4. MOV AL5 ;将8位立即数05H送入AL
  5. MOV AX0B064H
  6. MOV BX" AB "
  7. MOV EAX12345678H

在汇编指令中,立即数若是以A~F开始的十六进制数,则必须在数前面加上0,如上述第二条指令,否则汇编程序会将立即数当作符号处理。

2.寄存器寻址

寄存器寻址是指指令所需的操作数存放在CPU的寄存器(通用寄存器或段寄存器)中,通过指令中的寄存器地址去找到操作数。
在汇编指令中,寄存器地址直接用寄存器名表示,如用AX、BX、AL、BH、EAX、EBX、DS、ES等,这些寄存器可以是8位的、16位的或32位的。
image.png
【例】 指令“MOV AX,BX”的源和目的操作数都采用寄存器寻址方式,该指令完成将BX中的内容送到AX中。
如指令执行前,(AX)=3064H,(BX)=1234H;
则指令执行后,(AX)=1234H,(BX)保持不变。

  1. MOV BLAL;将AL中的内容送到BL
  2. MOV DSAX
  3. MOV ECXEDX