汇编语言 程序设计
第 5章 程序设计基础技术
在汇编语言程序设计中,程序有顺序、
分支、循环和子程序四种基本结构形式。
5.1 程序设计概述
5.2 顺序结构程序设计
5.3 分支结构程序设计
5.4 循环结构程序设计
汇编语言 程序设计
5.1 程序设计概述
汇编语言程序设计的基本过程可分为
以下几个步骤:
( 1) 分析问题, 建立数学模型
( 2) 确定算法
( 3) 画流程框图
( 4) 编写程序
( 5) 上机调试程序
返回
汇编语言 程序设计
5.2 顺序结构程序设计
顺序程序设计也称为简单程序设计,
这种结构的程序不使用分支、循环结构,
程序本身的逻辑非常简单,所以只能完
成一些简单操作。其特点是程序顺序执
行,由前向后逐条执行指令。
返回
汇编语言 程序设计
5.3 分支结构程序设计
分支程序结构有两种形式:二分支
程序结构和多分支程序结构 。
程序的分支一般是通过执行转移指
令来实现的 。
5.3.1.转移指令
转移指令分为无条件转移指令和条
件转移指令。
汇编语言 程序设计
1,无条件转移指令
格式,JMP OPR
无条件转移分为段内转移和段间转移 。
( 1) 段内直接短转移
格式,JMP SHORT OPR
( 2) 段内直接近转移
格式,JMP NEAR PTR OPR
( 3) 段内间接转移
格式,JMP WORD PTR OPR
汇编语言 程序设计
( 4) 段间直接远转移
格式,JMP FAR PTR OPR
( 5) 段间间接转移
格式,JMP DWORD PTR OPR
2,条件转移指令
( 1) 根据条件标志位的状态判断的转移指令
这组条件转移指令共有 10条 。
① JZ/JE 结果为零 /相等则转移 。
格式,JZ/JE OPR
测试条件,ZF=1
汇编语言 程序设计
② JNZ/JNE 结果不为零 /不相等则转移 。
格式,JNZ/JNEOPR
测试条件,ZF=0
③ JS 结果为负则转移 。
格式,JS OPR
测试条件,SF=1
④ JNS 结果为正则转移 。
格式,JNS OPR
测试条件,SF=0
汇编语言 程序设计
⑤ JO 溢出则转移 。
格式,JO OPR
测试条件,OF=1
⑥ JNO 不溢出则转移 。
格式,JNO OPR
测试条件,OF=0
⑦ JP/JPE 奇偶位为 1则转移 。
格式,JP/JPE OPR
测试条件,PF=1
汇编语言 程序设计
⑧ JNP/JPO 奇偶位为 0则转移 。
格式,JNP/JPO OPR
测试条件,PF=0
⑨ JC 进位为 1则转移 。
格式,JC OPR
测试条件,CF=1
⑩ JNC 进位为 0则转移 。
格式,JNC OPR
测试条件,CF=0
汇编语言 程序设计
(2) 根据两个无符号数的比较结果判断
的转移指令
① JB/JNAE 低于 /不高于等于转移 。
格式,JB/JNAEOPR
测试条件,CF=1且 ZF=0
本指令用于两个无符号数 a,b的比较 。 若 a
< b
,则满足条件, 转移 。
② JNB/JAE 不低于 /高于等于则转移 。
格式,JNB/JAEOPR
汇编语言 程序设计
测试条件,CF=0或 ZF=1
本指令用于两个无符号数 a,b的比较。
若 a≥b,则满足条件,转移。
③ JBE/JNA 低于等于 /不高于则转移 。
格式,JBE/JNA OPR
测试条件,CF=1或 ZF=1
本指令用于两个无符号数 a,b的比较 。
若 a≤b, 则满足条件, 转移 。
④ JNBE/JA 不低于等于 /高于则转移 。
格式,JNBE/JA OPR
汇编语言 程序设计
测试条件,CF=0且 ZF=0
本指令用于两个无符号数 a,b的比较。
若 a> b,则满足条件,转移。
( 3)根据两个带符号数的比较结果判断的
转移指令
① JL/JNGE 小于 /不大于等于则转移 。
格式,JL/JNGE OPR
测试条件,SF≠OF 且 ZF=0
本指令用于两个有符号数 a,b的比较 。
若 a< b,则满足条件, 转移 。
汇编语言 程序设计
② JNL/JGE 不小于 /大于等于则转移 。
格式,JNL/JGE OPR
测试条件,SF=OF或 ZF=1
本指令用于两个有符号数 a,b的比较。
若 a≥b,则满足条件,转移。
③ JLE/JNG 小于等于 /不大于则转移 。
格式,JLE/JNG OPR
测试条件,SF≠OF 或 ZF=1
本指令用于两个有符号数 a,b的比较 。
若 a≤b, 则满足条件, 转移 。
汇编语言 程序设计
④ JG/JNLE 大于 /不小于等于则转移 。
格式,JG/JNLE OPR
测试条件,SF=OF且 ZF=0
本指令用于两个有符号数 a,b的比较 。
若 a> b,则满足条件, 转移 。
( 4) 测试 CX内容为零则转移指令
JCXZCX寄存器的内容为零则转移
格式,JCXZ OPR
测试条件,( CX) =0
汇编语言 程序设计
5.3.2 分支程序设计
1.利用比较(或测试)转移指令实现分支
程序设计
2.利用跳转表实现分支程序设计
( 1) 根据表内地址分支
( 2)根据表内指令分支
( 3)根据表内关键字分支
返回
汇编语言 程序设计
5.4 循环结构程序设计
5.4.1 循环程序的结构
1,循环程序的组成
一个循环程序通常由以下 5个部分组成:
( 1)初始化部分
( 2)工作部分
( 3)修改部分
( 4)控制部分
汇编语言 程序设计
( 5)结束处理部分
2,循环程序的结构形式
循环程序有两种结构形式:
( 1), 先执行,后判断, 结构
( 2), 先判断,后执行, 结构
5.4.2 循环指令
循环指令 LOOP
格式,LOOP OPR
测试条件,( CX) ≠ 0
汇编语言 程序设计
当为零或相等时循环指令 LOOPZ/LOOPE
格式,LOOPZ/LOOPE OPR
测试条件,ZF=1且( CX) ≠ 0
当不为零或不相等时循环指令
LOOPNZ/LOOPNE
格式,LOOPNZ/LOOPNE OPR
测试条件,ZF=0且( CX) ≠ 0
汇编语言 程序设计
5.4.3 循环控制方法和程序举例
如何控制循环是循环程序设计中一个重
要环节, 控制循环的方法很多, 常用的
有,
用计数器控制循环 ( 循环次数已知 )
按条件控制循环 ( 循环次数未知 )
用开关变量控制循环
用逻辑尺控制循环
第 5章 程序设计基础技术
在汇编语言程序设计中,程序有顺序、
分支、循环和子程序四种基本结构形式。
5.1 程序设计概述
5.2 顺序结构程序设计
5.3 分支结构程序设计
5.4 循环结构程序设计
汇编语言 程序设计
5.1 程序设计概述
汇编语言程序设计的基本过程可分为
以下几个步骤:
( 1) 分析问题, 建立数学模型
( 2) 确定算法
( 3) 画流程框图
( 4) 编写程序
( 5) 上机调试程序
返回
汇编语言 程序设计
5.2 顺序结构程序设计
顺序程序设计也称为简单程序设计,
这种结构的程序不使用分支、循环结构,
程序本身的逻辑非常简单,所以只能完
成一些简单操作。其特点是程序顺序执
行,由前向后逐条执行指令。
返回
汇编语言 程序设计
5.3 分支结构程序设计
分支程序结构有两种形式:二分支
程序结构和多分支程序结构 。
程序的分支一般是通过执行转移指
令来实现的 。
5.3.1.转移指令
转移指令分为无条件转移指令和条
件转移指令。
汇编语言 程序设计
1,无条件转移指令
格式,JMP OPR
无条件转移分为段内转移和段间转移 。
( 1) 段内直接短转移
格式,JMP SHORT OPR
( 2) 段内直接近转移
格式,JMP NEAR PTR OPR
( 3) 段内间接转移
格式,JMP WORD PTR OPR
汇编语言 程序设计
( 4) 段间直接远转移
格式,JMP FAR PTR OPR
( 5) 段间间接转移
格式,JMP DWORD PTR OPR
2,条件转移指令
( 1) 根据条件标志位的状态判断的转移指令
这组条件转移指令共有 10条 。
① JZ/JE 结果为零 /相等则转移 。
格式,JZ/JE OPR
测试条件,ZF=1
汇编语言 程序设计
② JNZ/JNE 结果不为零 /不相等则转移 。
格式,JNZ/JNEOPR
测试条件,ZF=0
③ JS 结果为负则转移 。
格式,JS OPR
测试条件,SF=1
④ JNS 结果为正则转移 。
格式,JNS OPR
测试条件,SF=0
汇编语言 程序设计
⑤ JO 溢出则转移 。
格式,JO OPR
测试条件,OF=1
⑥ JNO 不溢出则转移 。
格式,JNO OPR
测试条件,OF=0
⑦ JP/JPE 奇偶位为 1则转移 。
格式,JP/JPE OPR
测试条件,PF=1
汇编语言 程序设计
⑧ JNP/JPO 奇偶位为 0则转移 。
格式,JNP/JPO OPR
测试条件,PF=0
⑨ JC 进位为 1则转移 。
格式,JC OPR
测试条件,CF=1
⑩ JNC 进位为 0则转移 。
格式,JNC OPR
测试条件,CF=0
汇编语言 程序设计
(2) 根据两个无符号数的比较结果判断
的转移指令
① JB/JNAE 低于 /不高于等于转移 。
格式,JB/JNAEOPR
测试条件,CF=1且 ZF=0
本指令用于两个无符号数 a,b的比较 。 若 a
< b
,则满足条件, 转移 。
② JNB/JAE 不低于 /高于等于则转移 。
格式,JNB/JAEOPR
汇编语言 程序设计
测试条件,CF=0或 ZF=1
本指令用于两个无符号数 a,b的比较。
若 a≥b,则满足条件,转移。
③ JBE/JNA 低于等于 /不高于则转移 。
格式,JBE/JNA OPR
测试条件,CF=1或 ZF=1
本指令用于两个无符号数 a,b的比较 。
若 a≤b, 则满足条件, 转移 。
④ JNBE/JA 不低于等于 /高于则转移 。
格式,JNBE/JA OPR
汇编语言 程序设计
测试条件,CF=0且 ZF=0
本指令用于两个无符号数 a,b的比较。
若 a> b,则满足条件,转移。
( 3)根据两个带符号数的比较结果判断的
转移指令
① JL/JNGE 小于 /不大于等于则转移 。
格式,JL/JNGE OPR
测试条件,SF≠OF 且 ZF=0
本指令用于两个有符号数 a,b的比较 。
若 a< b,则满足条件, 转移 。
汇编语言 程序设计
② JNL/JGE 不小于 /大于等于则转移 。
格式,JNL/JGE OPR
测试条件,SF=OF或 ZF=1
本指令用于两个有符号数 a,b的比较。
若 a≥b,则满足条件,转移。
③ JLE/JNG 小于等于 /不大于则转移 。
格式,JLE/JNG OPR
测试条件,SF≠OF 或 ZF=1
本指令用于两个有符号数 a,b的比较 。
若 a≤b, 则满足条件, 转移 。
汇编语言 程序设计
④ JG/JNLE 大于 /不小于等于则转移 。
格式,JG/JNLE OPR
测试条件,SF=OF且 ZF=0
本指令用于两个有符号数 a,b的比较 。
若 a> b,则满足条件, 转移 。
( 4) 测试 CX内容为零则转移指令
JCXZCX寄存器的内容为零则转移
格式,JCXZ OPR
测试条件,( CX) =0
汇编语言 程序设计
5.3.2 分支程序设计
1.利用比较(或测试)转移指令实现分支
程序设计
2.利用跳转表实现分支程序设计
( 1) 根据表内地址分支
( 2)根据表内指令分支
( 3)根据表内关键字分支
返回
汇编语言 程序设计
5.4 循环结构程序设计
5.4.1 循环程序的结构
1,循环程序的组成
一个循环程序通常由以下 5个部分组成:
( 1)初始化部分
( 2)工作部分
( 3)修改部分
( 4)控制部分
汇编语言 程序设计
( 5)结束处理部分
2,循环程序的结构形式
循环程序有两种结构形式:
( 1), 先执行,后判断, 结构
( 2), 先判断,后执行, 结构
5.4.2 循环指令
循环指令 LOOP
格式,LOOP OPR
测试条件,( CX) ≠ 0
汇编语言 程序设计
当为零或相等时循环指令 LOOPZ/LOOPE
格式,LOOPZ/LOOPE OPR
测试条件,ZF=1且( CX) ≠ 0
当不为零或不相等时循环指令
LOOPNZ/LOOPNE
格式,LOOPNZ/LOOPNE OPR
测试条件,ZF=0且( CX) ≠ 0
汇编语言 程序设计
5.4.3 循环控制方法和程序举例
如何控制循环是循环程序设计中一个重
要环节, 控制循环的方法很多, 常用的
有,
用计数器控制循环 ( 循环次数已知 )
按条件控制循环 ( 循环次数未知 )
用开关变量控制循环
用逻辑尺控制循环