《IBM-PC汇编语言程序设计》(清华大学出版社)笔记(二)

2       80x86的指令系统和寻址方式

2.1 80x86的寻址方式

       指令:操作码字段 + 操作数字段

操作码字段指示计算机所要执行的操作,操作数字段指出指令执行操作的过程中所需要的操作数

2.1.2 与数据相关的寻址方式

              与数据相关的寻址方式是用来确定操作数地址从而找到操作数

2.1.2.1 立即数寻址方式

1)      操作数直接放在指令中,紧跟在操作码之后。作为指令的一部分存放在代码段里

2)      用来表示常数,经常用于给寄存器赋值

3)      只能用于源操作数字段,不能用于目的操作数字段,且源操作数长度应该与目的操作数长度一致

4)      Mov AL,5   à  (AL) = 05H

2.1.2.2 寄存器寻址方式

1)      操作数在寄存器中,指令指定寄存器号。

2)      操作数就在寄存器中,不需要访问存储器取得操作数,因而有较高的运算速度

3)      Mov AX,BX ( (BX) = 05H )  à  (AX) = 05H BX内容保持不变

2.1.2.3 直接寻址方式

1)      操作数的有效地址,只包含位移量。存放在代码段 中指令的操作码之后

2)      适用于处理单个变量

3)      Mov AX , [2000H]

2.1.2.4 存储器间接寻址方式

1)      有效地址存储在某个寄存器中,操作数在存储器中

2)      用于表格处理,执行完一条指令之后,只需要修改寄存器内容就可以取出表格的下一项

3)      (DS) = 2000H, (BX) = 1000H     mov AX,[BX]  à物理地址 = 20000+1000

2.1.2.5 寄存器相对寻址方式

1)      有效地址由两种成分组成,详见 表2.3

2)      可用于表格处理,表格的首地址可设置为位移量,利用修改基址或变址寄存器的内容来取得表格中的值

3)      物理地址(PA) = 基址 + 变址 + 位移量

2.1.2.6 基址变址寻址方式

1)      有效地址由两部分组成,详见 表2.3

2)      适用于数组或者表格处理,首地址可存放在基址寄存器中,而用变址寄存器来访问数组中的各个元素,两个寄存器都可修改

3)      Mov AX, [BX][DI]  ( == Mov AX, [BX + DI])

(DS) = 2100H, (BX) = 0158H, (DI) = 10A5H

è EA = 0158 + 10A5 = 11FDH    PA= 21000 + 11FD = 221FDH

4)      使用段跨越前缀时的格式:  mov AX, ES : [BX][SI]

 

2.1.2.7 相对基址变址寻址方式

1)      有效地址由三部分组成。详见表2.3

2)      常用于对二维数组的寻址

3)      Mov AX, MASK [BX] [SI]

等同于 MOV AX , MASK[BX + SI] 或 MOV AX, [MASK + BX + SI]

(DS)= 3000H , (BX) = 2000H  , (SI) = 1000H ,MASK = 0250H

PA = 16d * (DS) + (BX) + (SI) + MASK

2.1.2.8 不常用寻址方式

1)      比例变址寻址方式

2)      基址比例变址寻址方式

3)      相对基址比例变址寻址方式

2.1.3 与转移地址有关的寻址方式
2.1.3.1 段内直接寻址

1)      转向的有效地址是当前IP 寄存器的内容和 指令中指定的 8位 或 16位位移量之和

2)      有效地址组成详见表2.4

3)      转移指令本身不会发生变化

4)      适用于条件及无条件转移指令,用于条件转移指令时,位移量只允许8位

5)      短跳转:无条件转移指令位移量为8位时   JMP NEAR PTR PROGIA

近跳转:无条件转移指令位移量为16位时  JMP SHORT QUEST

2.1.3.2 段内间接寻址

1)      有效地址组成详见表2.4

2)      有效地址的获取,不能使用立即数寻址方式,其他的都可以

3)      不能用于条件转移指令,条件指令转移条件只能使用段内直接寻址的8位位移量

4)      JMP 和CALL 指令则可用四种寻址方式中的任何一种

5)      JMP BX

JMP WORD PTR [BP + TABLE]

6)      (DS) = 2000H ,(BX) =1256H ,(SI)= 528FH ,位移量 = 20A1H,(232F7H)=3280H

JMP BX  à (IP) = 1256H

JMP TABLE[BX]  à (IP)= (16d * (DS) + (BX) + 位移量)

2.1.3.3 段间直接寻址

1)      在指令中直接提供转向段地址,偏移地址,所以只要用指令中指定的偏移地址取代IP寄存器的内容,用指令中指定的段地址取代CS寄存器的内容,就完成了从一个段到另一个段的转移操作

2)      JMP FAR PTR AB

2.1.3.4 段间间接寻址

1)      用存储器的两个相继字的内容,取代IP,CS寄存器中的原始内容

2)      存储单元的地址是由指令指定 除立即数寄存器方式以外的任何一种数据寻址方式

3)      JMP DWORD PTR [A + BX]

2.1.3.5 有效地址

1)      偏移地址 = 有效地址

2)      有效地址可以由以下四种成分组成

a)      位移量,存放在指令中的一个数,不是立即数,是地址

b)      基址,存放在基址寄存器中的内容。是有效地址中的基址部分,通常用来指向数据段数组字符串首地址

c)       变址,存放在变址寄存器中的内容。通常用来访问数组中的某个元素或字符串中的某个字符

d)      比例因子,其值可为1,2,4或8。可用变址寄存器中的内容乘以比例因子来取得变址值。对访问元素长度为2,4,8字节的数组特别有用

e)      EA = 基址+ (变址 * 比例因子) + 位移量     比例因子是固定值

 

表2.1  16/32位寻址时有效地址四种成分的组成

四种成分

16位寻址

32位寻址

位移量

0,8,16位

0,8,32位

基址寄存器

BX,BP

任何32位通用寄存器(包括ESP)

基址寄存器

SI,DI

除ESP以外的32位通用寄存器

比例因子

1,2,4,8

 

2.1.3.6 以下几种情况不允许使用段超越前缀

1)      串处理指令的目的串必须用ES段

表2.2默认段选择规则

访问类型

所用段及段寄存器

缺省选择规则

指令

代码段  CS

用于取指

堆栈

堆栈段  SS

所有的堆栈的进栈和出栈

任何用ESP或EBP作为基址寄存器的访存

局部数据

数据段  DS

除相对于堆栈以及串处理的目的串

2.1.3.7  “与数据相关的寻址方式”总结

1)      没有有效地址(EA)的:寄存器寻址方式、立即数寻址方式

2)      各个寻址方式有效地址的组成:

表 2.3 各个寻址方式有效地址的组成

寻址方式

有效地址组成

备注

寄存器寻址方式

 

立即数寻址方式

 

直接寻址方式

位移量

 

寄存器间接寻址方式

基址寄存器内容 或 变址寄存器内容

 

寄存器相对寻址方式

基址寄存器 或 变址寄存器 和 指令中的位移量之和

 

基址变址寻址方式

一个基址寄存器 和 一个变址寄存器 的内容之和

 

相对基址变址寻址方式

一个基址寄存器 和 一个变址寄存器的内容与 指令中指定的位移量之和

 

 

3)      与转移地址有关的寻址方式的有效地址的组成

表2.4 与转移地址有关的寻址方式的有效地址的组成

寻址方式

有效地址组成

备注

段内直接寻址

当前IP值的位移量

(取代IP寄存器中的内容)

相对寻址方式

位移量 = 转向的EA – 当前IP值

段内间接寻址

一个寄存器 或 一个存储单元的内容(取代IP寄存器中的内容)

除立即数寻址以外的任何一种方式

 

 

 

 

 

 

 

4)      8086中为了使指令字不要过长,规定双操作数指令的两个操作数中,只有一个使用存储器存储方式 ,这就是一个变量通常先送到寄存器的原因

5)      条件指令转移条件只能使用段内直接寻址的8位位移量

 

  • 2
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值