汇编笔记[05][流程转移与子程序]
1 导学-流程转移与子程序
- "转移"综述
- 操作符offset
- jmp指令
- 其他转移指令
- call指令和ret指令
- call和ret的配合使用
- mul指令
- 汇编语言的模块化程序设计
- 寄存器冲突的问题
- 标志寄存器
- 带进(借)位的加减法
- cmp和条件转移指令
- 条件转移指令应用
- DF标志和串传送指令
2 "转移"综述
2.1 转移综述
- 2.1.1 背景
一般情况下指令是顺序地逐条执行的,而在实际中,常需要改变程序的执行流程。
转移指令,
可以控制CPU执行内存中某处代码的指令
可以修改IP,或同事修改CS和IP的指令
转移指令的分类
按转移行为
段内转移:只修改IP,如jmp ax
段间转移:同时修改CS和IP,如jmp 1000:0
根据指令对IP修改的范围不同
段内短转移:IP修改范围为-128~127 【8位】
段内近转移:IP修改范围为-32768~32767 【16位,2个字节】
按转移指令
无条件转移指令(如:jmp)
条件转移指令(如:jcxz)【j:跳转 cx:计数器 z:是否为0】
循环指令(如:loop)
过程
中断
3 操作符offset
4 jmp指令
链接: 视频连接
4.1 jmp指令–无条件转移
jmp指令的功能
无条件转移,可以只修改IP,也可以同时修改CS和IP
jmp指令要给出两种信息
转移的目的地址
转移的距离
- 段间转移(远转移):jmp 2000:1000
- 段内短转移:jmp short 标号;IP的修改范围为-128~127,8位的位移
- 段内近转移:jmp near ptr 标号;IP的修改范围为-32768~32767,16位的位移
4.2 jmp指令:依据位移进行转移
引子:常见指令中的立即书均在机器指令中有提现
问题:jmp short指令中,转移到了哪里?
相对位移
jmp short 的机器指令中,包含的是跳转到指令的相对位置,而不是转移的目标地址
4.3 两种段内转移
4.4 远转移:jmp far ptr 标号
4.5 转移地址在寄存器中的jmp指令
4.6 转移地址在内存中的jmp指令
4.7 jmp指令小结
5 其他转移指令
5.1 jcxz指令
9 汇编语言的模块化程序设计
9.1 用内存单元批量传递参数
9.2 用栈传递参数
9.3 程序的执行过程中栈的变化
10 寄存器冲突问题
10.1 引子
10.2 代码:编程将data段中的字符串转化为大写
10.3 寄存器冲突问题的解决
10.4 寄存器冲突问题的解决示例
11 标志寄存器
11.1 标志寄存器
11.2 认识标志寄存器的特殊之处
11.3 ZF-零标志(Zero Flag)
11.4 PF-奇偶标志(Parity Flag)
11.5 SF-符号标志(Sign Flag)
11.6 CF-进位标志(CarryFlag)
11.7 OF-溢出标志(Overflow Flag)
11.8 综合:一条指令会带来多个标志寄存器的变化
12 带进(借)位的加减法
12.1 adc-带进位加法指令
12.2 adc指令应用:大数相加
12.3 128位数据相加
12.4 sbb指令
13 cmp与条件转移指令
13.1 cmp指令
13.2 无符号数比较与标志位取值
13.3 有符号数比较与标志位取值
13.4 条件转移指令
13.5 条件转移指令的使用
14 条件转移指令应用
14.1 条件转移指令
14.2 应用示例
14.3 应用示例
14.4 应用示例
15 DF标志和串传发送指令
DF标志:方向标志位