汇编语言指令寻址

Posted BkbK-

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了汇编语言指令寻址相关的知识,希望对你有一定的参考价值。

指令寻址

在这里插入图片描述

一、指令寻址的定义

一条指令执行后,确定执行的下一条指令的位置。

IA-32 处理器设计有相对 、直接和间接3种指明目标地址的方式,其基本含义类似于对应的存储器数据寻址方式。

二、转移范围

程序流程的控制转移:

  • 程序代码在代码段
    • CS:指明代码段在主存中的段基地址
    • EIP:给出将要执行指令的偏移地址
  • 指令顺序寻址,程序顺序执行 ►处理器自动增量EIP
  • 指令跳转寻址,程序控制转移 ►EIP(CS)随之改变

程序转移的范围(远近)在 IA-32 处理器中有段内和段间两种。

(1)段内转移

  • 段内转移是指在 前代码段范围内的程序转移.因此不需要更改代码段寄存器 CS 的内容,只要改变指令指针寄存器 EIP 的偏移地址.
  • 段内转移相对较近,故也被称为近转移 (类型属性使用“NEAR”关键字)
  • 如果转移范围在127~-128字节之间, (位移量使用1个字节)又称为短转移(类型属性使用“SHORT”关键字)

(2)段间转移

  • 段间转移是指程序从当前代码段跳转到另一个代码段,此时需要更改代码段寄存器 CS 的内容和指令指针寄存器 ElP 的偏移地址。
  • 段间转移可以在整个存储空间内跳转、相对较远,故也被称为远转移(类型属性使用“FAR”关键字)

三、指令寻址方式

在这里插入图片描述

(1)顺序寻址

EIP自动增量指向下一条指令,顺序执行接着的下一条指令.

(2)跳转寻址

控制流程跳转(转移)到指定指令位置,实现程序分支、循环、调用等结构.

1.指令的相对寻址

相对寻址是指令代码提供目标地址相对于当前指令指针寄存器 EIP 的位移量,转移到的目标地址(转移后的 EIP 值)就是当前 EIP 值加上位移量
提供目标地址相对于当前指令指针EIP的位移量

目标地址(转移后的IP)=当前EIP+位移量
  • 相对寻址都是段内转移:由于要基于同一个基地址计算位置, 所以相对寻址都是段内转移。
  • 最常用、最灵活:一个程序被操作系统安排到不同的存储区域执行时,指令间的位移没有改变,相对寻址也就无须改变转移地址,给操作系统的灵活调度提供了很大方便。

2.指令的直接寻址

直接寻址是指令代码直接提供目标地址:

目标地址=指令操作数
  • 理论上直接寻址可以段内或段间转移
  • IA-32只支持段间的直接转移

3.指令的间接寻址

间接寻址是指令代码指示寄存器或存储单元,目标地址来自寄存器或存储单元,是通过间接手段获得的。

  • 寄存器间接寻址:用寄存器保存目标地址
  • 存储器间接寻址:用存储单元保存目标地址
    在这里插入图片描述

以上是关于汇编语言指令寻址的主要内容,如果未能解决你的问题,请参考以下文章

汇编语言中操作数寻址方式都有哪些,各自有啥特点,怎么区分呢?

汇编指令学习(寻址方式)

什么是立即数寻址

Linux驱动开发:ARM汇编基础

汇编语言转移指令&循环指令

汇编:cmp指令和寻址