第二章-80x86的寻址方式
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
80x86的寻址方式
一、计算机中的指令由:操作码字段 + 操作数字段
操作码字段指示计算机所要执行的操作,操作数字段指出指令执行操作的过程中所需要的操作数
二、与数据相关的寻址方式
与数据相关的寻址方式是用来确定操作数地址从而找到操作数(一)立即数寻址方式
操作数直接放在指令中,紧跟在操作码之后。作为指令的一部分存放在代码段里
用来表示常数,经常用于给寄存器赋值
只能用于源操作数字段,不能用于目的操作数字段,且源操作数长度应该与目的操作数长度一致
如:Mov AL,5
执行后:(AL) = 05H
(二)寄存器寻址方式
操作数在寄存器中,指令指定寄存器号。
操作数就在寄存器中,不需要访问存储器取得操作数,因而有较高的运算速度
如:Mov AX,BX ( (BX) = 05H )
执行后:(AX) = 05H BX内容保持不变
有效地址:
在80x86里,把操作数的偏移地址成为有效地址(EA)
有效地址可以由以下四种成分组成:
1.位移量,存放在指令中的一个8位、16位或32位的数,但它
不是立即数,而是一个地址
2.基址,存放在基址寄存器中的内容。是有效地址中的基址部分,通常用来指向数据段中数组或字符串的首地址
3.变址,存放在变址寄存器中的内容。通常用来访问数组中的某个元素或字符串中的某个字符
4.比例因子,是386及其后继机型新增加的寻址方式中的一个术语,其值可为1,2,4或8。可用变址寄存器中的内容乘以比例因子来取得变址值。对访问元素长度为2,4,8字节的数组特别有用有效地址的计算可以下式表示:
EA = 基址+(变址* 比例因子)+位移量(比例因子是固定值) 16/32位寻址时有效地址四种成分的组成
在以下三种情况下,不允许使用段跨越前缀:
1.串处理指令的目的串必须用ES段
2.PUSH指令的目的和POP指令的源必须用SS段
3.指令必须存放在CS段中
注意:有关比例因子的三种组合只能用于80386及其后继机型。
默认段选择规则
(三)直接寻址方式
操作数的有效地址只包含位移量一种成分。其值存放在代码段中指令的操作码之后。位移量的值即操作数的有效地址。
(四)寄存器间接寻址方式
1.有效地址存储在某个寄存器中,操作数在存储器中
2.用于表格处理,执行完一条指令之后,只需要修改寄存器内容就可以取出表格的下一项
3.根据<默认段选择规则>表中规定,凡使用BP,ESP和EBP时,其默认段为SS段,其他寄存器的默认段为DS寄存器。
(五)寄存器相对寻址方式
1.操作数的有效地址为基址寄存器或变址寄存器的内容和指令中指定的位移量之和,所以有效地址由两种成分组成。
2.可用于表格处理,表格的首地址可设置为位移量,利用修改基址或变址寄存器的内容来取得表格中的值。
(六)基址变址寻址方式
1.操作数的有效地址是一个基址寄存器和一个变址寄存器的内容之和,所以有效地址由两种成分组成。
2.适用于数组或者表格处理,首地址可存放在基址寄存器中,而用变址寄存器来访问数组中的各个元素,两个寄存器都可修改(七)相对基址变址寻址方式
1.操作数的有效地址是一个基址寄存器和一个变址寄存器的内容和指令中指定的位移量之和,所以有效地址由三种成分组成。
2.常用于对二维数组的寻址
(八)以下三种寻址方式与比例因子有关,只能用在386及其后继机型,8086/80286不支持这几种寻址方式。
1.比例变址寻址方式
操作数的有效地址是变址寄存器的内容乘以指令中指定的比例因子再加上位移量之和,所以有效地址由三部分组成
2.基址比例变址寻址方式
操作数的有效地址是变址寄存器的内容乘以比例因子再加上基址寄存器的内容之和,所以有效地址由三种成分组成
3.相对基址比例变址寻址方式
操作数的有效地址是变址寄存器的内容乘以比例因子,加上基址寄存器的内容,再加上位移量之和,所以有效地址由四种成分组成
三、与转移地址有关的寻址方式
(一)段内直接寻址
1.转向的有效地址是当前IP寄存器的内容和指令中指定的8位或16位位移量之和
2.转移指令本身不会发生变化
3.适用于条件及无条件转移指令,用于条件转移指令时,位移量只允许8位(386及后继机型条件转移指令的位移量可为8位或32位)
4.无条件转移指令在位移量为8位时称为短跳转。(JMP SHORT QUEST)
无条件转移指令在位移量为16位时称为近跳转。(JMP NEAR
PTR PROGIA)
在汇编指令中,如果位移量为16位,则在符号地址前加操作符NEAR PTR。如果位移量为8位,则在符号地址前加操作符SHORT。
(二)段内间接寻址
1.转向有效地址是一个寄存器或是存储单元的内容,这个寄存器或存储单元的内容可以用数据寻址方式中除立即数以外的任何一种寻址方式取得,所得到的转向的有效地址用来取代IP寄存器的内容。
2.注意:这种寻址方式以及以下的两种段间寻址方式都不能用于条件转移指令。也就是说,条件转移指令只能使用段内直接寻址的8位位移量,而JMP和CALL指令则可以使用任何跳转方式。
3.段内间接寻址转移指令的汇编格式可以表示为
JMP BX
JMP WORD PTR[BP+TABLE]
其中WORD PTR又称为操作符(伪),用以指出其后的寻址方式所取得的转向地址是一个字的有效地址,也就是说它是一种段内转移。
4.以上两种寻址方式均为段内转移,所以直接把求得的转移的有效地址送到IP寄存器就可以了。
(三)段间直接寻址
1.指令中直接提供了转向段地址和偏移地址,所以只要用指令中指定的偏移地址取代IP寄存器的内容,用指令中指定的段地址取代CS寄存器的内容就完成了从一个段到另一个段的转移操作。
2.这种指令的汇编语言格式可表示为:
JMP FAR PTR NEXTROUTINT