汇编语言05.ppt
《汇编语言05.ppt》由会员分享,可在线阅读,更多相关《汇编语言05.ppt(99页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。
1、第第 5 5 章章教学重点在在掌掌握握基基本本的的汇汇编编语语言言程程序序设设计计方方法法之之后后,进进一一步步学学习习如如何何提提高高编编程程效效率率的的各各种种实实用方法:用方法:高级语言特性高级语言特性宏结构宏结构模块化模块化第 5 章5.1 高级语言特性MASM 6.0引引入入高高级级语语言言的的程程序序设设计计特性特性n条件控制伪指令条件控制伪指令.IF .ELSE .ENDIFn循环控制伪指令循环控制伪指令.WHILE .ENDW .REPEAT .UNTILn过程声明和过程调用伪指令过程声明和过程调用伪指令.PROTO .INVOKE第 5 章5.1.1 条件控制伪指令 类类似似
2、高高级级语语言言中中IF、THEN、ELSE和和ENDIF的相应功能的相应功能在在汇汇编编时时要要展展开开,自自动动生生成成相相应应的的比比较较和和条条件转移指令序列,实现程序分支件转移指令序列,实现程序分支.IF 条件表达式条件表达式;条件为真(值为非条件为真(值为非0)分支体分支体;执行分支体执行分支体.ELSE;前面前面IF条件为假条件为假 分支体分支体;执行分支体执行分支体 .ENDIF;分支结束分支结束条件;单分支结构单分支结构.IF AX=ax;比较二者大小比较二者大小 mov tag,1;第一分支体:条件满足,第一分支体:条件满足,tag1.else mov tag,0;第二分支
3、体:条件不满足,第二分支体:条件不满足,tag0.endif.exit 0例5.12/2第 5 章5.1.2 循环控制伪指令 WHILE结构结构的循环控制伪指令的循环控制伪指令.WHILE 条件表达式条件表达式;条件为真条件为真 循环体循环体;执行循环体执行循环体.ENDW;循环体结束循环体结束UNTIL结构结构的循环控制伪指令的循环控制伪指令.REPEAT;重复执行循环体重复执行循环体 循环体循环体.UNTIL 条件表达式条件表达式;直到条件为直到条件为真真;WHILE结构结构xor ax,axmov cx,100.while cx!=0 add ax,cx dec cx.endwmov s
4、um,ax求1100之和;UNTIL结构结构xor ax,axmov cx,100.repeat add ax,cx dec cx.until cx=0mov sum,axmov cx,100 xor ax,axlea bx,array.repeat .if sword ptr bx=0 add ax,bx .else .break .endif inc bx inc bx.untilcxzmov result,ax例5.2第 5 章要要调调用用带带参参数数过过程程定定义义的的过过程程,不不应应采采用用CALL指令,因为比较烦琐指令,因为比较烦琐应该采用过程调用伪指令应该采用过程调用伪指令IN
5、VOKE使使 用用 INVOKE伪伪 指指 令令 的的 前前 提提 是是 需需 要要 用用PROTO伪指令对过程进行声明伪指令对过程进行声明5.1.3 过程声明和过程调用伪指令过程名过程名 PROC调用距离调用距离 语言类型语言类型 作用范围作用范围 USES 寄存器列表寄存器列表,参数参数:类型类型LOCAL 参数表参数表;汇编语言语句汇编语言语句过程名过程名 ENDP过程声明伪指令:过程声明伪指令:用于事先声明过程的结构用于事先声明过程的结构过程名过程名PROTO 调用距离调用距离 语言类型语言类型,参数参数:类型类型过程调用伪指令过程调用伪指令INVOKE 过程名过程名,参数参数,.如何
6、调如何调用用;汇编语言程序:汇编语言程序:lt503.asm.model smallchecksumd PROTO c,:word,:word;声明过程声明过程.stack.dataarraydb 12h,25h,0f0h,0a3h,3db 68h,71h,0cah,0ffh,90hcountequ$-array;数数 组组 的的 元元 素素 个个 数数resultdb?;校验和校验和.code.startupINVOKE checksumd,count,offset array;调用过程调用过程mov result,al;保存校验和保存校验和.exit 0例5.31/2列表文件checksu
7、md PROC c USES bx cx,countp:word,arrayp:wordmov bx,arrayp;BX数组的偏移地址数组的偏移地址mov cx,countp;CX数组的元素个数数组的元素个数xor al,alsumd:add al,bx;求和:求和:ALAL+DS:BXinc bxloop sumdretchecksumd endpend例5.32/2列表文件第 5 章5.2 宏结构程序设计宏汇编宏汇编重复汇编重复汇编条件汇编条件汇编统称宏结构统称宏结构宏(Macro)是汇编语言的一个特点,它是与子程序类似又独具特色的另一种简化源程序的方法第 5 章宏宏具有宏名的一段汇编语句
8、序列具有宏名的一段汇编语句序列宏定义宏定义时书写时书写宏指令宏指令这段汇编语句序列的缩写这段汇编语句序列的缩写宏调用宏调用时书写时书写宏宏展展开开宏宏指指令令处处用用这这段段宏宏代代替替的的过过程程宏汇编宏汇编时实现时实现宏的参数宏的参数功能强大,颇具特色功能强大,颇具特色配合宏,还有配合宏,还有宏操作符宏操作符和有关伪指令和有关伪指令5.2.1 宏汇编宏定义宏定义宏名宏名 macromacro 形参表形参表 宏定义体宏定义体endmendmmainbeginmainbeginMACROMACRO ;定义名为定义名为mainbeginmainbegin的宏,无参数的宏,无参数movmov ax
9、,data ax,data;宏定义体宏定义体movmov ds,axds,axENDMENDM;宏定义结束宏定义结束mainendmainendMACRO MACRO retnumretnum;带有形参带有形参retnumretnummovmov al,retnumal,retnum;宏定义中使用参数宏定义中使用参数movmov ah,4ch ah,4chintint 21h 21hENDMENDM宏注释符宏注释符宏调用宏调用宏名宏名 实参表实参表 start:start:mainbeginmainbegin;宏调用,建立宏调用,建立DSDS内容内容dispmsgdispmsg string
10、string;宏调用,显示字符串宏调用,显示字符串mainendmainend 0 0;宏调用,返回宏调用,返回DOSDOSend startend start 宏调用的实质是在汇编过程中进行宏展开宏调用的实质是在汇编过程中进行宏展开 宏宏展展开开的的具具体体过过程程是是:当当汇汇编编程程序序扫扫描描源源程程序序遇遇到到已已有有定定义义的的宏宏调调用用时时,即即用用相相应应的的宏宏定定义义体体取取代代源源程程序序的的宏宏指指令令,同同时时用用位位置置匹匹配配的的实实参参对对形形参参进进行取代行取代宏展开宏展开宏宏展展开开在在汇汇编编时时,用用宏宏定定义义体的代码序列替代宏指令的过程。体的代码序
11、列替代宏指令的过程。start:start:mainbeginmainbegin;宏指令宏指令 1 1movmov ax,data ax,data;宏展开宏展开 1 1movmov ds,axds,axmainendmainend 0 0;宏指令宏指令 1 1movmov al,0 al,0;宏展开宏展开 1 1movmov ah,4ch ah,4ch 1 1intint 21h 21h宏的参数宏的参数宏的参数使用非常灵活宏的参数使用非常灵活宏定义时,宏定义时,可以可以无参数无参数,例如,例如5.4a的的mainbegin可以带有可以带有一个参数一个参数,例如,例如5.4a的的mainend也
12、可以具有也可以具有多个参数多个参数;例如;例如5.5a的的shlext参参数数可可以以是是常常数数、变变量量、存存储储单单元元、指指令令(操操作作码码)或或它它们们的的一一部部分分,也也可可以以是是表表达达式式;例例如如5.5b的的shift和和shrot宏宏定定义义体体可可以以是是任任何何合合法法的的汇汇编编语语句句,既既可可以以是是硬硬指指令令序序列列,又又可可以以是是伪伪指指令令序序列列;例例如如5.6的的dstring;宏定义;宏定义shlextshlextmacro macro shloprandshloprand,shlnumshlnumpush push cxcxmovmov c
13、l,cl,shlnumshlnumshlshl shloprandshloprand,cl,clpop pop cxcxendmendm;宏指令宏指令shlextshlext axax,6 6;宏展开宏展开 1 1push push cxcx 1 1movmov cl,cl,0606 1 1shlshl axax,cl,cl 1 1pop pop cxcx例5.5a;统一;统一4 4条移位指令的宏指令条移位指令的宏指令shiftshiftmacro macro soprand,snum,soprand,snum,sopcodesopcodepush push cxcxmovmov cl,snu
14、mcl,snums s&sopcodesopcode&soprand,clsoprand,clpop pop cxcxendmendm;统一移位和循环移位统一移位和循环移位8 8条指令的宏指令条指令的宏指令shrotshrotmacro macro sroprand,srnum,sroprand,srnum,sropcodesropcodepush push cxcxmovmov cl,srnumcl,srnumsropcodesropcode sroprand,clsroprand,clpop pop cxcxendmendm例5.5b替换操作符替换操作符;宏定义;宏定义dstringdst
15、ring macro stringmacro stringdb db&stringstring&,0dh,0ah,0dh,0ah,$endmendm;宏调用宏调用dstringdstring dstringdstring 0 0!Number Number!;宏展开宏展开 1 1db db This This is is a a example.example.,0dh,0ah,0dh,0ah,$1 1db db 0 Number 100 Number 10,0dh,0ah,0dh,0ah,$例5.6转义注释符转义注释符传递注释符传递注释符第 5 章与宏有关的伪指令局部标号伪指令局部标号伪指令
16、LOCAL 标号列表标号列表宏定义体采用了标号,应使用宏定义体采用了标号,应使用LOCAL加以说明加以说明它必须是宏定义它必须是宏定义MACRO语句之后的第一条语句语句之后的第一条语句宏定义删除伪指令宏定义删除伪指令PURGE PURGE 宏名表宏名表不需要某个宏定义时,可以把它删除不需要某个宏定义时,可以把它删除宏定义退出伪指令宏定义退出伪指令EXITMEXITM伪指令伪指令EXITMEXITM表示结束当前宏调用的展开表示结束当前宏调用的展开;宏定义;宏定义absolabsol macro macro oprdoprdlocal nextlocal nextcmpcmp oprd,0 opr
17、d,0jgejge next nextnegneg oprdoprdnext:next:endmendm例5.7;宏调用;宏调用absolabsol word word ptrptr bxbx absolabsol bxbx;宏展开宏展开 1 1cmpcmp word word ptrptr bx,0 bx,0 1 1jgejge?0000?0000 1 1negneg word word ptrptr bxbx 1 1?0000:?0000:1 1cmpcmp bx,0 bx,0 1 1jgejge?0001?0001 1 1negneg bxbx 1 1?0001:?0001:单独占一行单
18、独占一行比较仅仅是是源源程程序序级级的的简简化化:宏宏调调用用在在汇汇编编时时进进行行程程序序语语句句的的展展开开,不不需需要要返返回回;不不减减小小目目标标程程序序,执执行行速速度度没没有改变有改变通通过过形形参参、实实参参结结合合实实现现参参数数传传递递,简简捷捷直直观、灵活多变观、灵活多变还还是是目目标标程程序序级级的的简简化化:子子程程序序调调用用在在执执行行时时由由CALLCALL指指令令转转向向、RETRET指指令令返返回回;形形成成的的目目标标代代码码较较短短,执执行行速速度减慢度减慢需需要要利利用用寄寄存存器器、存存储储单单元元或或堆堆栈栈等等传传递递参参数数宏宏子程序子程序宏
19、宏与与子子程程序序具具有有各各自自的的特特点点,程程序序员员应应该该根据具体问题选择使用那种方法根据具体问题选择使用那种方法通通常常,当当程程序序段段较较短短或或要要求求较较快快执执行行时时,应应选选用用宏宏;当当程程序序段段较较长长或或为为减减小小目目标标代代码码时,要选用子程序时,要选用子程序比较结论宏宏子程序子程序第 5 章5.2.2 重复汇编重重复复汇汇编编指指在在汇汇编编过过程程中中,重重复复展展开开一一段(基本)相同的语句段(基本)相同的语句重复汇编没有名字,不能被调用重复汇编没有名字,不能被调用重重复复汇汇编编常常用用在在宏宏定定义义体体中中,也也可可以以在在一般汇编语句中使用一
20、般汇编语句中使用重复汇编伪指令有三个:重复汇编伪指令有三个:REPEAT按参数值重复按参数值重复FOR按参数个数重复按参数个数重复FORC按参数的字符个数重复按参数的字符个数重复最后,用最后,用ENDM结束结束按参数值重复按参数值重复REPEATREPEAT 重复次数重复次数 重复体重复体ENDMENDMchar=Achar=AREPEAT 26REPEAT 26 db char db char char=char+1 char=char+1ENDMENDM 1 1db chardb char;等效于等效于db Adb A 1 1char=char+1char=char+1 1 1db cha
21、rdb char;等效于等效于db Bdb B 1 1char=char+1char=char+1.1 1db chardb char;等效于等效于db Zdb Z 1 1char=char+1char=char+1按参数个数重复按参数个数重复FORFOR 形参形参,实参表实参表 重复体重复体ENDMENDMFOR FOR regadregad,push push regadregadENDMENDM 1 1push axpush ax 1 1push push bxbx 1 1push push cxcx 1 1push push dxdx按参数字符个数重复按参数字符个数重复FORCFORC
22、 形参形参,字符串字符串 重复体重复体ENDMENDMFORC FORC regad,dcbaregad,dcba pop&pop®ad&xregad&xENDMENDM 1 1pop pop dxdx 1 1pop pop cxcx 1 1pop pop bxbx 1 1pop axpop ax第 5 章5.2.3 条件汇编条条件件汇汇编编伪伪指指令令在在汇汇编编过过程程中中,根根据条件决定汇编的语句据条件决定汇编的语句IFxx 表达式表达式;满足,汇编分支语句体满足,汇编分支语句体1分支语句体分支语句体1 ELSE;不满足,汇编分支语句体不满足,汇编分支语句体2分支语句体分支语句体2
23、 ENDIF;条件汇编结束条件汇编结束pdatapdatamacro nummacro num IFIF num num ltlt 100 100;如果如果num 100num 100,则汇编如下语句则汇编如下语句db num dup(?)db num dup(?)ELSEELSE;否则,汇编如下语句否则,汇编如下语句db 100 dup(?)db 100 dup(?)ENDIFENDIFendmendmpdatapdata 12 12 ;宏调用宏调用db 12 dup(?)db 12 dup(?);宏汇编结果宏汇编结果pdatapdata 102 102 ;宏调用宏调用db 100 dup(
24、?)db 100 dup(?);宏汇编结果宏汇编结果例5.10宏结构的作用宏汇编、重复汇编和条件汇编宏汇编、重复汇编和条件汇编为源程序的编写提供了很多方便,为源程序的编写提供了很多方便,灵活运用它们可以编写出非常灵活运用它们可以编写出非常良好的源程序来良好的源程序来汇编系统中有些以圆点起始的汇编系统中有些以圆点起始的 伪指令(如伪指令(如.startup、.exit等)等)实际上是一种宏结构实际上是一种宏结构dstringdstringMACRO stringMACRO string;定义字符串定义字符串db&string&,0dh,0ah,$db&string&,0dh,0ah,$ENDME
25、NDMmainbeginmainbeginMACRO MACRO dssegdsseg;设置数据段地址设置数据段地址movmov ax,dssegax,dssegmovmov ds,axds,axENDMENDMdispmsgdispmsgMACRO messageMACRO messagemovmov dx,offsetdx,offset message messagemovmov ah,09h ah,09hintint 21h 21hENDMENDM例题5.41/3mainendmainend MACRO MACRO retnumretnum;返回返回DOSDOS,可不带参数,可不带参数i
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 汇编语言 05
限制150内