80x86寻址方式

 
80x86寻址方式
计算机是通过执行指令序列来解决问题的,因而每种计算机都有一组指令集供给用户使用,这组指令集就称为计算机的指令系统
计算机中的指令由操作码字段和操作数字段两部分组成。操作码字段指示计算机所要执行的操作,而操作数字段则指出在指令执行操作的过程中所需要的操作数
指令的格式一般是:
操作码,操作数…操作数
操作数字段可以有一个、两个或三个,通常称为一地址、二地址或三地址指令
计算机只能识别二进制代码,所以机器指令是由二进制代码组成的,汇编语言是一种符号语言,它用助记符来表示操作码,用符号或符号地址来表示操作数或操作数地址,它与机器指令是一一对应的
1、与数据有关的寻址方式
这种寻址方式用来确定操作数地址从而找到操作数
(1)立即寻址方式
操作数直接存放在指令中,紧跟在操作码之后,它作为指令的一部分存放在代码段里,这种操作数称为立即数。
(2)寄存器寻址方式
操作数在寄存器中,指令指定寄存器号
除了上述两种寻址方式外,以下各种寻址方式的操作数都在除代码段以外的存储区中,通过不同的寻址方式求得操作数地址,从而取得操作数。操作数地址是由段基地址和偏移地址相加而取得的。段基地址在实模式和保护模式下可以从不同途径取得。在80x86里,把操作数的偏移地址称为有效地址(EA),下述各种寻址方式即为求得有效地址(EA)的不同途径
有效地址可以由以下四种成分组成:
位移量是存放在指令中的一个8位、16位或32位的数,但它不是一个立即数,而是一个地址
基址是存放在基址寄存器中的内容,它是有效地址中的基址部分,通常用来指向数据段中数组或字符串的首地址
变址是存放在变址寄存器中的内容,它通常用来访问数组中的某个元素或字符串中的某个字符
比例因子是386及其后续机型新增加的寻址方式中的一个术语,其值可以是1,2,4或8。在寻址中,可用变址寄存器中的内容乘以比例因子来取得变址值
有效地址的计算可以下式表示:
EA=基址+(变址*比例因子)+位移量
16位寻址时有效地址四种成分的组成:
位移量:0,8,16位
基址寄存器:BX,BP
变址寄存器:SI,DI
比例因子:无
32位寻址时有效地址四种成分的组成:
位移量:0,8,16,32位
基址寄存器:任何32位通用寄存器
变址寄存器:除ESP以外的32位通用寄存器
比例因子:1,2,4,8
各种访存类型下所对应的段的默认选择:
指令:代码段,CS寄存器,用于取指
堆栈:堆栈段,SS寄存器,所有的堆栈的进栈和出栈,任何用ESP或EBP作为基址寄存器的访存
局部数据:数据段,DS寄存器,除相对于堆栈以及串处理指令的目的串以外的所有数据访问
目的串:附加数据段,ES寄存器,串处理指令的目的串
实际上,在某些情况下,80x86允许程序员用段跨越前缀来改变系统所指定的默认段
(3)直接寻址方式
操作数的有效地址只包含位移量一种成分,其值就存放在代码段中指令的操作码之后。位移量的值即操作数的有效地址
80x86中为了使指令字不要过长,规定双操作数指令的两个操作数中,只能由一个用存储器寻址方式,这就是一个变量常常先要送到寄存器的原因
(4)寄存器间接寻址方式
操作数的有效地址只包含基址寄存器内容或变址寄存器内容一种成分。有效地址就在某个存储器中,而操作数则在存储器中
(5)直接变址寻址方式
操作数的有效地址为基址寄存器或变址寄存器的内容和指令中指定的位移量之和,有效地址由两部分组成
(6)基址变址寻址方式
操作数的有效地址是一个基址寄存器和一个变址寄存器的内容之和,所以有效地址由两种成分组成
(7)相对基址变址寻址方式
操作数的有效地址是一个基址寄存器与一个变址寄存器的内容和指令中指定的位移量之和,所以有效地址由三部分组成
(8)比例变址寻址方式
操作数的有效地址是变址寄存器的内容乘以指令中指定的比例因子再加上位移量之和,所以有效地址由三部分组成
(9)基址比例变址寻址方式
操作数的有效地址是变址寄存器的内容乘以比例因子再加上基址寄存器的内容之和,所以有效地址由三种成分组成
(10)相对基址比例变址寻址方式
操作数的有效地址是变址寄存器的内容乘以比例因子,加上基址寄存器的内容,再加上位移量之和,所以有效地址由四种成分组成
2、与转移地址有关的寻址方式
这种寻址方式用来确定转移指令及CALL指令的转向地址
(1)段内直接寻址
转向的有效地址是当前IP寄存器的内容和指令中指定的8位或16位位移量之和
(2)段内间接寻址
转向的有效地址是一个寄存器或是一个存储单元的内容。这个寄存器或存储单元的内容可以用数据寻址方式中除立即数以外的任何一种寻址方式取得,所得到的有效地址用来取代IP寄存器中的内容
(3)段间直接寻址
在指令中直接提供了转向段地址和偏移地址,所以只要用指令中指定的偏移地址取代IP寄存器的内容,用指令中指定的段地址取代CS寄存器的内容就完成了从一个段到另一个段的转移操作
(4)段间间接寻址
用存储器中的两个相继字的内容来取代IP和CS寄存器的原始内容,以达到段间转移的目的。这里,存储单元的地址是由指令指定除立即数方式和寄存器方式以外的任何一种数据寻址方式取得
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值