第四章汇编语言程序设计的基本方法 顺序、分支、循环程序和子程分析问题 序的设计是汇编语言程序设计的基 本内容。 寻找解决问题的 思路、方法、算法 在此基础上还要掌握汇编语言 程序设计的基本方法和技巧,包 描述算法 括递归子程序设计、COM和EXE 格式程序的结构和特点、多模块 编写程序实现算法 程序设计方法等 设计测试数据 和预期计算结果 程序设计的解题基本步骤如下: 上机调试程序
分析问题 寻找解决问题的 思路、方法、算法 描述算法 编写程序实现算法 设计测试数据 和预期计算结果 上机调试程序 第四章 汇编语言程序设计的基本方法 程序设计的解题基本步骤如下: 顺序、分支、循环程序和子程 序的设计是汇编语言程序设计的基 本内容。 在此基础上还要掌握汇编语言 程序设计的基本方法和技巧 ,包 括递归子程序设计、COM和EXE 格式程序的结构和特点、多模块 程序设计方法等
41程序的几种基本结构 程序的基本结构有三种:顺序结构、分支结构、循环结构 顺序结构:按语句的书写顺序依次执行 分支结构:根据不同的条件判断结果,执行不同的程序段, 实现程序分支。 <判定条件 成立 不成立 条件成立 程序段1 程序段2 程序段14程序段2 程序段n 图41·两路分支结构 图42多路分支结构
4.1 程序的几种基本结构 程序的基本结构有三种:顺序结构、分支结构、循环结构 顺序结构:按语句的书写顺序依次执行 分支结构:根据不同的条件判断结果,执行不同的程序段, 实现程序分支
循环结构:由条件是否成立,确定是否重复执行某段程序。 <条件成立? 不成立 程序段 成立 成立 程序段 条件成 不成立 (a)当型循环 (b)直到型环 42顺序程序设计 例4-1(p77)查表求2的整次幂(2",n=0,1,…,14) 分析:字节编号:0123456789 28 29 array 202 14 字编号:0 注意:地在表中(即数组aray中)的存放规律,n好是2在表中 的存放字单元的顺序号。例:(aray+2*3)=(aay+6)=23=8 ●表地址= array+2*n就是存放2的单元地址
循环结构:由条件是否成立,确定是否重复执行某段程序。 4.2 顺序程序设计 例4-1 (p 77) 查表求2的整次幂(2 n ,n=0,1,…,14) 分析: 表地址=array+2*n 就是存放2 n的单元地址 2 0 2 1 2 2 2 3 2 4 ……. 2 14 字编号: 0 1 2 3 4 14 array 字节编号: 0 1 2 3 4 5 6 7 8 9 28 29 注意:2 n在表中(即数组array中)的存放规律,n正好是2 n在表中 的存放字单元的顺序号。 例: (array+2*3)= (array+6)= 2 3 =8
43分支程序设计 程序的分支通过转移指令来实现,因此转移指令的操作 应该是能够改变程序执行顺序。△方法:修改CSP 4.3.1转移指令(不影响任何标志位) 转移指令分为两类:无条件转移指令、条件转移指令 1)无条件转移指令 指令格式:JMP标号无条件转移到标号指向的指令继续执行 无条件转移{段内转移「直接己址 段间转移间接寻址 (1)段内转移(段内直接寻址) 段内转移只需修改IP实现转移:使IP一→标号所在行的指令 即:(IP)一标号所在行指令的偏移地址 段内转移分为三种形式: o段内直接短转移格式: JMP SHORT标号 操作:(IP)←(IP)+D(8位偏移量)
4.3 分支程序设计 程序的分支通过转移指令来实现,因此转移指令的操作 应该是能够改变程序执行顺序 。 4.3.1 转移指令 转移指令分为两类:无条件转移指令、条件转移指令 1 ) 无条件转移指令 指令格式:JMP 标号 无条件转移到标号指向的指令继续执行 无条件转移 段内转移 段间转移 直接寻址 间接寻址 (不影响任何标志位 ) (1) 段内转移(段内直接寻址) 方法: 修改CS:IP 段内转移只需修改IP实现转移 : 使IP 标号所在行的指令 即: (IP)=标号所在行指令的偏移地址 段内转移分为三种形式: 段内直接短转移 格式:JMP SHORT 标号 操作:(IP)←(IP)+D(8位偏移量)
操作:(P)←(IP)+D(8位偏移量) 例 JMP SHORT NEXT NEXT: MOV AL. 4 存储器 代码段 根据JMP指令的操作 M指令汇B010 转移目的地址为: (IP)+D=0122H+30H=0152H→(IP) 30 0121H 0122H (IP) D=30H 下一条要执行的指令 MOV指令B0 0152H 段内短转移范围: 04 0153H 以MP指令为中心的-128~+127字节内 段内短转移
段内短转移 例: JMP SHORT NEXT NEXT: MOV AL, 4 MOV指令 D=3 0H (IP) B0 04 … … … 存储器 代码段 EB 30 0152H 0120H 0121H 0153H 0122H JMP指令 下一条要执行的指令 段内短转移范围: 以JMP指令为中心的-128~+127字节内 根据JMP指令的操作 转移目的地址为: (IP)+D=0122H+30H= 0152H (IP) 操作:(IP)←(IP)+D(8位偏移量)