文章目录
顺序结构
- 程序无分支、无循环、无转移, 以直线方式一条指令接着一条指令顺序执行
分支结构
- 运行时, 让机器根据不同情况自动做出判断, 有选择地执行相应的处理程序
- 一般根据标志寄存器的某些位作为判断条件
转移指令
- 转移指令可以改变程序的执行顺序(也就是改变CS:EIP/IP指针的值)
- 转移指令不改变标志寄存器的值
条件转移
调用格式:操作符 标号
如果满足条件,则转移,否则继续执行
分支条件转移特别需要注意以下几点
- 选择合适的转移指令,注意有无符号的区别
- 为每个分支安排好出口
- 把公共部分尽量放到公共段中
简单条件转移
指令名称 | 助记符 | 转移条件 | 功能说明 |
---|---|---|---|
相等/等于0转 | JE/JZ | ZF=1 | 前次操作结果是否相等或等于0 |
不相等/不等于0转 | JNE/JNZ | ZF=0 | 前次操作结果是否不相等或不等于0 |
为负转 | JS | SF=1 | 前次操作结果是否为负 |
为正转 | JNS | SF=0 | 前次操作结果是否为正 |
溢出转 | JO | OF=1 | 前次操作结果是否溢出 |
未溢出转 | JNO | OF=0 | 前次操作结果是否未溢出 |
进位位为1转 | JC | CF=1 | 前次操作结果是否有进位或借位 |
进位位为0转 | JNC | CF=0 | 前次操作结果是否无进位或借位 |
偶转移 | JP/JPE | PF=1 | 前次操作结果中1的个数是否为偶数 |
奇转移 | JNP/JPO | PF=0 | 前次操作结果中1的个数是否为奇数 |
无符号数
无符号数的运算结果有三种情况
- 结果为正:大数-小数,结果为正,无溢出无进位
- 结果为0
- 结果为负:小数-大数,结果为负,高位变成1,产生进位
JA / JNBE
- 大于(above)转移,比较两个无符号数ÿ