汇编与接口 h2-12_寻址方式-2012.ppt
文本预览下载声明
三、间接寻址(段内、段间) 间接寻址分段内和段间间接寻址,指令中以间接方式给出转移指令的目标地址,转移指令的目标地址,通常存放在数据段。采用 (E) BP寻址,指令目标地址放在堆栈段。使用段超越前缀,也可以存放在其它段。 例2.11 间接寻址(段内、段间) ·MODEL MEDIUM 地 址 操作数 ·DATA 1D26:0000 0800251D BUF DD NEXT ;标号NEXT的地址 ·CODECODE1 地 址 机器码 ·STARTUP 1D24:0010 BB0000 MOV BX,OFFSET BUF 1D24:0013 FF2F JMP FAR PTR[BX] ;转移到CODE2段 标号NEXT处 1D24:0015 B210 MOV DL,10 ┆ ·CODE CODE2 1D25:0008 8ACA NEXT: MOV CL,DL 1D25:000A 32D2 XOR DL,DL ·EXIT END 2.1.3 堆栈地址寻址 堆栈段用于暂存数据,并且为程序保存返回地址。堆栈的存取方式不同于一般数据段,堆栈采用先进后出的存取方式。 使用PUSH指令将操作数压入堆栈,使用POP指令从堆栈中弹出操作数。堆栈栈顶指针为(E)SP。 在16位指令模式下,堆栈地址由SS×10H+SP形式。 在32位指令模式下,段寄存器SS存放段选择符,通过段选择符访问段描述符,获取32位段址,ESP存放偏移地址。 使用PUSH 源操作数 指令,向堆栈压入一个字的具体操作为: SP←SP-1 ;源操作数高8位存入栈顶 SP←SP-1 ;源操作数低8位存入栈顶 使用POP目的操作数 指令,从堆栈弹出一个字的具体操作为: SP← SP+1;栈顶内容传送到目的操作数低8位 SP←SP+1;栈顶内容传送到目的操作数高8位; 堆栈操作数据类型允许为字或双字,操作数为字类型时,SP值加/减2,操作数为双字类型时,ESP值加/减4。 图2.10 进栈出栈操作示意图 堆栈操作主要用途为:寄存器内容保护,现场和返回地址的保存,参数传递、存储局部变量。 2.2 80x86指令格式 2.2.1 80x86指令编码格式 是指指令的机器码表示格式,其最多可以由以下5部分组合构成: 前 缀 操作码 寻址方式 偏移量 立即数 0~2字节 1~2字节 0~2字节 0~4字节 0~4字节 一.前缀(使16位←→32位) 指令前缀有两种:地址长度前缀 操作数长度前缀 汇编程序在汇编时,根据当前代码段的USE属性、地址长度属性、操作数长度属性决定是否产生前缀。可以将指令操作数或地址长度,由16位转换到32位,或由32位转换到16位
显示全部