基本汇编语言程序设计.ppt
《基本汇编语言程序设计.ppt》由会员分享,可在线阅读,更多相关《基本汇编语言程序设计.ppt(111页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第 5 章 基 本 汇 编 语 言 程 序 设 计封面 1 1第 5 章 基 本 汇 编 语 言 程 序 设 计第5章基本汇编语言程序设计第第5 5章章 基本汇编语言程序设计基本汇编语言程序设计5.15.1 顺序程序设计顺序程序设计5.2 5.2 分支程序设计分支程序设计5.3 5.3 循环程序设计循环程序设计 本章要点及习题分析本章要点及习题分析2 2第 5 章 基 本 汇 编 语 言 程 序 设 计顺序程序设计(e)5.15.1 顺序程序设计顺序程序设计指令按程序中的书写顺序逐条执行,称为顺序程序。指令按程序中的书写顺序逐条执行,称为顺序程序。除非编程解决非常简单的问题,顺序程序并不多见,
2、除非编程解决非常简单的问题,顺序程序并不多见,但是顺序程序往往是复杂程序结构的一部分,如分支但是顺序程序往往是复杂程序结构的一部分,如分支结构的一个分支,循环结构的循环体等。结构的一个分支,循环结构的循环体等。3 3第 5 章 基 本 汇 编 语 言 程 序 设 计例例:设有例:设有3 3个字变量个字变量x,yx,y和和z z,求出三者之和,结果存,求出三者之和,结果存入字变量入字变量w w。DATAS SEGMENTDATAS SEGMENTX Xdw 5 dw 5 Y Ydw 6 dw 6 Z Zdw 7 dw 7 W Wdw?dw?DATAS ENDSDATAS ENDSCODES SE
3、GMENTCODES SEGMENT ASSUME CS:CODES,DS:DATAS,SS:STACKS ASSUME CS:CODES,DS:DATAS,SS:STACKSSTART:START:MOV AX,DATAS MOV AX,DATAS MOV DS,AX MOV DS,AXmov ax,xmov ax,xadd ax,yadd ax,yadd ax,zadd ax,zmov w,axmov w,ax MOV AH,4CHMOV AH,4CH INT 21HINT 21HCODES ENDSCODES ENDS END STARTEND START4 4第 5 章 基 本 汇 编
4、 语 言 程 序 设 计【例【例5-35-3】将一个字节压缩将一个字节压缩BCDBCD码转换为两个码转换为两个ASCIIASCII码。码。分分析析:一一个个字字节节的的压压缩缩BCDBCD码码就就是是用用一一个个字字节节的的二二进进制制数数表表示示两两位位十十进进制制数数,如如十十进进制制数数9696表表示示成成压压缩缩BCDBCD码码就就是是96H96H,转转换换成成ASCIIASCII码码就就是是把把压压缩缩BCDBCD码码表表示示的的十十进进制制数数的的高高位位和和低低位位分分开开,并并以以ASCIIASCII码码表表示示,即即转转换换成成39H39H和和36H36H。5 5第 5 章
5、基 本 汇 编 语 言 程 序 设 计DATADATASEGMENTSEGMENTBCDBUF DB 96HBCDBUF DB 96H;定义;定义1 1个字节的压缩个字节的压缩BCDBCD码码ASCBUF DB 2ASCBUF DB 2 DUP(?)DUP(?);定义;定义2 2个字节的结果单元个字节的结果单元DATADATA ENDS ENDSCODECODE SEGMENT SEGMENT ASSUME CS:CODEASSUME CS:CODE,DS:DATADS:DATASTARTSTART:MOV AX MOV AX,DATADATA MOV DS MOV DS,AXAX MOV A
6、L MOV AL,BCDBUF BCDBUF ;取出;取出BCDBCD码码 MOV BL MOV BL,ALAL ;送;送BLBL暂存暂存 MOV CL MOV CL,4 4 SHR AL SHR AL,CL CL ;高;高4 4位变成低位变成低4 4位,高位,高4 4位补位补0(96H09H)0(96H09H)ADD AL ADD AL,30H 30H ;变成;变成ASCIIASCII码码(39H)(39H)6 6第 5 章 基 本 汇 编 语 言 程 序 设 计MOVMOVASCBUFASCBUF,ALAL;存储第;存储第1 1个个ASCIIASCII码码ANDANDBLBL,0FH0FH
7、;屏蔽掉高;屏蔽掉高4 4位,只保留低位,只保留低4 4位位(96H06H)(96H06H)ADDADDBLBL,30H30H;变成;变成BCDBCD码码(36H)(36H)MOVMOVASCBUF+1ASCBUF+1,BLBL;存储第;存储第2 2个码个码MOVMOVAHAH,4CH4CHINTINT21H21HCODECODE ENDS ENDSENDENDSTARTSTART7 7第 5 章 基 本 汇 编 语 言 程 序 设 计【例例5-45-4】利利用用直直接接查查表表法法完完成成将将键键盘盘输输入入的的一一位位1010进进制制数数(09)(09)转转换换成成对对应应的的平平方方值值
8、并并存存放放在在SQRBUFSQRBUF单单元中。元中。分分析析:0909的的平平方方值值分分别别为为0 0、1 1、4 4、9 9、1616、2525、3636、4949、6464、8181。把把平平方方值值放放在在一一起起形形成成一一个个平平方方值值表表,根根据据输输入入的的值值和和对对应应平平方方值值所所在在单单元元地地址址之之间间的的关系关系(表首地址加上输入的值表首地址加上输入的值),查出相应的平方值。,查出相应的平方值。8 8第 5 章 基 本 汇 编 语 言 程 序 设 计DATADATA SEGMENT SEGMENTSQUTABSQUTABDB DB 0 0,1 1,4 4,
9、9 9,1616,2525,3636,4949,6464,8181SQUBUFSQUBUFDBDB?DATADATA ENDS ENDSCODECODE SEGMENT SEGMENTASSUMEASSUMECS:CODECS:CODE,DS:DATADS:DATASTARTSTART:MOVMOV AXAX,DATADATA9 9第 5 章 基 本 汇 编 语 言 程 序 设 计MOVMOVDSDS,AXAXMOVMOVBXBX,OFFSETOFFSETSQUTAB SQUTAB ;平方表首地址;平方表首地址MOVMOVAHAH,1 1INTINT21H21H ;由键盘输入;由键盘输入个数,
10、得到其个数,得到其ASCIIASCII码码SUBSUBALAL,30H30H;由;由ASCIIASCII码得到相应的数码得到相应的数XLATXLAT;查表;查表MOVMOVSQUBUFSQUBUF,AL AL ;存储结果;存储结果MOVMOVAHAH,4CH4CHINTINT21H21HCODECODE ENDSENDS END STARTEND START1010第 5 章 基 本 汇 编 语 言 程 序 设 计分支程序设计4.2 4.2 分支程序设计分支程序设计条件转移指令条件转移指令JccJcc和无条件转移指令和无条件转移指令JMPJMP用于实现程序用于实现程序的分支结构,的分支结构,J
11、MPJMP不测试条件,不测试条件,JccJcc可根据条件是否成可根据条件是否成立决定转移到指定位置或不转移而顺序执行后续指令。立决定转移到指定位置或不转移而顺序执行后续指令。由于由于JccJcc不支持条件表达式,而是以当前标志位的状态不支持条件表达式,而是以当前标志位的状态为条件,故为条件,故JccJcc之前一定要安排设置标志位的指令,如之前一定要安排设置标志位的指令,如加减法、比较、测试等指令。加减法、比较、测试等指令。基本分支类型分为单分基本分支类型分为单分支和双分支支和双分支。1111第 5 章 基 本 汇 编 语 言 程 序 设 计单分支1.1.单分支类型单分支类型 对同一个问题,根据
12、选择的条件不同,单分支结对同一个问题,根据选择的条件不同,单分支结构的流程图有两种画法,对应的程序也有两种编法。构的流程图有两种画法,对应的程序也有两种编法。如如计算计算AXAX中的有符号数的绝对值。中的有符号数的绝对值。1212第 5 章 基 本 汇 编 语 言 程 序 设 计单分支 cmpax,0jgenonegnegaxNoneg:movresult,axcmpax,0jngeyesnegjmpdoneyesneg:negaxDone:movresult,axAX0 AX0?求补指令求补指令YN保存结果保存结果AXAX0 0?求补指令求补指令YN保存结果保存结果JMP1313第 5 章
13、基 本 汇 编 语 言 程 序 设 计双分支2.2.双分支程序双分支程序 两个分支都有语句两个分支都有语句体,如何选择条件不重体,如何选择条件不重要。要。流程图中分支体的流程图中分支体的位置就是程序的实际顺位置就是程序的实际顺序,故分支语句体最序,故分支语句体最后一定要有一条后一定要有一条指令,跳过语句体,指令,跳过语句体,转移到转移到“后续操作后续操作”。条件成立?条件成立?分支语句体分支语句体2YN分支语句体分支语句体1后后续续操操作作1414第 5 章 基 本 汇 编 语 言 程 序 设 计双分支双分支举例:显示双分支举例:显示BXBX的最高位。的最高位。shl bx,1shl bx,1
14、jc one jc one ;转分支体;转分支体 mov dl,0mov dl,0 ;分支体;分支体1 1 jmp nextjmp next;转后续操作;转后续操作One:mov dl,1One:mov dl,1 ;分支体;分支体2 2next:mov ah,2next:mov ah,2 ;后续操作;后续操作 int 21hint 21h .分支程序的其他问题分支程序的其他问题有些双分支问题可以先假设一种情况,把双分有些双分支问题可以先假设一种情况,把双分支改成单分支问题。如上例,先假设支改成单分支问题。如上例,先假设BXBX最高位为最高位为0 0,在分支外准备显示在分支外准备显示0 0;如最
15、高位为;如最高位为0 0,即可直接跳到后,即可直接跳到后续操作;如最高位为续操作;如最高位为1 1才需要执行分支体。才需要执行分支体。mov dl,0mov dl,0 shl bx,1 shl bx,1 jnc jnc nextnext mov dl,1 mov dl,1nextnext:mov ah,2:mov ah,2 int 21h int 21h1515第 5 章 基 本 汇 编 语 言 程 序 设 计多分支分支的嵌套形成多分支,嵌套形式多种多样。分支的嵌套形成多分支,嵌套形式多种多样。例例1 1:求符号函数:求符号函数 1 1 当当 X0 X0Y=Y=0 0 当当 X=0 X=0 -
16、1 -1 当当 X0 XSTR2STR1STR2,FLAGFLAG为为1 1;如果;如果STR1STR2STR1STR2,FLAGFLAG为为FFHFFH。3838第 5 章 基 本 汇 编 语 言 程 序 设 计例5.9 剔除空格程序例:剔除以结尾的字符串中的空格。例:剔除以结尾的字符串中的空格。双重循环程序:外层循环负责搜索字符串中的双重循环程序:外层循环负责搜索字符串中的空格;内层循环负责剔除搜索到的空格(由于空格后空格;内层循环负责剔除搜索到的空格(由于空格后的字符要依次向前移动一个字节,因而也是一个循环的字符要依次向前移动一个字节,因而也是一个循环结构)。结构)。无论是外层循环,还是
17、内层循环,循环次数都无论是外层循环,还是内层循环,循环次数都未知,只能用未知,只能用“条件判断条件判断”控制循环。控制循环。外层循环采用外层循环采用“先判断、后循环先判断、后循环”结构;对内结构;对内层循环而言,由于搜索到空格才进入内循环,所以采层循环而言,由于搜索到空格才进入内循环,所以采用用“先循环、后判断先循环、后判断”结构。结构。3939第 5 章 基 本 汇 编 语 言 程 序 设 计例例:例:现有一个以现有一个以$结尾的字符串,要求剔除其中的空结尾的字符串,要求剔除其中的空格。格。.data.datastringstringdb Let us have a try!,$db Let
18、 us have a try!,$.code.code.startup.startupmov dx,offset stringmov dx,offset stringmov ah,9mov ah,9int 21hint 21h ;显示原字符串显示原字符串mov al,mov al,;AL;AL空格(空格(ASCIIASCII码为码为20H20H)mov di,offset stringmov di,offset string4040第 5 章 基 本 汇 编 语 言 程 序 设 计例outlp:cmp byte ptr di,$outlp:cmp byte ptr di,$;外循环,先判断后循
19、外循环,先判断后循环环jz donejz done ;为为$结束结束cmp al,dicmp al,di ;检测是否是空格检测是否是空格jnz nextjnz next ;不是空格继续外循环不是空格继续外循环mov si,di mov si,di ;是空格,进入剔除空格分支是空格,进入剔除空格分支inlp:inc si inlp:inc si ;该分支是循环程序段该分支是循环程序段mov ah,simov ah,si ;取空格后的一个字符取空格后的一个字符mov si-1,ah mov si-1,ah ;向前移动一个字节;向前移动一个字节cmp byte ptr si,$cmp byte pt
20、r si,$;内循环,先循环后判断内循环,先循环后判断jnz inlpjnz inlp4141第 5 章 基 本 汇 编 语 言 程 序 设 计例next:inc dinext:inc di ;继续对后续字符进行处理继续对后续字符进行处理 jmp outlp jmp outlpdone:mov dx,offset stringdone:mov dx,offset string mov ah,9 mov ah,9 int 21h int 21h ;显示处理后字符串显示处理后字符串.exit 0.exit 0 ;结束结束 end end返回第四章返回第四章4242第 5 章 基 本 汇 编 语 言
21、 程 序 设 计5.4(目录)子程序设计 4.4 4.4 子程序设计子程序设计 把功能相对独立的程序段单独编写和调试,作为把功能相对独立的程序段单独编写和调试,作为一个相对独立的模块供程序使用,就形成子程序。一个相对独立的模块供程序使用,就形成子程序。使用子程序:简化源程序结构;提高编程效率。使用子程序:简化源程序结构;提高编程效率。4.4.1 4.4.1 过程定义伪指令过程定义伪指令 4.4.2 4.4.2 子程序的参数传递子程序的参数传递 4.4.3 4.4.3 子程序的嵌套递归重入子程序的嵌套递归重入 4.4.4 4.4.4 子程序的应用子程序的应用返回第四章返回第四章4343第 5 章
22、 基 本 汇 编 语 言 程 序 设 计5.4.1 过程定义伪指令(1)4.4.1 4.4.1 过程定义伪指令过程定义伪指令过程名过程名 PROC NEAR|FAR PROC NEAR|FAR 过程体过程体 RET RET(RET NRET N)过程名过程名 ENDP ENDP过程名:符合语法的标识符;同模块唯一性。过程名:符合语法的标识符;同模块唯一性。距离属性:距离属性:可省略,由汇编程序判断。可省略,由汇编程序判断。堆栈使用:平衡。才能保证堆栈使用:平衡。才能保证RETRET指令弹出的是断指令弹出的是断点地址。点地址。保护现场与恢复现场:子程序用到的寄存器或保护现场与恢复现场:子程序用到
23、的寄存器或存储单元,注意:后进先出。存储单元,注意:后进先出。注意子程序的规范和格式注意子程序的规范和格式PUSH AXPUSH AXPUSH BXPUSH BXPUSH CXPUSH CXPUSH DXPUSH DXPOP DXPOP DXPOP CXPOP CXPOP BXPOP BXPOP AXPOP AX4444第 5 章 基 本 汇 编 语 言 程 序 设 计 关于“距离属性”关于关于“距离属性距离属性”vNEARNEAR属性(段内近调用)的过程只能被相同代码段属性(段内近调用)的过程只能被相同代码段的其他程序调用的其他程序调用vFARFAR属性(段间远调用)的过程可以被相同或不同属
24、性(段间远调用)的过程可以被相同或不同代码段的程序调用代码段的程序调用 对简化段定义格式,在微型、小型和紧凑存储模对简化段定义格式,在微型、小型和紧凑存储模式下,过程的缺省属性为式下,过程的缺省属性为nearnear;在中型、大型和巨型;在中型、大型和巨型存储模式下,过程的缺省属性为存储模式下,过程的缺省属性为farfar 对完整段定义格式,过程的缺省属性为对完整段定义格式,过程的缺省属性为nearnear用户可以在过程定义时用用户可以在过程定义时用nearnear或或farfar改变缺省属性改变缺省属性4545第 5 章 基 本 汇 编 语 言 程 序 设 计 子程序规范子程序规范子程序规范
25、 一个完整的子程序,特别是供其他编程人员使用一个完整的子程序,特别是供其他编程人员使用的子程序,必须附有一个详细说明:的子程序,必须附有一个详细说明:子程序名(过程名)子程序名(过程名)子程序功能介绍子程序功能介绍子程序的入口参数子程序的入口参数子程序的出口参数子程序的出口参数子程序内使用的寄存器(存储单元)子程序内使用的寄存器(存储单元)使用该子程序的范例使用该子程序的范例v子程序名:子程序名:DTOBv功能:完成两位十进制数转换成二进制数功能:完成两位十进制数转换成二进制数v入口参数:入口参数:AL存放待转换的两位存放待转换的两位BCD码码v出口参数:出口参数:CL存放转换后的二进制数存放
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基本 汇编语言 程序设计
限制150内