汇编语言程序设计.pptx

上传人:wuy****n92 文档编号:73452665 上传时间:2023-02-19 格式:PPTX 页数:35 大小:841.85KB
返回 下载 相关 举报
汇编语言程序设计.pptx_第1页
第1页 / 共35页
汇编语言程序设计.pptx_第2页
第2页 / 共35页
点击查看更多>>
资源描述

《汇编语言程序设计.pptx》由会员分享,可在线阅读,更多相关《汇编语言程序设计.pptx(35页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、第第4 4章汇编语言程序设计基本方法章汇编语言程序设计基本方法18 18 二月二月 2023 20231 1第第4 4章章 汇编语言程序设计基本方法汇编语言程序设计基本方法教学目标:教学目标:通过本章学习要求学生掌握汇编语言程序设计顺序结构通过本章学习要求学生掌握汇编语言程序设计顺序结构程序设计、选择结构程序设计和循环结构程序设计方法及相程序设计、选择结构程序设计和循环结构程序设计方法及相关指令;掌握串操作类指令的应用。关指令;掌握串操作类指令的应用。教学内容:教学内容:4.1 4.1 程序设计方法概述程序设计方法概述 4.2 4.2 顺序结构程序设计顺序结构程序设计 4.3 4.3 分支结构

2、程序设计分支结构程序设计 4.4 4.4 循环结构程序设计循环结构程序设计 4.5 4.5 串处理类指令串处理类指令第第4 4章汇编语言程序设计基本方法章汇编语言程序设计基本方法18 18 二月二月 2023 20232 24.1 4.1 程序设计方法概述程序设计方法概述 程序是解决某个问题的指令或语句的有序集合。汇编语程序是解决某个问题的指令或语句的有序集合。汇编语言程序设计是用言程序设计是用汇编语言指令、伪指令和宏指令汇编语言指令、伪指令和宏指令编写的程序。编写的程序。设计重在设计重在“算法算法”并遵循一定并遵循一定语法语法。语法指符合相关。语法指符合相关语言的规定;算法是实现问题求解步骤

3、和过程。语言的规定;算法是实现问题求解步骤和过程。高质量程序应具备以下几点:高质量程序应具备以下几点:1 1.程序结构清晰、简明、易读易调试。程序结构清晰、简明、易读易调试。2 2.程序代码执行速度快程序代码执行速度快。3.3.程序代码占用存储空间少。程序代码占用存储空间少。第第4 4章汇编语言程序设计基本方法章汇编语言程序设计基本方法18 18 二月二月 2023 20233 3汇编语言汇编语言程序设计的步骤程序设计的步骤汇汇编编语语言言程程序序设设计计步步骤骤1.1.分析问题分析问题通过通过分析,完成功能需求分析,完成功能需求2.2.确定算法确定算法是解决问题步骤,决定程序质量是解决问题步

4、骤,决定程序质量3.3.绘制流程图绘制流程图 算法图形化,复杂问题简单化算法图形化,复杂问题简单化4.4.分配存储单元分配存储单元 程序变量的分配及结果的暂存程序变量的分配及结果的暂存5.5.编写源程序编写源程序 按段式结构编辑汇编源程序按段式结构编辑汇编源程序6.6.静态检查静态检查 检查程序结构、指令、语法及功能检查程序结构、指令、语法及功能7.7.上机调试上机调试 编译、连接运行程序及分析结果编译、连接运行程序及分析结果第第4 4章汇编语言程序设计基本方法章汇编语言程序设计基本方法18 18 二月二月 2023 20234 4【例题例题4 4.1.1】求求3 3个字变量个字变量X X、Y

5、 Y、Z Z的和,并存入字变量的和,并存入字变量W W中。中。1.1.分析问题:分析问题:求三个变量的和即求三个变量的和即X+Y+Z WX+Y+Z W2.2.确定算法:确定算法:取第取第1 1个数到个数到AXAX寄存器,分别与第寄存器,分别与第2 2、3 3个个变量相加,结果保存到变量相加,结果保存到W W变量中。变量中。3.3.绘制流程图:绘制流程图:4.4.分配存储单元:分配存储单元:为变量为变量X X、Y Y、Z Z、W W分配字类型的存储分配字类型的存储单元单元5.5.编写程序:编写程序:6.6.静态检查:静态检查:检查是否有语法和逻辑错误检查是否有语法和逻辑错误7.7.上机调试:上机

6、调试:保存程序;编译连接;保存程序;编译连接;DEBUGDEBUG调试;查看调试;查看数据段基址和代码段基址,查看内存单元内容,运行程序,查数据段基址和代码段基址,查看内存单元内容,运行程序,查看结果。看结果。第第4 4章汇编语言程序设计基本方法章汇编语言程序设计基本方法18 18 二月二月 2023 20235 5DEBUGDEBUG调试步骤调试步骤1.U1.U反汇编反汇编2.D2.D查内存单元查内存单元3.G3.G运行运行4.D4.D查结果查结果第第4 4章汇编语言程序设计基本方法章汇编语言程序设计基本方法18 18 二月二月 2023 20236 64.24.2 顺序程序设计顺序程序设计

7、顺序结构是最基本、最简单的一种程序结构,主要由数顺序结构是最基本、最简单的一种程序结构,主要由数据传送指令、算术运算指令及逻辑运算指令组成。顺序结构中,据传送指令、算术运算指令及逻辑运算指令组成。顺序结构中,指令从上到下逐条被顺序执行。指令从上到下逐条被顺序执行。【例题例题4.24.2】编写程序:将编写程序:将FIRSTFIRST字变量与字变量与SECONDSECOND字变量字变量相加,结果存至相加,结果存至THIRD1THIRD1字变量中,然后再将字变量中,然后再将FIRSTFIRST和和SECONDSECOND两个两个字变量相乘,结果存至字变量相乘,结果存至THIRD2THIRD2双字变量

8、中。双字变量中。分析:分析:定义两个字变量并初始化,取第定义两个字变量并初始化,取第1 1个变量值到个变量值到AXAX寄寄存器,再与第存器,再与第2 2个变量相加,和存到个变量相加,和存到THIRD1THIRD1单元中;再取第单元中;再取第1 1个个变量到变量到AXAX寄存器,与第寄存器,与第2 2个变量相乘,乘积高个变量相乘,乘积高1616位在位在DXDX寄存器中,寄存器中,低低1616位在位在AXAX寄存中,并分别存到寄存中,并分别存到THIRD2THIRD2的变量中。的变量中。第第4 4章汇编语言程序设计基本方法章汇编语言程序设计基本方法18 18 二月二月 2023 20237 7【例

9、题【例题4.64.6】编写程序:输编写程序:输入入0 09 9之间任意两个数值,分别完之间任意两个数值,分别完成加法与乘法的运算并输出结果。成加法与乘法的运算并输出结果。分析:分析:用用9 9号功能,输出提号功能,输出提示信息;用示信息;用1 1号功能实现输入数据;号功能实现输入数据;用用2 2号功能实现输出数据;采用非号功能实现输出数据;采用非压缩压缩BCDBCD码存放一个十进制数。实码存放一个十进制数。实现流程图如右:现流程图如右:第第4 4章汇编语言程序设计基本方法章汇编语言程序设计基本方法18 18 二月二月 2023 20238 84.3 4.3 分支程序设计分支程序设计分支结构程序

10、设计中关键而重要的问题是设计何种运算分支结构程序设计中关键而重要的问题是设计何种运算来产生标志位,根据标志位选用合适的转移指令来产生标志位,根据标志位选用合适的转移指令。转转移移指指令令无条件转移指令无条件转移指令JMP CALL RETJMP CALL RET有条件转移指令有条件转移指令简单条件、有符号数、无符号数简单条件、有符号数、无符号数共同特点:共同特点:改变指令指针寄存器改变指令指针寄存器IPIP的值即发生跳转的值即发生跳转第第4 4章汇编语言程序设计基本方法章汇编语言程序设计基本方法18 18 二月二月 2023 20239 9分支结构程序设计方法分支结构程序设计方法 如判断某个数

11、是正数还负数。一个数是正数则最高位是如判断某个数是正数还负数。一个数是正数则最高位是0 0;一个数是负则最高位是一个数是负则最高位是1 1。因此根据运算后,去判断状态标志位因此根据运算后,去判断状态标志位SFSF的值。的值。如:如:1.TEST 1.TEST(ANDAND、OROR)如:如:TEST ALTEST AL,ALAL 2.2.测试最高位是测试最高位是0/1 0/1 如:如:TEST ALTEST AL,80H80H 3.3.跟跟0 0异或异或 如:如:XOR ALXOR AL,0 0 4.4.和和0 0加减加减 如:如:ADD ALADD AL,0 0 5.5.移位或循环移位移位或

12、循环移位 如:如:SHL ALSHL AL,1 12.2.根据状态标志位,选择合理的转移指令。根据状态标志位,选择合理的转移指令。方法方法1 1,3 3,4 4选选JSJS指令;方法指令;方法2 2选选JNZJNZ指令,方法指令,方法5 5选选JCJC指令指令1.1.设计运算,产生状态标志位设计运算,产生状态标志位第第4 4章汇编语言程序设计基本方法章汇编语言程序设计基本方法18 18 二月二月 2023 202310 104.3.1 4.3.1 控制类转移指令控制类转移指令1.1.条件转移指令条件转移指令条条件件转转移移指指令令简单条件转移指令:判断简单条件转移指令:判断单个标志位单个标志位

13、决定是否转移决定是否转移无符号条件转移指令:判断无符号条件转移指令:判断多个标志位多个标志位决定是否转移决定是否转移有符号条件转移指令:判断有符号条件转移指令:判断多个标志位多个标志位决定是否转移决定是否转移指令格式:指令格式:JXX JXX 标号标号指令功能:指令功能:使使CPUCPU根据状态标志位判断是转移到根据状态标志位判断是转移到标号处还是顺序执行。转移范围标号处还是顺序执行。转移范围-128-128 +127+127第第4 4章汇编语言程序设计基本方法章汇编语言程序设计基本方法18 18 二月二月 2023 202311 11(1)(1)简单条件转移指令简单条件转移指令第第4 4章汇

14、编语言程序设计基本方法章汇编语言程序设计基本方法18 18 二月二月 2023 202312 12【例题例题4.74.7】分析下列程序段,指出程序运行后,变量分析下列程序段,指出程序运行后,变量Y Y中的中的内容是什么。其中内容是什么。其中X X、Y Y均是字变量,均是字变量,X X之中存放有符号数之中存放有符号数x x。:MOV YMOV Y,-1-1 MOV AX MOV AX,X X CMP AX CMP AX,0 0 JE EXIT1JE EXIT1 ADD AX ADD AX,1000H1000H JO OVERFLOWJO OVERFLOW JNS EXIT1 JNS EXIT1

15、NEG AX NEG AX EXIT1EXIT1:MOV YMOV Y,AXAXEXITEXIT:MOV AHMOV AH,4CH4CH INT 21H INT 21H OVERFLOWOVERFLOW:MOV AHMOV AH,4CH4CH INT 21H INT 21H(Y Y)=0 x=00 x=0时时-1 x7000-1 x7000时时|x+1000H|x+1000H|x0 x0且且x7000Hx7000H第第4 4章汇编语言程序设计基本方法章汇编语言程序设计基本方法18 18 二月二月 2023 202313 13【例题【例题4.84.8】编写程序:判断某个数是正数还是负数,若编写程

16、序:判断某个数是正数还是负数,若是正则打印是正则打印0 0信息,若是负数打印信息,若是负数打印1 1信息。信息。分析:分析:1.TEST 1.TEST(ANDAND、OROR)即即TEST ALTEST AL,ALAL 2.2.测试最高位是测试最高位是0/1 0/1 即即TEST ALTEST AL,80H80H 3.3.跟跟0 0异或异或 即即XOR ALXOR AL,0 0 4.4.和和0 0加减加减 即即ADD ALADD AL,0 0 5.5.移位或循环移位移位或循环移位 即即SHL ALSHL AL,1 1本题采用测试最高位是本题采用测试最高位是0/10/1,判断该数是正数还是负数。

17、判断该数是正数还是负数。程序代码:程序代码:第第4 4章汇编语言程序设计基本方法章汇编语言程序设计基本方法18 18 二月二月 2023 202314 14(2)(2)无符号数条件转移指令无符号数条件转移指令无符号数条件转移指令往往跟在无符号数条件转移指令往往跟在比较指令比较指令之后,根据运之后,根据运算算结果结果设置的设置的条件标志状态条件标志状态确定转移方向。这类指令将确定转移方向。这类指令将比较对比较对象象视为无符号数。根据不同状态,设置了视为无符号数。根据不同状态,设置了高于高于、高于或等于高于或等于、低于低于、低于或等于低于或等于4 4种指令种指令第第4 4章汇编语言程序设计基本方法

18、章汇编语言程序设计基本方法18 18 二月二月 2023 202315 15【例题【例题4.94.9】编写程序:若编写程序:若X X、Y Y是数据区中是数据区中1616位无符号数,位无符号数,求下列函数的功能。求下列函数的功能。X-100 X-100 当当100100X X6553565535 Y=2*X Y=2*X 当当 0 0X X100100 X X 当当 X=100 X=100分析:分析:数据段定义数据段定义X X、Y Y两个字变两个字变量并初始化量并初始化X X变量。取变量。取X X到到AXAX寄存器并判寄存器并判断,在不现范围,实现不同运算。实现断,在不现范围,实现不同运算。实现算

19、法流程图如右所示:算法流程图如右所示:程序代码:程序代码:第第4 4章汇编语言程序设计基本方法章汇编语言程序设计基本方法18 18 二月二月 2023 202316 16(3)(3)有符号数条件转移指令有符号数条件转移指令有符号数条件转移指令一般跟在有符号数条件转移指令一般跟在比较指令比较指令之后,根据运之后,根据运算算结果结果设置的设置的条件标志状态条件标志状态确定转移方向。这类指令将比较对确定转移方向。这类指令将比较对象视为象视为有符号数有符号数。根据不同状态,设置了。根据不同状态,设置了大于大于、大于或等于大于或等于、小于小于、小于或等于小于或等于4 4种指令种指令。第第4 4章汇编语言

20、程序设计基本方法章汇编语言程序设计基本方法18 18 二月二月 2023 202317 17有符号数和无符号数比较标准有符号数和无符号数比较标准有符号数比较标准有符号数比较标准无符号数比较标准无符号数比较标准【例题【例题4.104.10】分析程序:下分析程序:下列程序段执行后,实现什么功能?列程序段执行后,实现什么功能?MOV SI MOV SI,0 0NEXTNEXT:MOV WORD PTR SIMOV WORD PTR SI,0 0 ADD SI ADD SI,2 2 CMP SI CMP SI,0F000H0F000H JBE NEXT JBE NEXT 功能:功能:地址为地址为000

21、0H0000H到到F000HF000H的字单元的字单元置置0 0。第第4 4章汇编语言程序设计基本方法章汇编语言程序设计基本方法18 18 二月二月 2023 202318 182.2.无条件转移指令无条件转移指令无条件转移指令使无条件转移指令使IPIP无条件无条件地转移到指令中指明的目的地转移到指令中指明的目的地址处执行地址处执行。无条件转移指令和转移目的地址在同一段称。无条件转移指令和转移目的地址在同一段称段内段内转移转移;无条件转移指令和转移目的地址不在同一段称为;无条件转移指令和转移目的地址不在同一段称为段间转段间转移。寻址方式有:直接寻址,间接寻址。移。寻址方式有:直接寻址,间接寻址

22、。第第4 4章汇编语言程序设计基本方法章汇编语言程序设计基本方法18 18 二月二月 2023 202319 194.3.2 4.3.2 分支结构程序设计分支结构程序设计分支结构分为单分支结构(比较分支结构分为单分支结构(比较/测试)、双分支结构测试)、双分支结构(比较(比较/测试)和多分支结构(跳转表)。它们都是实现转移,测试)和多分支结构(跳转表)。它们都是实现转移,但是汇编语言没有提供转移语句,转移过程需要编程者运用条但是汇编语言没有提供转移语句,转移过程需要编程者运用条件转移指令来件转移指令来构造构造。在汇编语言的分支结构程序设计中,一般是先使用算术在汇编语言的分支结构程序设计中,一般

23、是先使用算术运算指令、比较指令、逻辑运算指令或测试指令等,根据运算运算指令、比较指令、逻辑运算指令或测试指令等,根据运算结果在标志寄存器中设置相应的结果在标志寄存器中设置相应的状态标志位状态标志位,再使用相应的,再使用相应的条条件转移指令件转移指令。第第4 4章汇编语言程序设计基本方法章汇编语言程序设计基本方法18 18 二月二月 2023 20232020分支结构程序设计步骤分支结构程序设计步骤分分支支结结构构程程序序设设计计步步骤骤1.1.通过运算产生条件通过运算产生条件:设置状态标志位值:设置状态标志位值2.2.选择合适的转移指令选择合适的转移指令:是分支设计正确与否的关键:是分支设计正

24、确与否的关键3.3.安排好每个分支的出口安排好每个分支的出口:转移到公共部分或结束:转移到公共部分或结束4.4.各分支公共部分应在一起:程序结构清晰各分支公共部分应在一起:程序结构清晰5.5.分支较多时,应绘制流程图分支较多时,应绘制流程图6.6.多分支结构:地址表法;逻辑分解法多分支结构:地址表法;逻辑分解法第第4 4章汇编语言程序设计基本方法章汇编语言程序设计基本方法18 18 二月二月 2023 202321 21 分支程序设计举例分支程序设计举例【例题【例题4.114.11】编写程序:比较两个带符号字节数的大小,编写程序:比较两个带符号字节数的大小,找出两个数中大的存入找出两个数中大的

25、存入MAXMAX字节单元中。字节单元中。分析:分析:在数据段定义三个变量在数据段定义三个变量X1X1、X2X2、MAXMAX,其类型为字,其类型为字节,对节,对X1X1、X2X2两个变量初始化一定值。在代码段中实现比较判两个变量初始化一定值。在代码段中实现比较判断功能,其算法:将断功能,其算法:将X1X1取到取到ALAL寄存器中,再将(寄存器中,再将(ALAL)的内容同)的内容同X2X2比较,若大,则将(比较,若大,则将(ALAL)MAXMAX;否则;否则X2X2MAXMAX。程序代码:程序代码:第第4 4章汇编语言程序设计基本方法章汇编语言程序设计基本方法18 18 二月二月 2023 20

26、232222【例题【例题4.124.12】编写程序:在内存单元中有三个互不相等编写程序:在内存单元中有三个互不相等的无符号字数据,分别存放在的无符号字数据,分别存放在BUFBUF开始的字单元中,将其中最大开始的字单元中,将其中最大值存入值存入MAXMAX字单元中。字单元中。分支程序设计举例分支程序设计举例分析:分析:在数据段中定义两变量在数据段中定义两变量BUFBUF、MAXMAX,是字类型,是字类型并对并对BUFBUF变量初始化变量初始化。算法:先将第一个数放到算法:先将第一个数放到AXAX中,再依次和第中,再依次和第二个、第三个比较,每次比较后,若比二个、第三个比较,每次比较后,若比AXA

27、X中的数大,则将大的中的数大,则将大的数置换数置换AXAX中的数,保证中的数,保证AXAX中始终是最大数,最后将中始终是最大数,最后将AXAX中的数送中的数送到到MAXMAX存储单元中。存储单元中。用无符号数用无符号数转移指令转移指令JA/JNB/JNA/JBJA/JNB/JNA/JB。程序代码:程序代码:第第4 4章汇编语言程序设计基本方法章汇编语言程序设计基本方法18 18 二月二月 2023 20232323 分支程序设计举例分支程序设计举例【例题【例题4.154.15】编写程序:字节变量编写程序:字节变量BUFXBUFX和和BUFYBUFY存放整数,存放整数,试编写程序完成下列指定的操

28、作。试编写程序完成下列指定的操作。若两个数中有一个是奇数则将奇数存入若两个数中有一个是奇数则将奇数存入BUFXBUFX字节单元中,字节单元中,偶数存放到偶数存放到BUFYBUFY单元中单元中;若两个数均为奇数,则两数分别加若两个数均为奇数,则两数分别加1 1,并存原单元中并存原单元中;若两个数均为偶数,则两变量内容不变。若两个数均为偶数,则两变量内容不变。分析:分析:判断奇数或偶数的方法:即测试该数的最低位是判断奇数或偶数的方法:即测试该数的最低位是0 0或或1 1。首先将首先将BUFXBUFX和和BUFYBUFY作异或运算,运算的结果再同作异或运算,运算的结果再同01H01H进行进行测试。若

29、结果为测试。若结果为0 0,则说明,则说明BUFXBUFX和和BUFYBUFY是同类;若结果为是同类;若结果为1 1,则,则说明说明BUFXBUFX和和BUFYBUFY是异类是异类。程序代码:程序代码:第第4 4章汇编语言程序设计基本方法章汇编语言程序设计基本方法18 18 二月二月 2023 20232424 分支程序设计举例分支程序设计举例【例题例题4.164.16】编写程序:编写程序:根据键盘输入的根据键盘输入的1 14 4字符,分字符,分别在屏幕上打印对应的加法、减法、乘法和除法的字符串。别在屏幕上打印对应的加法、减法、乘法和除法的字符串。分析:分析:在数据段定义若干变量字符串,分别用

30、于显示的在数据段定义若干变量字符串,分别用于显示的相关信息。通过键盘输入的字符由相关信息。通过键盘输入的字符由1 1号功能实现,输入字符的号功能实现,输入字符的ASCIIASCII码值在码值在ALAL寄存器中,对寄存器中,对ALAL寄存器内容进行判断,根据判寄存器内容进行判断,根据判断情况,实现不同的转移。在各个分支转移中实现字符中的打断情况,实现不同的转移。在各个分支转移中实现字符中的打印印。程序代码:程序代码:第第4 4章汇编语言程序设计基本方法章汇编语言程序设计基本方法18 18 二月二月 2023 202325254.4 4.4 循环结构程序设计循环结构程序设计循环结构是循环结构是重复

31、重复执行某段程序,直至执行某段程序,直至满足满足某个条件才结某个条件才结束循环操作束循环操作。循环结构程序一般由循环初始状态设置部分、循循环结构程序一般由循环初始状态设置部分、循环操作部分、循环修改部分、循环控制部分和结束处理部分构环操作部分、循环修改部分、循环控制部分和结束处理部分构成。成。循循环环结结构构程程序序构构成成初始状态设置:初始状态设置:地址指针、循环次数、累加器、标志位地址指针、循环次数、累加器、标志位循环操作:从初始循环操作:从初始新状态新状态开始,开始,动态动态执行相同操作执行相同操作难点难点循环修改:循环修改:修改修改每次每次循环后内容,为循环后内容,为下一循环下一循环做

32、好准备做好准备循环控制:循环控制:控制循环的控制循环的继续继续和和终止终止,设计的设计的关键关键循环结束:存储循环结束:存储结果结果或打印或打印结果结果第第4 4章汇编语言程序设计基本方法章汇编语言程序设计基本方法18 18 二月二月 2023 20232626在循环结构程序设计中,在循环结构程序设计中,循环控制循环控制和和循环循环操作操作是程序设是程序设计过程中的关键和难点计过程中的关键和难点。循环操作是要解决重复做何事,循环循环操作是要解决重复做何事,循环控制是要解决在什么时候重复做。控制是要解决在什么时候重复做。循环有两种结构:循环有两种结构:先处理,后判断先处理,后判断先判断,后处理先

33、判断,后处理第第4 4章汇编语言程序设计基本方法章汇编语言程序设计基本方法18 18 二月二月 2023 202327274.4.1 4.4.1 循环指令循环指令循环是一种特殊的转移流程,当满足(或不满足)某条循环是一种特殊的转移流程,当满足(或不满足)某条件时,重复执行某一程序段,直到不满足(或满足)条件为止。件时,重复执行某一程序段,直到不满足(或满足)条件为止。8086CPU8086CPU设计了专门用于控制循环的指令设计了专门用于控制循环的指令。循循环环指指令令1.1.计数循环:计数循环:LOOP LOOP 标号标号 CX-1CXCX-1CX,CX0CX0,循环循环2.2.相等相等/为为

34、0 0计数循环指令计数循环指令LOOPE/LOOPZLOOPE/LOOPZLOOPE/LLOPZ LOOPE/LLOPZ 标号标号 CX-1CXCX-1CX,CX0CX0且且ZF=1ZF=1,循环循环3.3.不相等不相等/不为不为0 0计数循环指令计数循环指令LOOPNE/LOOPNZLOOPNE/LOOPNZLOOPNE/LLOPNZ LOOPNE/LLOPNZ 标号标号 CX-1CXCX-1CX,CX0CX0且且ZF=0ZF=0,循环循环4.CX4.CX寄存器为寄存器为0 0转移:转移:JCXZ/JECXZ JCXZ/JECXZ 标号标号 CX=0 CX=0,循环循环第第4 4章汇编语言程

35、序设计基本方法章汇编语言程序设计基本方法18 18 二月二月 2023 20232828【例题【例题4.174.17】编写程序:已知有编写程序:已知有N N个数据存放在以个数据存放在以BUFBUF为为首地址的字节存储区中,统计其中负数的个数。并将统计结果首地址的字节存储区中,统计其中负数的个数。并将统计结果保存到保存到RESULTRESULT单元中。单元中。分析:分析:在在BUFBUF存储区定义若干个字节数;设置存储区定义若干个字节数;设置BXBX指向指向BUFBUF首地址指针用于取数;首地址指针用于取数;AXAX存放统计的负数个数;存放统计的负数个数;CXCX用于存放用于存放BUFBUF存储

36、区中数的个数。判断存储区中数的个数。判断负数方法负数方法:取一个数到:取一个数到DLDL寄存器中,寄存器中,与与0 0比较,小,则比较,小,则AXAX寄存器内容加寄存器内容加1 1。(或取一个数到或取一个数到DLDL寄存器中,寄存器中,与与0 0相减,判断相减,判断SF=1SF=1否,是则否,是则AXAX寄存器内容加寄存器内容加1 1,直致所有数判直致所有数判断完。还有其它断完。还有其它)算法实现流程图:算法实现流程图:程序代码:程序代码:第第4 4章汇编语言程序设计基本方法章汇编语言程序设计基本方法18 18 二月二月 2023 202329294.4.2 4.4.2 循环结构控制方法循环结

37、构控制方法循环结构控制是循环程序设计的一个重要环节。在解决循环结构控制是循环程序设计的一个重要环节。在解决实际问题时,当循环次数已知的情况下,使用实际问题时,当循环次数已知的情况下,使用计数控制计数控制;当循;当循环次数未知,但循环条件是可以设计的,使用环次数未知,但循环条件是可以设计的,使用条件控制条件控制。1.1.计数控制法计数控制法当循环次数已知时,通常使用计数控制。当循环次数已知时,通常使用计数控制。计计数数控控制制方方法法倒计数法:倒计数法:次数次数N N送送CXCX,循环,循环1 1次次 CX-1 CX-1 当当CX=0 CX=0 结束循环结束循环正计数法正计数法:0 0送送CXC

38、X,循环,循环1 1次次 CX+1 CX+1 当当CX=N CX=N 结束循环。结束循环。将将【例题【例题4.174.17】改为正计数法,程序如何?改为正计数法,程序如何?第第4 4章汇编语言程序设计基本方法章汇编语言程序设计基本方法18 18 二月二月 2023 202330302.2.条件控制法条件控制法在实际中,在实际中,有时有时循环次数无法事先预知,但它与解决问循环次数无法事先预知,但它与解决问题中的某些条件有关。这些条件可以通过指令测试。如果测试题中的某些条件有关。这些条件可以通过指令测试。如果测试的结果满足循环条件,则循环继续,否则退出循环。的结果满足循环条件,则循环继续,否则退出

39、循环。MOV CL,0MOV CL,0AGAIN:AND AX,AXAGAIN:AND AX,AX JZ NEXT JZ NEXT SAL AX SAL AX,1 1 JNC AGAIN JNC AGAIN INC CL INC CL JMP AGAIN JMP AGAINNEXTNEXT:【例题例题4.184.18】分析下列指令代码实现什么功能?分析下列指令代码实现什么功能?分析:分析:AXAX为为0 0,则转到则转到NEXTNEXT处;否处;否则对则对AXAX内容左移内容左移1 1位,位,CF=1CF=1否?等于否?等于1 1,CLCL加加1 1,无条件转到再判断无条件转到再判断AXAX为

40、为0 0否,重否,重复上述过程。复上述过程。功能:求功能:求AXAX寄存器中有多少个寄存器中有多少个1 1。第第4 4章汇编语言程序设计基本方法章汇编语言程序设计基本方法18 18 二月二月 2023 202331 314.4.3 4.4.3 单重循环结构程序设计单重循环结构程序设计单重循环,指循环体内不再包含循环结构的循环。主要单重循环,指循环体内不再包含循环结构的循环。主要采用计数控制法实现循环和条件控制法实现循环。采用计数控制法实现循环和条件控制法实现循环。【例题【例题4.194.19】编写程序:已知以编写程序:已知以BUFBUF为首地址的字存储区为首地址的字存储区中存放着中存放着N N

41、个有符号的二进制数,将其中大于等于个有符号的二进制数,将其中大于等于0 0的数依次送的数依次送入以入以BUF1BUF1为首地址的字存储区中,小于为首地址的字存储区中,小于0 0的数依次送入以的数依次送入以BUF2BUF2为为首地址的字存储区中。首地址的字存储区中。分析:分析:实现算法流程图:实现算法流程图:程序代码:程序代码:第第4 4章汇编语言程序设计基本方法章汇编语言程序设计基本方法18 18 二月二月 2023 20233232【例题【例题4.214.21】编写程序:已知在以编写程序:已知在以BUFBUF为首地址的字节存为首地址的字节存储区中,存放着一个以储区中,存放着一个以$作结束标志

42、的字符串。在屏幕上显作结束标志的字符串。在屏幕上显示该字符串,并要求将其中所有的小写字母以大写字母的形式示该字符串,并要求将其中所有的小写字母以大写字母的形式显示出来。显示出来。分析:分析:从从BUFBUF存储区取出一个字符后,首先判断是否是存储区取出一个字符后,首先判断是否是$,若是,若是$,表明存储区中的字符已处理完毕,则结束,表明存储区中的字符已处理完毕,则结束循环。否则判断是否是小写字母,若是小写字母,将其循环。否则判断是否是小写字母,若是小写字母,将其ASCIIASCII码减去码减去20H20H(大小写字母的(大小写字母的ASCIIASCII码相差码相差20H20H)后显示出来,若)

43、后显示出来,若是大写字母,则直接显示是大写字母,则直接显示。流程图:。流程图:程序代码:程序代码:第第4 4章汇编语言程序设计基本方法章汇编语言程序设计基本方法18 18 二月二月 2023 202333334.4.4 4.4.4 多重循环程序设计多重循环程序设计多重循环是指一个循环体内又包含另一个完整的循环结多重循环是指一个循环体内又包含另一个完整的循环结构,称为循环的嵌套,也称为多重循环结构。构,称为循环的嵌套,也称为多重循环结构。【例题【例题4.244.24】编写程序编写程序:已知以已知以SCORESCORE为首地址的字节存为首地址的字节存储区中存放着储区中存放着N N个学生某一门课程的

44、成绩,找出每一个学生的个学生某一门课程的成绩,找出每一个学生的名次,将其存放到以名次,将其存放到以ORDERORDER为首地址的字节存储区中。为首地址的字节存储区中。分析:分析:假设名次单元都是第假设名次单元都是第1 1名,取第名,取第1 1个学生成绩与其个学生成绩与其后所有学生成绩比较,若均大,则对应的存储单元名次是第后所有学生成绩比较,若均大,则对应的存储单元名次是第1 1名,若不大,使学生成绩对应的存储单元名次加名,若不大,使学生成绩对应的存储单元名次加1 1。需要采用需要采用双重循环结构实现。实现算法流程图:双重循环结构实现。实现算法流程图:程序代码:程序代码:第第4 4章汇编语言程序

45、设计基本方法章汇编语言程序设计基本方法18 18 二月二月 2023 20233434【例题例题4.254.25】将将STR1STR1为起始地址的为起始地址的100100个字符,依次传送个字符,依次传送到以到以STR2STR2为首址的连续字节存储单元中。试用不同的寻址方式为首址的连续字节存储单元中。试用不同的寻址方式编写程序。(设编写程序。(设STR1STR1和和STR2STR2不发生重叠)不发生重叠)分析:分析:STR1STR1A AB BC CD DE E:Q QW WSTR2STR2SISIDIDI 采用寄存器间接寻址编写采用寄存器间接寻址编写 MOV ALMOV AL,SISI;取字符

46、;取字符 MOV DIMOV DI,ALAL;存字符;存字符 采用变址寻址编写采用变址寻址编写 设置一个变址指针设置一个变址指针SISI,以,以 STR1STR1和和STR2STR2为基址来实现为基址来实现 MOV ALMOV AL,STR1+SISTR1+SI;取字符;取字符 MOV STR2+SIMOV STR2+SI,ALAL;存字符;存字符 采用基址加变址编写采用基址加变址编写 设置一个变址指针设置一个变址指针SISI和两个基和两个基址指针址指针BXBX和和BPBP。其中。其中BXBX为取数指针;为取数指针;BPBP为存数指针。为存数指针。LEA BXLEA BX,STR1STR1LE

47、A BPLEA BP,STR2STR2MOV SIMOV SI,0 0MOV ALMOV AL,BX+SIBX+SIMOV BP+SIMOV BP+SI,ALALINC SIINC SI同学思考同学思考STR1STR1和和STR2STR2发生重发生重叠如何处理?叠如何处理?第第4 4章汇编语言程序设计基本方法章汇编语言程序设计基本方法18 18 二月二月 2023 20233535本章小结本章小结通过本章学习,要求掌握汇编程序设计的基本方法,能通过本章学习,要求掌握汇编程序设计的基本方法,能编写一般的汇编语言,并进一步掌握汇编程序的调试方法、程编写一般的汇编语言,并进一步掌握汇编程序的调试方法、程序结果的查看。序结果的查看。作业:作业:P139P139页至页至P140P140页:页:1 1、4 4、5 5、6 6、1111、1414

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 大学资料

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁