• / 35
  • 下载费用:16 金币  

第4节 汇编语言程序设计 (1)

关 键 词:
汇编语言程序设计 汇编语言程序设计第四节 汇编语言设计1 汇编语言程序
资源描述:
第4章汇编语言程序设计基本方法 2015年5月10日星期日1 第4章 汇编语言程序设计基本方法 教学目标: 通过本章学习要求学生掌握汇编语言程序设计顺序结构 程序设计、选择结构程序设计和循环结构程序设计方法及相 关指令;掌握串操作类指令的应用。 教学内容: 4.1 程序设计方法概述 4.2 顺序结构程序设计 4.3 分支结构程序设计 4.4 循环结构程序设计 4.5 串处理类指令 第4章汇编语言程序设计基本方法 2015年5月10日星期日2 4.1 程序设计方法概述 程序是解决某个问题的指令或语句的有序集合。汇编语 言程序设计是用汇编语言指令、伪指令和宏指令编写的程序。 设计重在 “算法”并遵循一定语法。语法指符合相关 语言的规定;算法是实现问题求解步骤和过程。 高质量程序应具备以下几点: 1.程序结构清晰、简明、易读易调试。 2.程序代码执行速度快。 3.程序代码占用存储空间少。 第4章汇编语言程序设计基本方法 2015年5月10日星期日3 汇编语言程序设计的步骤 汇编语言程序设计步骤 1.分析问题通过分析,完成功能需求 2.确定算法是解决问题步骤,决定程序质量 3.绘制流程图 算法图形化,复杂问题简单化 4.分配存储单元 程序变量的分配及结果的暂存 5.编写源程序 按段式结构编辑汇编源程序 6.静态检查 检查程序结构、指令、语法及功能 7.上机调试 编译、连接运行程序及分析结果 第4章汇编语言程序设计基本方法 2015年5月10日星期日4 【例题4.1】求3个字变量X、Y、Z的和,并存入字变量W 中。 1.分析问题:求三个变量的和即X+Y+Z →W 2.确定算法:取第1个数到AX寄存器,分别与第2、3个 变量相加,结果保存到W变量中。 3.绘制流程图: 4.分配存储单元:为变量X、Y、Z、W分配字类型的存储 单元 5.编写程序: 6.静态检查:检查是否有语法和逻辑错误 7.上机调试:保存程序;编译连接;DEBUG调试;查看 数据段基址和代码段基址,查看内存单元内容,运行程序,查 看结果。 第4章汇编语言程序设计基本方法 2015年5月10日星期日5 DEBUG调试步骤 1.U反汇编 2.D查内存单元 3.G运行 4.D查结果 第4章汇编语言程序设计基本方法 2015年5月10日星期日6 4.2 顺序程序设计 顺序结构是最基本、最简单的一种程序结构,主要由数 据传送指令、算术运算指令及逻辑运算指令组成。顺序结构中 ,指令从上到下逐条被顺序执行。 【例题4.2】编写程序:将FIRST字变量与SECOND字变量 相加,结果存至THIRD1字变量中,然后再将FIRST和SECOND两个 字变量相乘,结果存至THIRD2双字变量中。 分析:定义两个字变量并初始化,取第1个变量值到AX寄 存器,再与第2个变量相加,和存到THIRD1单元中;再取第1个 变量到AX寄存器,与第2个变量相乘,乘积高16位在DX寄存器中 ,低16位在AX寄存中,并分别存到THIRD2的变量中。 第4章汇编语言程序设计基本方法 2015年5月10日星期日7 【例题4.6】 编写程序: 输入0~9之间任意两个数值,分 别完成加法与乘法的运算并输出 结果。 分析:用9号功能,输出提 示信息;用1号功能实现输入数据 ;用2号功能实现输出数据;采用 非压缩BCD码存放一个十进制数。 实现流程图如右: 第4章汇编语言程序设计基本方法 2015年5月10日星期日8 4.3 分支程序设计 分支结构程序设计中关键而重要的问题是设计何种运算 来产生标志位,根据标志位选用合适的转移指令。 转移指令 无条件转移指令JMP CALL RET 有条件转移指令简单条件、有符号数、无符号数 共同特点:改变指令指针寄存器IP的值即发生跳转 第4章汇编语言程序设计基本方法 2015年5月10日星期日9 分支结构程序设计方法 如判断某个数是正数还负数。一个数是正数则最高位是0; 一个数是负则最高位是1。因此根据运算后,去判断状态标志位 SF的值。 如:1.TEST (AND、OR)如:TEST AL,AL 2.测试最高位是0/1 如:TEST AL,80H 3.跟0异或 如:XOR AL,0 4.和0加减 如:ADD AL,0 5.移位或循环移位 如:SHL AL,1 2.根据状态标志位,选择合理的转移指令。 方法1,3,4选JS指令;方法2选JNZ指令,方法5选JC指令 1.设计运算,产生状态标志位 第4章汇编语言程序设计基本方法 2015年5月10日星期日10 4.3.1 控制类转移指令 1.条件转移指令 条件转移指令 简单条件转移指令:判断单个标志位决定是否转移 无符号条件转移指令:判断多个标志位决定是否转移 有符号条件转移指令:判断多个标志位决定是否转移 指令格式:JXX 标号 指令功能:使CPU根据状态标志位判断是转移到 标号处还是顺序执行。转移范围-128 ~ +127 第4章汇编语言程序设计基本方法 2015年5月10日星期日11 (1)简单条件转移指令 第4章汇编语言程序设计基本方法 2015年5月10日星期日12 【例题4.7】分析下列程序段,指出程序运行后,变量Y中的 内容是什么。其中X、Y均是字变量,X之中存放有符号数x。 : MOV Y,-1 MOV AX,X CMP AX,0 JE EXIT1 ADD AX,1000H JO OVERFLOW JNS EXIT1 NEG AX EXIT1:MOV Y,AX EXIT: MOV AH,4CH INT 21H OVERFLOW:… : MOV AH,4CH INT 21H (Y)= 0 x=0时 -1 x≥7000时 |x+1000H| x≠0且x≤7000H 第4章汇编语言程序设计基本方法 2015年5月10日星期日13 【例题4.8】编写程序:判断某个数是正数还是负数,若 是正则打印0信息,若是负数打印1信息。 分析:1.TEST (AND、OR)即TEST AL,AL 2.测试最高位是0/1 即TEST AL,80H 3.跟0异或 即XOR AL,0 4.和0加减 即ADD AL,0 5.移位或循环移位 即SHL AL,1 本题采用测试最高位是0/1,判断该数是正数还是负数。 程序代码: 第4章汇编语言程序设计基本方法 2015年5月10日星期日14 (2)无符号数条件转移指令 无符号数条件转移指令往往跟在比较指令之后,根据运 算结果设置的条件标志状态确定转移方向。这类指令将比较对 象视为无符号数。根据不同状态,设置了高于、高于或等于、 低于、低于或等于4种指令 第4章汇编语言程序设计基本方法 2015年5月10日星期日15 【例题4.9】编写程序:若X、Y是数据区中16位无符号数 ,求下列函数的功能。 X-100 当100<X≤65535 Y= 2*X 当 0<X<100 X 当 X=100 分析:数据段定义X、Y两个字变 量并初始化X变量。取X到AX寄存器并判 断,在不现范围,实现不同运算。实现 算法流程图如右所示: 程序代码: 第4章汇编语言程序设计基本方法 2015年5月10日星期日16 (3)有符号数条件转移指令 有符号数条件转移指令一般跟在比较指令之后,根据运 算结果设置的条件标志状态确定转移方向。这类指令将比较对 象视为有符号数。根据不同状态,设置了大于、大于或等于、 小于、小于或等于4种指令。 第4章汇编语言程序设计基本方法 2015年5月10日星期日17 有符号数和无符号数比较标准 有符号数比较标准无符号数比较标准 【例题4.10】分析程序:下 列程序段执行后,实现什么功能? MOV SI,0 NEXT:MOV WORD PTR [SI],0 ADD SI,2 CMP SI,0F000H JBE NEXT 功能:地址为0000H 到F000H的字单元置0。 第4章汇编语言程序设计基本方法 2015年5月10日星期日18 2.无条件转移指令 无条件转移指令使IP无条件地转移到指令中指明的目的 地址处执行。无条件转移指令和转移目的地址在同一段称段内 转移;无条件转移指令和转移目的地址不在同一段称为段间转 移。寻址方式有:直接寻址,间接寻址。 第4章汇编语言程序设计基本方法 2015年5月10日星期日19 4.3.2 分支结构程序设计 分支结构分为单分支结构(比较/测试)、双分支结构( 比较/测试)和多分支结构(跳转表)。它们都是实现转移,但 是汇编语言没有提供转移语句,转移过程需要编程者运用条件 转移指令来构造。 在汇编语言的分支结构程序设计中,一般是先使用算术 运算指令、比较指令、逻辑运算指令或测试指令等,根据运算 结果在标志寄存器中设置相应的状态标志位,再使用相应的条 件转移指令。 第4章汇编语言程序设计基本方法 2015年5月10日星期日20 分支结构程序设计步骤 分支结构程序设计步骤 1.通过运算产生条件:设置状态标志位值 2.选择合适的转移指令:是分支设计正确与否的关键 3.安排好每个分支的出口:转移到公共部分或结束 4.各分支公共部分应在一起:程序结构清晰 5.分支较多时,应绘制流程图 6.多分支结构:地址表法;逻辑分解法 第4章汇编语言程序设计基本方法 2015年5月10日星期日21 4.3.3 分支程序设计举例 【例题4.11】 编写程序:比较两个带符号字节数的大小 ,找出两个数中大的存入MAX字节单元中。 分析:在数据段定义三个变量X1、X2、MAX,其类型为字 节,对X1、X2两个变量初始化一定值。在代码段中实现比较判 断功能,其算法:将X1取到AL寄存器中,再将(AL)的内容同 X2比较,若大,则将(AL)→MAX;否则X2→MAX。 程序代码: 第4章汇编语言程序设计基本方法 2015年5月10日星期日22 【例题4.12】编写程序:在内存单元中有三个互不相等 的无符号字数据,分别存放在BUF开始的字单元中,将其中最大 值存入MAX字单元中。 4.3.3 分支程序设计举例 分析:在数据段中定义两变量BUF、MAX,是字类型并对 BUF变量初始化。算法:先将第一个数放到AX中,再依次和第 二个、第三个比较,每次比较后,若比AX中的数大,则将大的 数置换AX中的数,保证AX中始终是最大数,最后将AX中的数送 到MAX存储单元中。用无符号数转移指令JA/JNB/JNA/JB。 程序代码: 第4章汇编语言程序设计基本方法 2015年5月10日星期日23 4.3.3 分支程序设计举例 【例题4.15】编写程序:字节变量BUFX和BUFY存放整数 ,试编写程序完成下列指定的操作。 若两个数中有一个是奇数则将奇数存入BUFX字节单元中 ,偶数存放到BUFY单元中;若两个数均为奇数,则两数分别加1 ,并存原单元中;若两个数均为偶数,则两变量内容不变。 分析:判断奇数或偶数的方法:即测试该数的最低位是0 或1。首先将BUFX和BUFY作异或运算,运算的结果再同01H进行 测试。若结果为0,则说明BUFX和BUFY是同类;若结果为1,则 说明BUFX和BUFY是异类。程序代码: 第4章汇编语言程序设计基本方法 2015年5月10日星期日24 4.3.3 分支程序设计举例 【例题4.16】编写程序:根据键盘输入的1~4字符,分 别在屏幕上打印对应的加法、减法、乘法和除法的字符串。 分析:在数据段定义若干变量字符串,分别用于显示的 相关信息。通过键盘输入的字符由1号功能实现,输入字符的 ASCII码值在AL寄存器中,对AL寄存器内容进行判断,根据判 断情况,实现不同的转移。在各个分支转移中实现字符中的打 印。 程序代码: 第4章汇编语言程序设计基本方法 2015年5月10日星期日25 4.4 循环结构程序设计 循环结构是重复执行某段程序,直至满足某个条件才结 束循环操作。循环结构程序一般由循环初始状态设置部分、循 环操作部分、循环修改部分、循环控制部分和结束处理部分构 成。 循环结构程序构成 初始状态设置:地址指针、循环次数、累加器、标志位 循环操作:从初始新状态开始,动态执行相同操作难点 循环修改:修改每次循环后内容,为下一循环做好准备 循环控制:控制循环的继续和终止,设计的关键 循环结束:存储结果或打印结果 第4章汇编语言程序设计基本方法 2015年5月10日星期日26 在循环结构程序设计中,循环控制和循环操作是程序设 计过程中的关键和难点。循环操作是要解决重复做何事,循环 控制是要解决在什么时候重复做。循环有两种结构: 先处理,后判断 先判断,后处理 第4章汇编语言程序设计基本方法 2015年5月10日星期日27 4.4.1 循环指令 循环是一种特殊的转移流程,当满足(或不满足)某条 件时,重复执行某一程序段,直到不满足(或满足)条件为 止。8086CPU设计了专门用于控制循环的指令。 循环指令 1.计数循环:LOOP 标号 CX-1→CX,CX≠0,循环 2.相等/为0计数循环指令LOOPE/LOOPZ LOOPE/LLOPZ 标号 CX-1→CX,CX≠0且ZF=1,循环 3.不相等/不为0计数循环指令LOOPNE/LOOPNZ LOOPNE/LLOPNZ 标号 CX-1→CX,CX≠0且ZF=0,循环 4.CX寄存器为0转移:JCXZ/JECXZ 标号 CX=0,循环 第4章汇编语言程序设计基本方法 2015年5月10日星期日28 【例题4.17】编写程序:已知有N个数据存放在以BUF为 首地址的字节存储区中,统计其中负数的个数。并将统计结果 保存到RESULT单元中。 分析:在BUF存储区定义若干个字节数;设置BX指向BUF 首地址指针用于取数;AX存放统计的负数个数;CX用于存放BUF 存储区中数的个数。判断负数方法:取一个数到DL寄存器中, 与0比较,小,则AX寄存器内容加1。(或取一个数到DL寄存器中 ,与0相减,判断SF=1否,是则AX寄存器内容加1,直致所有数 判断完。还有其它) 算法实现流程图: 程序代码: 第4章汇编语言程序设计基本方法 2015年5月10日星期日29 4.4.2 循环结构控制方法 循环结构控制是循环程序设计的一个重要环节。在解决 实际问题时,当循环次数已知的情况下,使用计数控制;当循 环次数未知,但循环条件是可以设计的,使用条件控制。 1.计数控制法 当循环次数已知时,通常使用计数控制。 计数控制方法 倒计数法:次数N送CX,循环1次 CX-1 当CX=0 结束循环 正计数法:0送CX,循环1次 CX+1 当CX=N 结束循环。 将【例题4.17】改为正计数法,程序如何? 第4章汇编语言程序设计基本方法 2015年5月10日星期日30 2.条件控制法 在实际中,有时循环次数无法事先预知,但它与解决问 题中的某些条件有关。这些条件可以通过指令测试。如果测试 的结果满足循环条件,则循环继续,否则退出循环。 MOV CL,0 AGAIN:AND AX,AX JZ NEXT SAL AX,1 JNC AGAIN INC CL JMP AGAIN NEXT: … 【例题4.18】分析下列指令代码实现什么功能? 分析:AX为0,则转到NEXT处;否 则对AX内容左移1位,CF=1否?等于1, CL加1,无条件转到再判断AX为0否,重 复上述过程。 功能:求AX寄存器中有多少个1。 第4章汇编语言程序设计基本方法 2015年5月10日星期日31 4.4.3 单重循环结构程序设计 单重循环,指循环体内不再包含循环结构的循环。主要 采用计数控制法实现循环和条件控制法实现循环。 【例题4.19】编写程序:已知以BUF为首地址的字存储区 中存放着N个有符号的二进制数,将其中大于等于0的数依次送 入以BUF1为首地址的字存储区中,小于0的数依次送入以BUF2为 首地址的字存储区中。 分析:实现算法流程图: 程序代码: 第4章汇编语言程序设计基本方法 2015年5月10日星期日32 【例题4.21】编写程序:已知在以BUF为首地址的字节存 储区中,存放着一个以’$’作结束标志的字符串。在屏幕上显 示该字符串,并要求将其中所有的小写字母以大写字母的形式 显示出来。 分析:从BUF存储区取出一个字符后,首先判断是否是 ‘$’,若是’$’,表明存储区中的字符已处理完毕,则结束 循环。否则判断是否是小写字母,若是小写字母,将其ASCII 码减去20H(大小写字母的ASCII码相差20H)后显示出来,若 是大写字母,则直接显示。流程图: 程序代码: 第4章汇编语言程序设计基本方法 2015年5月10日星期日33 4.4.4 多重循环程序设计 多重循环是指一个循环体内又包含另一个完整的循环结 构,称为循环的嵌套,也称为多重循环结构。 【例题4.24】编写程序:已知以SCORE为首地址的字节存 储区中存放着N个学生某一门课程的成绩,找出每一个学生的 名次,将其存放到以ORDER为首地址的字节存储区中。 分析:假设名次单元都是第1名,取第1个学生成绩与其 后所有学生成绩比较,若均大,则对应的存储单元名次是第1 名,若不大,使学生成绩对应的存储单元名次加1。需要采用 双重循环结构实现。实现算法流程图: 程序代码: 第4章汇编语言程序设计基本方法 2015年5月10日星期日34 【例题4.25】将STR1为起始地址的100个字符,依次传送 到以STR2为首址的连续字节存储单元中。试用不同的寻址方式 编写程序。(设STR1和STR2不发生重叠) 分析: STR1A B C D E : : Q W STR2 SI DI ① 采用寄存器间接寻址编写 MOV AL,[SI];取字符 MOV [DI],AL;存字符 ② 采用变址寻址编写 设置一个变址指针SI,以 STR1和STR2为基址来实现 MOV AL,[STR1+SI];取字符 MOV [STR2+SI],AL;存字符 ③ 采用基址加变址编写 设置一个变址指针SI和两个基 址指针BX和BP。其中BX为取数指 针;BP为存数指针。 LEA BX,STR1 LEA BP,STR2 MOV SI,0 MOV AL,[BX+SI] MOV [BP+SI],AL INC SI 同学思考STR1 和STR2发生重 叠如何处理? 第4章汇编语言程序设计基本方法 2015年5月10日星期日35 本章小结 通过本章学习,要求掌握汇编程序设计的基本方法,能 编写一般的汇编语言,并进一步掌握汇编程序的调试方法、程 序结果的查看。 作业:P139页至P140页:1、4、5、6、11、14
展开阅读全文
  麦档网所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。
0条评论

还可以输入200字符

暂无评论,赶快抢占沙发吧。

关于本文
本文标题:第4节 汇编语言程序设计 (1)
链接地址:https://www.maidoc.com/p-15689969.html

当前资源信息

0****

编号: 20180818141638400924

类型: 共享资源

格式: PPTX

大小: 902.38KB

上传时间: 2019-11-08

关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

[email protected] 2018-2020 maidoc.com版权所有  文库上传用户QQ群:3303921 

麦档网为“文档C2C模式”,即用户上传的文档所得金币直接给(下载)用户,本站只是中间服务平台,本站所有文档下载所得的金币归上传人(含作者)所有。
备案号:蜀ICP备17040478号-3  
川公网安备:51019002001290号 

本站提供办公文档学习资料考试资料文档下载


收起
展开