汇编语言 程序设计第 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.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 循环控制方法和程序举例如何控制循环是循环程序设计中一个重要环节,控制循环的方法很多,常用的有,
用计数器控制循环 ( 循环次数已知 )
按条件控制循环 ( 循环次数未知 )
用开关变量控制循环用逻辑尺控制循环