寻址方式:在指令中得到操作数的方式,说白了也就是cpu怎么样从指令中得到操作数的方式。
操作数当然就是数据。
操作数还分种类:
- 数据操作数 :全都是在指令当中参加操作的数据。
- 立即操作数:它在指令中直接给出。
- 寄存器操作数:它被放到寄存器中。
- 存储器操作数:当然在存储器也就是内存中。
- i/o操作数:它在你给出的i/o端口中。
- 转移地址操作数 :在指令当中不是参加运算或被处理的数据了,而是转移地址。
数据也就是指令的操作数有三大类,共七种寻址方式。
- 立即数寻址:立即数
- 寄存器寻址:寄存器中的数
- 内存寻址(根据段地址和给定地址找到数据)
- 直接寻址:直接指定地址
- 间接寻址:寄存器中指定地址
- 相对寻址:寄存器中地址+偏移量
- 变址寻址:寄存器中地址+变址寄存器中地址
- 相对变址寻址:寄存器中地址+变址寄存器中地址+偏移量
1. 立即数寻址
常数实际上是直接放在代码中的,会在加载指令的时候,自动找到。
mov AX,80h ; 80h就被称为立即数
2. 寄存器寻址
数据存储在寄存器中,直接用寄存器名称调用。
mov AX,BX
3. 内存寻址
3.1 直接寻址(指令中硬编码地址)
操作数存放在内存中,地址在指令中直接给出。
mov AX,[123H]
会从123H的地址中在内存中找到数据然后拿出来
3.2 间接寻址(地址指针)
操作数在内存中,地址用SI、DI、BX和BP等寄存器之一来指定。
mov BX,[di]
mov AX,[si]
从寄存器中取得地址,然后根据地址到内存中拿到数据
3.3 相对寻址(基址+偏移)
操作数在内存中,地址是一个基址寄存器(BX、BP)或变址寄存器(SI、DI)的内容和一个偏移量之和。
mov BX,[si+100H]
从寄存器中取得地址然后加上偏移才得到真实地址,根据该地址从内存取数据。
3.4 变址寻址(基址+变址)
操作数在内存中,地址是一个基址寄存器(BX、BP)和一个变址寄存器(SI、DI)的内容之和。
mov BX,[BX+SI]
将两个寄存器中地址取出来相加得到真实地址,然后根据该地址取数据
3.5 相对变址寻址(基址+变址+偏移)
操作数在内存中,地址是一个基址寄存器(BX、BP)的值、一个变址寄存器(SI、DI)的值和一个偏移量之和。
mov AX,[BX+si+200H] ;mov AX,200h[BX][si]或者mov AX,200h[si][BX]也是对的,多种写法
根据多个寄存器并加偏移得到真实地址。