汇编语言-分支程序结构

1.指令寻址

顺序寻址:EIP自动增量指向下一条指令
•顺序执行接着的下一条指令
跳转寻址:控制流程跳转(转移)到指定指令位置
•实现程序分支、循环、调用等结构
在这里插入图片描述
指令的相对寻址:
•提供目标地址相对于当前指令指针EIP的位移量
目标地址(转移后的IP)=当前EIP+位移量
特点
•相对寻址都是段内转移
•最常用、最灵活
•目标地址=目的地址=转移地址

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

指令的间接寻址
•指示寄存器或存储单元
目标地址来自寄存器或存储单元、间接获得
•寄存器间接寻址:用寄存器保存目标地址
•存储器间接寻址:用存储单元保存目标地址

2.程序流程的控制转移

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

程序转移的范围:段内转移
在当前代码段范围内的程序转移
•不需要改变CS,只要改变EIP(偏移地址)
被称为“近转移”
•类型属性使用“NEAR”关键字
如果转移范围在127~128字节之间,(位移量使用1字节)又称为“短转移”
•类型属性使用“SHORT”关键字

程序转移的范围:段间转移
从当前代码跳转到另一个代码
需要更改CS(段地址)和EIP(偏移地址)
被称为远转移
类型属性使用“FAR”关键字

3.转移指令

无条件转移指令(JMP)
JMP label ;程序转向label标号指定的地址
;段内相对寻址,段间直接寻址
JMP reg32/reg16 ;程序转向寄存器指定的地址
;寄存器间接寻址
JMP mem48/mem32/mem16 ;程序转向存储单元指定的地址
;存储器间接寻址

条件转移指令(Jcc)
根据指定的条件确定程序是否发生转移
Jcc label
;条件满足,发生转移
;否则,顺序执行下条指令
;label表示目标地址,采用段内相对寻址
共16条,分为两类
单个标志状态作为条件
5个状态标志ZF、CF、SF、OF和PF的10种状态
两数大小关系作为条件
比较无符号整数大小
比较有符号整数大小

产生条件的指令
比较指令(CMP)
进行减法运算
用于判断两个数据大小、是否相等
差值不回送目的操作数
按照减法结果影响状态标志
CMP reg,imm/reg/mem ;reg—imm/reg/mem
CMP mem,imm/reg ;mem—imm/reg

测试指令(TEST)
进行逻辑与运算
用于判断某位为0或为1等
其他指令:能够影响状态标志的指令
加减运算指令、逻辑运算指令、移位指令等

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

DbillionBUG

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值