我们知道 指令 的组成 是有操作码和操作数 组成的 !
操作数的来源又有哪些呢 ?
总体上有四种来源 , 指令本身提供 , 寄存器提供 , 存储器提供 , 或者是输入输出端口提供 。
反过来 ,操作结果的去向 也只有三种 , 寄存器 存储器 或者 输出端口
综合一下 总共有四种 寻址方式 立即数寻址 寄存器寻址 存储器寻址 输入/输出端口寻址
① 所谓立即数寻址 简单的说就是 指令的操作数 有指令的本身提供 如 MOVE AL 80H ;将80H送人AL
注意 :
立即数只能作为原操作数 不能作为目的操作数 。
立即数寻址方式一般用于对寄存器赋值
② 输入输出端口寻址 又分为 I/O 直接寻址 和 I/O间接寻址
直接寻址 是 端口号 直接有指令本身提供 如 IN AL 80H ;
间接寻址 是 端口号事先已经设置在了寄存器 中 端口号需要 有寄存器提供 IN AL DX ;
③存储器寻址
直接寻址 存储单元的有效地址有指令给出 如 MOV AX , [1324H]
基址+变址的寻址方式
BX BP 称为基址寄存器 SI DI 成为变址寄存器 我所理解的基址+变址的寻址方式就是同时使用了 这两种寄存器的一个
相对 基址+变址的寻址方式
BX BP 称为基址寄存器 SI DI 成为变址寄存器 我所理解的基址+变址的寻址方式就是同时使用了 这两种寄存器的一个然后加上位移量
其实和寄存器 的间接寻址 和相对寻址差不多 !
④ 寄存器寻址
如果操作数在cpu的内部寄存器中 , 那么寄存器的名字可在指令中指出,此为寄存器寻址
INC CX ; 将CX的内容加1
寄存器间接寻址
在这种寻址方式中有效地址 EA 是由寄存器指出的
MOV AX ,[BX]
当用 BP SP 进行间接寻址时 ,默认段为SS , 其他寄存器进行间接寻址时 , 默认为DS
寄存器相对寻址
EA 为寄存器中的内容和指令中给出的位移量的和
MOV AX [SI+100 H ]
注意 上面两种寄存器寻址方式的区别 : 两种寻址方式中都指使用了 寄存器 如果原操作数中 有位移量 那么为相对寻址 ,如果操作数只是给出了寄存器的名字 为间接寻址