第3章 汇编语言程序设计初步.pdf
《第3章 汇编语言程序设计初步.pdf》由会员分享,可在线阅读,更多相关《第3章 汇编语言程序设计初步.pdf(99页珍藏版)》请在咨信网上搜索。
1、第3章汇编语言程序设计初步第3章汇编语言程序设计初步3.1 系统功能调用3.2 汇编语言源程序的设计的基本步骤源3.3 分支结构的汇编语言源程序的编写源3.4 循环结构的汇编语言源程序的编写原版教学配套课件第3章汇编语言程序设计初步3.1系统功能i3.1.1系统功能调用概述31.2基本I/O调用返回本章首页06/16/2013原版教学配套课件第3章汇编语言程序设计初步3.1.1系统功能调用概述我们在编制汇编源程序时,常常要与外部设 备发生关系,如希望能从键盘输入字符或在显示 器上显示出程序运行的结果,但由于计算机机种 的不同、外部设备型号的差异,控制它们工作的 程序也会有差异。如果每次都需要根
2、据自己的工 作环境来设计“控制这些外设工作 的程序”,则必 须要先弄清楚与之有关的设二电路、接口等各方面的情况,是一件既复杂,效率又低的事情,并且没有通用性。如果把这些控制过程预先编写成一个一个子 06/16/2013原版教学配套课件第3章汇编语言程序设计初步程序,作为操作系统的一部分事先放在系统盘上,用户在需要时只要按规定的格式设置好参数,直接 调用这些子程序即可。美国MICROSOFT公司为 我们提供的磁盘操作系统(DOS)就具有这种功 能,称为“利用操作系统的标准功能调用(简称系 统功能调用)”,编号从062H(3.0版),主要分 为设备管理(如键盘、显示器、打印机、磁盘等的 管理)、文
3、件管理、目录管理及其他功能调用4大 类。06/16/2013原版教学配套课件第3章汇编语言程序设计初步系统功能调用的基本方法采用一条软中断指令INT n o所谓中断,是 指当计算机正在执行正常的程序时,计算机系统 中的某个部分突然出现某些异常情况或特殊请求,CPU这时就中止(暂停)它正在执行的程序,而转去执行申请中断的那个设备或事件的中断服 务程序,执行完这个服务程序后,再自动返回到 程序断点执行原来中断了的正常程序。这个过程 或这种功能就叫做中断。软中断是以指令方式产生的中断,n是中断 类型号,不同的n将转入不同的中断处理程序。系统功能调用是21号软中断。06/16/2013原版教学配套课件
4、第3章汇编语言程序设计初步常用的系统功能调用表:功能入口参数出口参数01H键盘输入字符无他嘴入字符02H显示输出DL=输出字符无08H键盘输入字符(无回显)无心输入字符09H显示(打印)字符串DS:DX啜冲区首址无OAH微冲的键盘输入(字符串)DS:DX啜冲区首址无05H打印机输出DL榔翎无OBH检查键盘输入状态无AWO无输入,FF有输入25H置中断向量DS:DX=入口地址,心中断类型言无35H取邨晌量心中断类型号ES:BX=?口地址4CH中止当前程序返回调用程序AL嘲回码无4DH取返回码无止返回码表3-1最常用的系统功能调用表原版教学配套课件第3章汇编语言程序设计初步系统功能调用的步骤:1)
5、将调用参数装入指定的寄存器。2)如需要功能调用号(即欲调用的子程序编 号),把它装入寄存器AH。3)如需要子功能调用号,把它装入AL。4)按中断号调用DOS(发出中断指令:INT21H)o5)检查返回参数是否正确。06/16/2013原版教学配套课件第3章汇编语言程序设计初步3.1.2基本I/O调用1.01H号调用功能:从标准输入设备上(通常为键盘)读取 字符,并在标准输出设备上(通常为显示器)回显O格式:MOV AH 01HINT 21H说明:输入字符的ASCII码送入AL中,如果读 到的字符是Ctrl+C或Ctrl+Break,则结束程序。2.02H号调用功能:通过标准输出设备(多为显示器
6、)输出 字符。原版教学配套课件第3章汇编语言程序设计初步格式:MOV DL,X;X为要输出显示的ASCII字符代码)MOV AH,02HINT 21H说明:DL寄存器中的内容等于要输出字符的ASCH码,在 显示输出时检查到的字符是Ctrl+C或Ctrl+Break键的,则结束 程序。3.09H号调用功能:在标准输出上(通常为显示器)显示一个字符串。字符串要以字符“$”为结束标志。格式:MOV AH 09HINT 21H说明:要输出显示的字符串的首地址送到DS、DX两个寄存器中,其中段地址送DS寄存器,06/16/2013原版教学配套课件第3章汇编语言程序设计初步偏移地址送DX寄存器。4.OAH
7、号调用功能:从标准输入设备上(通常为键盘)读 一个字符串,存入内存,直到按回车键为止。格式:MOV AH,OAHINT 21H说明:此项操作,要求事先定义一个输入缓 冲区,它的缓冲区首地址送到DS、DX两个寄存 器中,其中段地址送DS寄存器,偏移地址送DX 寄存器。06/16/2013原版教学配套课件第3章汇编语言程序设计初步【例3-1】在显示器上显示字符串Welcome to TianHe college!DATAS SEGMENT;/数据段定义开始STRING DB Welcome to TianHe college!1,OAH,ODH,$;/定义字符串,OAH,ODH表示显示字符串后,光
8、标可自动 回车换行,字符串必须以$结束。DATAS ENDS;/数据段定义结束CODES SEGMENT;/代码段定义开始ASSUME CS:CODES,DS:DATAS,SS:STACKS;/说明段和段寄存器之间的关系START:MOV AX,DATAS;/将数据段的段地址送寄存器AXMOV DS,AX;/将AX内容送DS寄存器,即初始化DSLEA DX,STRING;/将STRING的偏移地址送DX寄存器06/16/2013原版教学配套课件第3章汇编语言程序设计初步MOV AH,9;/字符串显示子功能,9号系统功能调用INT 21H;/系统调用MOV AH,4CH;/返回DOSINT 21
9、H;/系统调用CODES ENDS;/代码段定义结束END START【例3-2】从键盘输入字符串,把它放到缓冲区中存储起来DATA SEGMENTMAXLEN DB 100;/定义缓冲区的最大容量ACLEN DB?;/定义实际读入的字符数STRING DB 100 DUP(?);/定义接收字符串空间DATA ENDS06/16/2013原版教学配套课件第3章汇编语言程序设计初步CODE SEGMENTMOV AX,DATAMOV DS,AX;/数据段初始化LEA DX,MAXLEN;/送MAXLEN的偏移地址到寄存器DX MOV AH,10;/io号系统功能调用 INT 21H;/系统调用C
10、ODE ENDS运行程序时,若从键盘输入“Thank you!”(共计10个字),则输入缓 冲区MAXLEN各单元的内容如图3-1MAXLEN10010ha,nyU丁所示。图3-1存储空间分配示意06/16/2013原版教学配套课件第3章汇编语言程序设计初步3.2汇编语言源程序的设计的基本步骤3.2.1 源程序的基本框架3.2.2 汇编语言源程序设计的基本步骤3.2.3 顺序结构的汇编语言源程序的编写返回本章首页06/16/2013原版教学配套课件第3章汇编语言程序设计初步3.2.1源程序的基本框架一个汇编语言源程序由两大部分组成的。其中主 要部分就是指令,位于代码段内,代码段可以有好几 个。
11、其他部分是为指令服务的,包括数据的准备,存 储区域的划分和地址的标注。其他部分由数据段、堆 栈段和扩展段组成。也各可以有好几个。段之间的顺 序可以随意安排。但通常是其他部分(数据段、堆栈 段和扩展段等)在前,代码段在后。虽然可以定义多 个段,但由于段首址存放在CPU的寄存器中,所以可 以同时使用6个段:代码段(CS、数据段(DS、堆栈段 SS 和3个扩展段(ES、FS和GS。扩展 段其实也是数据段,只是段地址在寄存器ES、FS和 GS中。程序通过修改段寄存器的值实现段的切换。06/16/2013原版教学配套课件第3章汇编语言程序设计初步一个程序至少包含一个代码段和END指令。其他段的 设置由程
12、序的具体功能需要而定。程序较小时,可以 不设置堆栈段。操作系统在装载不含堆栈段的程序时,会指定一个段作为堆栈段使用。这样,程序连接时,LINK会产生一条警告信息:WARNING:NO STACK SEGMENT但不会影响程序的运行,可以忽略它。程序中的段名可以是唯一的,也可以与其它段同 名。在同一模块中,如果有两个段同名,则后者被认 为是前段的后续,这样,它们就属同一段。当同一模 块出现两个同名段时,则后者的可选项属性要么与前 者相同,要么不写其属性而选用前者的段属性。06/16/2013原版教学配套课件第3章汇编语言程序设计初步【例3-4】段寄存器与段的对应方法1:用一个段寄存器对应两个数据
13、段DATA1 SEGMENT bl DB 10hDATA1 ENDSDATA2 SEGMENT bl DB 23hDATA2 ENDS CODEI SEGMENT;/定义第一个数据段;/定义变量DATAL字节变量;/第一个数据段结束;/定义第二个数据段;/定义变量DATA2,字节变量;/第二个数据段结束;/定义第一个代码段ASSUME CS:CODE1,DS:DATA1;/指定段寄存器START:MOV AX,DATA1;/指令开始,MOV DS,AX;/把数据段DATAI的段首址赋给段寄存器DS原版教学配套课件第3章汇编语言程序设计初步MOV BL,bl;/引用DS来访问DATA1中的变量b
14、lASSUME DS:DATA2;/说明DS与DATA2建立联系MOV AX,DATA2;MOV DS,AX;/把数据段DATA2的段值赋给段寄存器DS./实现段的切换MOV AL,b2;/引用DS来访问DATA2中的变量b2CODEI ENDS;/代码段CODEI结束END START;/程序结束在方法1中,因为只使用一个段寄存器DS来对应两个数 据段,所以,需要切换DS的对应关系。但我们也可以用段 寄存器DS和ES来分别对应段DATA1和DATA2,这样,方 法1就可变成方法2。06/16/2013原版 教学配 套课件第3章汇编语言程序设计初步方法2:用两个段寄存器对应两个数据段DATA1
15、 SEGMENTbl DB 10hDATA1 ENDS DATA2 SEGMENT b2 DB 23hDATA2 ENDS CODEI SEGMENT;/定义第一个数据段;/定义变量DATAL字节变量;/第一个数据段结束;/定义第二个数据段;/定义变量DATA2,字节变量/第二个数据段结束;/定义第一个代码段ASSUME CS:CODE1,DS:DATA1,ES:DATA2;/指定段寄存器START:MOV AX,DATA1;/指令开始,MOV DS,AX;/把数据段DATA1的段首址赋给段寄存器DSMOV AX,DATA2MOV ES,AX;/把数据段DATA2的段首址赋给段寄存器ES06/
16、16/2013原版教学配套课件第3章汇编语言程序设计初步MOV BL,bl;/引用DS来访问DATA1中的变量blMOV AL,b2;/引用ES来访问DATA2中的变量b2CODEI ENDSEND START;/代码段CODEI结束;/程序结束我们还可以用“段组”来简化段寄存器的使用,把段 DATA1和DATA2组成一个数据段。所以,把方法2再改写成 方法3的形式。方法3:用一个段组组成两个数据段GSEG GROUP DATA1,DATA2;/定义段组DATA1 SEGMENT;/定义第一个数据段原版教学配套课件第3章汇编语言程序设计初步bl DB 10hDATA1 ENDSDATA2 SE
17、GMENTb2 DB 23hDATA2 ENDSCODEI SEGMENT;/定义变量DATAL字节变量;/第一个数据段结束;/定义第二个数据段;/定义变量DATA2,字节变量;/第二个数据段结束;/定义第一个代码段ASSUME CS:CODE15 DS:GSEGSTART:MOV AX,GSEG;/指令开始,MOV DS,AX;/把段组GSEG的段值赋给段寄存器DSMOV BL,bl;/引用DS来访问DATAl中的变量blMOV AL,b2;/引用DS来访问DATA2中的变量b2.06/16/2013原版教学配套课件第3章汇编语言程序设计初步CODEI ENDS;/代码段CODEI结束END
18、 START;/程序结束定义段组后,段组内各段所定义的标号和变量,除了 与定义它们的段起始点相关外,还与段组的起始点相关。规定如下:如果在ASSUME伪指令中说明段组与段寄存器相对应,那么,有关标号或变量的偏移量就相对于段组起点计算9如果在ASSUME伪指令中说明段组内的某段与段寄存 器相对应,那么,有关标号或变量的偏移量就相对于该段 的起点。所以,在使用段组后,程序员要谨慎使用ASSUME伪 指令,并保证段寄存器的值与段组或段相一致。原版 教学配 套课件第3章汇编语言程序设计初步3.2.2汇编语言源程序设计的基本步骤1.汇编语言源程序的主要基本结构:顺序结构 分支结构 循环结构2.好程序的要
19、求一个好的程序,首先应该能正常运行,实现预定的功 能。还应该满足:结构简明,明白易懂,调试方便,修改容易。执行速度快(程序执行时间短,程序语句行数尽量 少)。占用内存空间少。06/16/2013原版教学配套课件第3章汇编语言程序设计初步3.基本步骤分析问题,从中抽象出恰当的数学模型。确定解决问题的合理算法。画出程序流程图,根据算法,细化并找出解决问 题的思路和具体方法。确定汇编语言程序的基本框架:各个存储段的定 义,存储空间的分配,寄存器的配置,指针和计数 器的选择。根据程序流程图确定程序的基本结构,并编写程 序。06/16/2013原版教学配套课件第3章汇编语言程序设计初步3.2.3顺序结构
20、的汇编语言源程序的编写顺序结构是最简单的程序结构,没有分支,没有循环,程序的执行顺序就是指令的编写顺序,所以,又称直线程序。因此,安排指令的先后 次序就显得至关重要。另外,在编程序时,还要 妥善保存已得到的处理结果,为后面的进一步处 理直接提供前面的处理结果,从而避免不必要的 重复操作。06/16/2013原版教学配套课件第3章汇编语言程序设计初步【例35】两个64位无符号数相加分析问题:在8086/8088CPU中,只有8位或16位运算 指令,没有32位和64位以上的运算指令。确定算法:要进行64位的加法运算,可以确定算法:利用16位加法指令分别相加4次来实现。画程序流程图:本问题简单,无需
21、画程序流程图。确定汇编语言程序的基本框架:可见,汇编语言程序 的基本框架至少要两个段:数据段和代码段。数据段中 至少定义3个变量:两个加数Nl、N2,还有一个和数 SUM,都是DW类型。和数SUM尚属未知,故应定义一 个5个字长(比64位字长富余一点)的缓冲区。因为要加 4次,需要一个计数器或指针,可选寄存器BX充当。编写程序,可以想得到,需要MOV、ADD、ADC和 INC等指令。具体程序如下:o6/16/2O13原版 教学配 套课件第3章汇编语言程序设计初步DATA SEGMENT;/定义数据段N1 DW 1234H,5678H,9ABCH,ODEFOH;/定义字变 量N1N2 DW 19
22、71H,0313H,1968H,1123H;/定义字变量N2SUM DW 5DUP(?);/定义缓冲区SUMDATA1 END;/数据段结束CODE SEGMENT;/定义第一个代码段ASSUME CS:CODE,DS:DATA;/指定段寄存器MAIN PROC NEARSTART:MOV AX,DATA;/指令开始,MOV DS,AX;/把数据段的段首址赋给段寄存器DSLEA BX,N1;/将NI的偏移地址送BXMOV AX,BX;/引用DS来访问DATA中的变量Nd的最低位原版 教学配 套课件第3章汇编语言程序设计初步ADD AX,BX+8;/最低位字相加,因两个数偏移地址相差8个字节MO
23、V BX+16,AX;/存最低位和。BX+16指示SUM的偏移地址 此句也可以写为:MOV SUM,AXINC BXINC BX;/指针指向下一个字MOV AX,BX;/引用DS来访问DATA中的变量N1的次低位ADC AX,BX+8;/次低位字相加,因两个数偏移地址相差8个字节MOV BX+16,AX;/存次低位和。BX+16指示SUM+1的偏移 地址,此句也可以写为:MOV SUM+1,AXINC BXINC BX;/指针指向下一个字MOV AX,BX;/引用DS来访问DATA中的变量N1的次高位ADC AX,BX+8;/次高位字相加,因两个数偏移地址相差8个字节06/16/2013原版教
24、学配套课件第3章汇编语言程序设计初步MOV BX+16,AXINC BX INC BX MOV AX,BX ADC AX,BX+8 MOV BX+16,AXMOV AX,0 ADC AX,0MOV BX+18,AXMOV AH,4CH INT 21H MAIN ENDP CODE ENDS END START;/存次高位和。BX+16指示SUM+2的偏移 地址,此句也可以写为:MOV SUM+2,AX;/指针指向下一个字;/引用DS来访问DAT A中的变量N1的最高位;/最高位字相加,因两个数偏移地址相差8个字节;/存最高位和。BX+16指示SUM+3的偏移 地址,此句也可以写为:MOV SU
25、M+3,AX;/对AX清零;/计算进位;/存进位位;/此句也可写成:MOV AX,4C00H;/代码段CODE1结束;/程序结束06/16/2013原版教学配套课件第3章汇编语言程序设计初步【例3-6】两个32位无符号数乘法程序分析问题:在8086/8088CPU中,只有8位或16位运算指令,没有32位以上的乘法运算指令。确定算法:要进行32位的乘法运算,可以确定算法:利用16 位乘法指令做4次乘法,然后把部分积相加来实现。每次的积的 低位送AX,高位送DX。如图3-2所示。画程序流程图:程序流程图如图3-3所示。确定汇编语言程序的基本框架:可见,汇编语言程序的基本 框架至少要两个段:数据段和
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第3章 汇编语言程序设计初步 汇编语言 程序设计 初步
1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前自行私信或留言给上传者【曲****】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时私信或留言给本站上传会员【曲****】,需本站解决可联系【 微信客服】、【 QQ客服】,若有其他问题请点击或扫码反馈【 服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【 版权申诉】”(推荐),意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4008-655-100;投诉/维权电话:4009-655-100。