《第4章 汇编语言-2.ppt》由会员分享,可在线阅读,更多相关《第4章 汇编语言-2.ppt(39页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、1 本次课主要教学内容本次课主要教学内容l实验操作小结实验操作小结l循环程序循环程序设计及实例分析设计及实例分析l子程序子程序设计及实例分析设计及实例分析l实验安排实验安排第第4章章汇编语言程序设计汇编语言程序设计2l汇编语言运行环境汇编语言运行环境lDOS命令命令l汇汇 编编 软软 件件 工工 具具 EDIT、MASM、LINK、DEBUG的熟悉和使用的熟悉和使用l典型指令及应用典型指令及应用l程序设计及调试运行程序设计及调试运行实验操作小结实验操作小结 3 实验教学目的和要求实验教学目的和要求l熟悉熟悉汇编语言的使用平台和开发工具汇编语言的使用平台和开发工具l掌握掌握源程序的建立、汇编、连
2、接及调源程序的建立、汇编、连接及调试过程试过程l理解理解典型程序结构和应用典型程序结构和应用l掌握掌握程序设计的思路和方法程序设计的思路和方法l培养培养分析、阅读程序的能力分析、阅读程序的能力l积累积累程序设计的技巧程序设计的技巧4汇编语言程序上机步骤汇编语言程序上机步骤(1)用)用EDIT.COM建立扩展名为建立扩展名为.ASM源程序源程序文件。文件。(2)用)用MASM.EXE将源程序汇编成目标程序将源程序汇编成目标程序文件和列表文件,扩展名为文件和列表文件,扩展名为.OBJ。(3)汇编中出现语法错误,根据错误信息提示)汇编中出现语法错误,根据错误信息提示用编辑软件重新调源程序修改。无错时
3、用用编辑软件重新调源程序修改。无错时用LINK.EXE把目标文件转化成可执行文件,扩把目标文件转化成可执行文件,扩展名为展名为.EXE。(4)生成可执行文件后,采用)生成可执行文件后,采用DEBUG调试或调试或在在DOS命令命令状态下键入文件名执行。状态下键入文件名执行。5调试程序调试程序DEBUG的应用的应用l建立汇编语言源程序并对其进行汇编;建立汇编语言源程序并对其进行汇编;l用于程序控制执行;用于程序控制执行;l跟踪程序运行踪迹;跟踪程序运行踪迹;l检查程序中每条指令执行结果;检查程序中每条指令执行结果;l修改各寄存器和存储器的内容;修改各寄存器和存储器的内容;l对接口操作和对磁盘读写操
4、作等。对接口操作和对磁盘读写操作等。6 程序的调试分为两个阶段:程序的调试分为两个阶段:l语法校正阶段语法校正阶段:用户经过编辑、汇编:用户经过编辑、汇编和连接后,检查和修改程序中的语法和连接后,检查和修改程序中的语法错误。错误。l逻辑校正阶段逻辑校正阶段:用:用DEBUG控制程序的控制程序的运行,检查和修改程序执行过程中的运行,检查和修改程序执行过程中的逻辑错误。逻辑错误。7 注意:注意:l汇编程序可在机器底层运行处理;汇编程序可在机器底层运行处理;l可访问可访问CPU内部寄存器、存储单元、内部寄存器、存储单元、I/O接口等;接口等;l可和高级语言进行相互调用;可和高级语言进行相互调用;l需
5、人机交互时,应采用需人机交互时,应采用DOS和和BIOS调调用。用。8第第4章章 4.4.4 循环程序设计循环程序设计1.循环程序基本组成循环程序基本组成(1)初始化初始化:设置循环程序初始状态。:设置循环程序初始状态。(2)循环体循环体:重复执行的操作。:重复执行的操作。(3)参参数数修修改改:计计数数器器值值、操操作作数数地地址址指指针针等相关信息的变化。等相关信息的变化。(4)循循环环控控制制:选选择择恰恰当当的的条条件件控控制制循循环环的的运行和结束。运行和结束。9第第4章章 2.单循环程序设计单循环程序设计【例例1】编编程程完完成成自自然然数数1100的的累累加加和,结果送和,结果送
6、SUM单元。单元。该该题题循循环环次次数数已已知知,采采用用计计数数控控制制方方法。程序中用法。程序中用递增计数法递增计数法实现求累加和。实现求累加和。10DATA SEGMENT SUM DW?;预留结果单元;预留结果单元 CN EQU 100 ;计数终止值;计数终止值DATA ENDSCODE SEGMENT ASSUME DS:DATA,CS:CODESTART:MOV AX,DATA ;初始化;初始化DS MOV DS,AX 11 MOV AX,0 ;累加器清零;累加器清零 MOV CX,1 ;置置循循环环计计数数初初始始值值LP:ADD AX,CX ;求累加和;求累加和 INC CX
7、 ;计数器加;计数器加1 CMP CX,CN ;CX和终止值比较和终止值比较 JBE LP ;小于等于转;小于等于转LP MOV SUM,AX ;结果送;结果送SUM MOV AH,4CH ;返回;返回DOS INT 21H CODE ENDS END START ;汇编结束;汇编结束 B1.ASM12【例例2】求求S=122232前前N项和,使项和,使S值大于值大于1000结束计算。结束计算。lN2可写成可写成N个个N相加的形式,采用循环实现相加的形式,采用循环实现计算平方和;判断结果是否大于计算平方和;判断结果是否大于1000。l由于由于N值从值从1到到N逐级递增,可采用计数器递逐级递增,
8、可采用计数器递增实现;增实现;l设寄存器设寄存器BX和和DX分别保存分别保存N值及前值及前N项和。项和。第第4章章13CODE SEGMENT ASSUME CS:CODESTART:MOV BX,0;BX保存保存N值值,初值初值0 MOV DX,0;DX保存前保存前N项和项和LOP1:INC BX;N值递增值递增 MOV CX,BX;设置循环次数;设置循环次数 MOV AX,0;AX清清014LOP2:ADD AX,BX;计算;计算N2 LOOP LOP2;(;(CX)10转转 ADD DX,AX;计算前;计算前N项和项和 CMP DX,1000;判断;判断 JBE LOP1;不大于转;不大
9、于转LOP1 MOV AH,4CH ;大于,返回;大于,返回DOS INT 21HCODE ENDS END START;汇编结束;汇编结束B2.ASM15【例例3】内存内存BUF单元开始存放单元开始存放10个无符号字个无符号字节数组,从中找出最大数和最小数,其值保存节数组,从中找出最大数和最小数,其值保存在内存在内存MAX和和MIN单元中。单元中。从以下从以下3个方面考虑:个方面考虑:(1)确定数组中数据起始地址,采用地址)确定数组中数据起始地址,采用地址指针的变化合理指向。指针的变化合理指向。(2)设定循环结构的初始入口、循环体、)设定循环结构的初始入口、循环体、判断条件等。判断条件等。(
10、3)循环次数已知,使用计数器,采用)循环次数已知,使用计数器,采用LOOP指令实现规定功能指令实现规定功能。16 DATA SEGMENT NUM DB 15,23,12,28,100 DB 10,7,1,45,67 DB 6 DUP(?)MAX DB?MIN DB?DATA ENDSCODE SEGMENT ASSUME DS:DATA,CS:CODESTART:MOV AX,DATA MOV DS,AX 17MOV SI,0 ;设地址指针设地址指针 MOV CX,10;计数初值计数初值 MOV AH,NUMSI;第第1个数分别送个数分别送AH和和AL MOV AL,NUMSI DEC CX
11、 ;计数器减计数器减1 LP:INC SI;地址加;地址加1 CMP AH,NUMSI ;后数与前大数比较;后数与前大数比较 JAE BIG ;高于等于转;高于等于转BIG MOV AH,NUMSI ;保存大数至;保存大数至AH 18BIG:CMP AL,NUMSI;后数与前数比较;后数与前数比较 JBE NEXT;低于等于转;低于等于转NEXT MOV AL,NUMSI;保存小数至;保存小数至AL NEXT:LOOP LP ;(;(CX)1不为不为0转转LP MOV MAX,AH ;保存最大数;保存最大数 MOV MIN,AL ;保存最小数;保存最小数 MOV AH,4CH INT 21H
12、CODE ENDS END START B3.ASM19第第4章章 3.多重循环程序设计多重循环程序设计 一个循环体中又出现另一个循环,也称一个循环体中又出现另一个循环,也称循环嵌套循环嵌套。(1)内内循循环环应应完完整整包包含含在在外外循循环环内内,内内外外循循环环不不能能交叉;交叉;(2)可可从从内内循循环环跳跳到到外外循循环环,但但不不能能从从外外循循环环直直接接跳到内循环;跳到内循环;(3)无无论论是是内内循循环环还还是是外外循循环环,都都不不要要使使循循环环回回到到初始化部分,否则将出现死循环;初始化部分,否则将出现死循环;(4)每每次次完完成成外外循循环环再再次次进进入入内内循循环
13、环时时,初初始始条条件件须重新设置。须重新设置。20第第4章章【例例4】内内存存BUF单单元元区区域域中中存存放放一一组组无无符符号号字字节节数数据据,编编程程将将数数据据按按从从小小到到大大顺顺序序排排序,排序后数据仍放在原来存储区中。序,排序后数据仍放在原来存储区中。冒泡法设计冒泡法设计:设设BUF内内存存缓缓冲冲区区有有N个个字字节节数数据据,将将第第一一个个数数与与其其后后N-1个个数数逐逐一一比比较较,如如数数据据排排列列次次序序符符合合要要求求,不不做做任任何何操操作作;否否则则两两数数交换位置。交换位置。经经第第一一轮轮的的N1次次比比较较,N个个数数据据中中的的最小数放到第一个
14、存储单元中。最小数放到第一个存储单元中。21第第4章章 第第二二轮轮处处理理时时,将将第第二二个个数数据据与与其其后后N-2个个数数据据逐逐一一比比较较,每每次次比比较较后后把把小小数数放放到到第第二二个个存存储储单单元元,经经N-2次次比比较较后后,N个个数数据中的第二个小数存入第二个存储单元。据中的第二个小数存入第二个存储单元。依依次次类类推推,做做同同样样操操作作,最最后后两两个个存存储储单单元元中中的的数数据据比比较较完完毕毕后后就就完完成成N个个数数据据从从小小到大的排序。到大的排序。22DATA SEGMENT BUF DB 23H,09H,14H,53H,67H,89H DB 4
15、FH,20H,05H,10H CN EQU$-BUFDATA ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATASTART:MOV AX,DATA ;初始化;初始化DS MOV DS,AX MOV CX,CN-1 ;外循环次数送;外循环次数送CX LP1:MOV SI,0 ;数组起始下标;数组起始下标0送送SI PUSH CX ;外循环计数器入栈;外循环计数器入栈23LP2:MOV AL,BUF SI ;取数出送;取数出送AL CMP AL,BUF SI+1 ;两数比较;两数比较 JLE NEXT ;小于或等于转;小于或等于转NEXT XCHG AL,BUFSI+1
16、 ;两数交换;两数交换 MOV BUF SI,AL NEXT:INC SI ;数组下标加;数组下标加1 LOOP LP2 ;CX-1不为不为0转转LP2 POP CX ;退出内循环,;退出内循环,CX出栈出栈 LOOP LP1 ;CX-1不为不为0转转LP1 MOV AH,4CH ;返回;返回DOS INT 21H CODE ENDS END START ;汇编结束;汇编结束 B4.ASM24【例例5】从键盘输入从键盘输入39之间的数字,用之间的数字,用“*”号组成三角形图案号组成三角形图案 如输入数字如输入数字7,屏幕上显示以下,屏幕上显示以下7行行7列列的图案:的图案:*采用双重循环,外循
17、采用双重循环,外循环控制行数,内循环环控制行数,内循环控制列数。控制列数。25CODE SEGMENT ASSUME CS:CODE START:MOV AH,01H ;键盘输入;键盘输入1个数字至个数字至AL INT 21H CMP AL,33H ;与数字;与数字3比较比较 JB START ;低于转;低于转 CMP AL,39H ;与数字;与数字9比较比较 JA START ;高于转;高于转 SUB AL,30H ;ASCII码转换为数字码转换为数字 MOV CL,AL ;保存至;保存至CL中,计数用中,计数用 MOV CH,0 ;CH清清0 MOV DL,0DH ;输出回车;输出回车 M
18、OV AH,02H INT 21H MOV DL,0AH ;输出换行;输出换行 INT 21H26 AA:PUSH CX ;保存循环次数;保存循环次数 BB:MOV DL,*;输出;输出“*”MOV AH,02H INT 21H LOOP BB ;内循环;内循环 MOV DL,0DH ;输出回车;输出回车 INT 21H MOV DL,0AH ;输出换行;输出换行 INT 21H POP CX ;恢复循环次数;恢复循环次数 LOOP AA ;外循环;外循环EXIT:MOV AH,4CH INT 21H CODE ENDS END START B5.ASM27 思考:在本例基础上,若要在屏幕上思
19、考:在本例基础上,若要在屏幕上显示出以下图案,应如何设计程序?显示出以下图案,应如何设计程序?*28第第4章章 4.4.5 子程序设计子程序设计 主主程程序序中中采采用用CALL指指令令调调用用子子程程序序,子子程程序结尾采用序结尾采用RET指令返回指令返回。子程序优点:子程序优点:l简化程序设计,节省设计时间。简化程序设计,节省设计时间。l缩短程序长度,节省汇编时间和存储空间。缩短程序长度,节省汇编时间和存储空间。l增加程序可读性,便于修改和调试程序。增加程序可读性,便于修改和调试程序。l为模块化、结构化设计提供方便。为模块化、结构化设计提供方便。29第第4章章 主主-子程序基本结构子程序基
20、本结构:(1)程程序序说说明明:说说明明主主-子子程程序序名名称称、功功能能、入口和出口参数、占用工作单元等。入口和出口参数、占用工作单元等。(2)现现场场保保护护及及恢恢复复:主主程程序序调调子子程程序序前前需需对对相相关关寄寄存存器器内内容容加加以以保保护护,子子程程序序执执行行完完后后要恢复被保护的内容,常采用堆栈操作。要恢复被保护的内容,常采用堆栈操作。(3)子程序体子程序体:实现相应子程序功能。:实现相应子程序功能。(4)子子程程序序返返回回:用用RET指指令令返返回回到到CALL指指令的下一条位置。令的下一条位置。30第第4章章 子程序参数传递子程序参数传递 主主程程序序调调子子程
21、程序序前前,把把需需加加工工处处理理的的数数据据传传递递给给子子程程序序称称输输入入参参数数;子子程程序序执执行行完完毕毕,要要把把本本次次加加工工处处理理的的结结果果传传递递给给主主程程序序,称称输输出参数出参数。参数传递方法有参数传递方法有3种:种:(1)寄存器传递)寄存器传递(2)堆栈传递)堆栈传递(3)存储器传递)存储器传递 31【例例6】设计子程序,完成统计一组字数据中的设计子程序,完成统计一组字数据中的正数和正数和0的个数。的个数。DATASEGMENT ARR DW 25,-56,129,0,-12,-70,92 DW 0,0,-32,0,-10,25,100 CN EQU($-
22、ARR)/2 fushu DW?PLUS DW?DATAENDSCODESEGMENT ASSUME DS:DATA,CS:CODE32START:MOV AX,DATA MOV DS,AX MOV SI,OFFSET ARR;数组首地址送;数组首地址送SI MOV CX,CN ;数组元素个数送;数组元素个数送CX CALL SUB ;调用子程序;调用子程序SUB MOV fushu,BX ;0的个数送的个数送BX MOV PLUS,AX ;正数个数送;正数个数送PLUS MOV AH,4CH INT 21H第第4章章33;子程序名;子程序名SUB,统计一组字数据中正数和,统计一组字数据中正数
23、和0的个的个数;数组首址在数;数组首址在SI中,数组个数在中,数组个数在CX中;正数个中;正数个数在数在AX中,中,0的个数在的个数在BX中中 SUBPROC NEAR PUSH SI;保护现场;保护现场 PUSH DX PUSH CX XOR AX,AX;计数单元清;计数单元清0 XOR BX,BX第第4章章34PZN0:MOV DX,SI;取一个数组元素送;取一个数组元素送DX CMP DX,0 ;DX中内容和中内容和0比较比较 JL PZN1 ;小于;小于0转转PZN1 JZ ZN ;等于;等于0转转ZN INC AX ;否则为正数,;否则为正数,AX加加1 JMP PZN1 ;转;转P
24、ZN1ZN:INC BX ;为;为0,BX加加1PZN1:ADD SI,2 ;数组指针加;数组指针加2调整调整 LOOP PZN0 ;循环控制;循环控制 POP CX ;恢复现场;恢复现场 POP DX POP SI RET ;返回主程序;返回主程序 SUB ENDP ;子程序定义结束;子程序定义结束CODE ENDS END START35(1)掌握掌握循环结构程序设计与操作。循环结构程序设计与操作。(2)掌握掌握子结构程序设计与操作。子结构程序设计与操作。(3)进一步掌握进一步掌握汇编语言程序设计的技汇编语言程序设计的技巧和方法。巧和方法。(4)进一步熟悉进一步熟悉程序的调试和运行。程序的
25、调试和运行。实验要求实验要求 1.实验目的及要求实验目的及要求 36l验证验证课本上的相关程序课本上的相关程序l验证验证本次课讲的例题本次课讲的例题l完成本章完成本章“实验指导实验指导”实验实验1中的中的任务任务2l自行拟题并编程调试运行自行拟题并编程调试运行 2.实验内容实验内容实验要求实验要求37实验要求实验要求 3.实验时间实验时间 第第7周周一的周周一的2单元单元:软软3机房机房 38 4.第第7周五上交一份实验报告周五上交一份实验报告 在实验题中任选一题,要求有实验目在实验题中任选一题,要求有实验目的、内容、过程及运行结果、实验总结和的、内容、过程及运行结果、实验总结和收获等内容;并附上该程序的收获等内容;并附上该程序的3个文件个文件(.ASM、.OBJ、.EXE),建一个文件夹,),建一个文件夹,写上自己的名字。写上自己的名字。(按系内课程实验模板,上交电子稿)(按系内课程实验模板,上交电子稿)实验要求实验要求39 本次课内容到此结束本次课内容到此结束 谢谢 谢谢!
限制150内