汇编:寄存器的寻址方式

寻址方式:在指令中得到操作数的方式,说白了也就是cpu怎么样从指令中得到操作数的方式。

操作数当然就是数据。
操作数还分种类:

  1. 数据操作数 :全都是在指令当中参加操作的数据。
    1. 立即操作数:它在指令中直接给出。
    2. 寄存器操作数:它被放到寄存器中。
    3. 存储器操作数:当然在存储器也就是内存中。
    4. i/o操作数:它在你给出的i/o端口中。
  2. 转移地址操作数 :在指令当中不是参加运算或被处理的数据了,而是转移地址。

数据也就是指令的操作数有三大类,共七种寻址方式。

  1. 立即数寻址:立即数
  2. 寄存器寻址:寄存器中的数
  3. 内存寻址(根据段地址和给定地址找到数据)
    1. 直接寻址:直接指定地址
    2. 间接寻址:寄存器中指定地址
    3. 相对寻址:寄存器中地址+偏移量
    4. 变址寻址:寄存器中地址+变址寄存器中地址
    5. 相对变址寻址:寄存器中地址+变址寄存器中地址+偏移量

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]也是对的,多种写法
根据多个寄存器并加偏移得到真实地址。

猜你喜欢

转载自blog.csdn.net/chongbin007/article/details/129823462