Intel汇编语言程序设计[第五版]Chapter10结构和宏课件.ppt
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《Intel汇编语言程序设计[第五版]Chapter10结构和宏课件.ppt》由用户(晟晟文业)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第五版 Intel 汇编语言 程序设计 第五 Chapter10 结构 课件
- 资源描述:
-
1、10.3 条件汇编伪指令条件汇编伪指令条件汇编伪指令的一般格式:IF condition statements ELSE statements ENDIF 当condition为真时,允许汇编statements中的语句。条件汇编伪指令条件汇编伪指令伪指令说明IF 表达式如果表达式为真则允许汇编。IFB 如果参数为空则允许汇编,参数名必须用括起来IFNB 如果参数不为空则允许汇编,参数名必须用括起来IFIDN,如果两个参数相同则允许汇编,参数区分大小写IFIDNI,如果两个参数相同则允许汇编,参数不区分大小写IFDIF,如果两个参数不同则允许汇编,参数区分大小写IFDIFI,如果两个参数不同则
2、允许汇编,参数比区分大小写IFDEF 名字如果名字已经定义则允许汇编IFNDEF 名字如果名字未定义则允许汇编ENDIF结束一个条件汇编伪指令开始的语句块ELSE如果前面的条件均为假,则汇编该伪指令至ENDIF之间的语句EXITM立即退出宏,阻止其后任何语句的展开立即退出宏,阻止其后任何语句的展开检查缺少的参数检查缺少的参数mWriteStr MACRO string IFB ECHO-ECHO*Error:parameter missing in mWriteStr ECHO*(no code generated)ECHO-EXITM ENDIF push edx mov edx,OFFSE
3、T string call WriteString pop edxENDM 默认的参数初始化值默认的参数初始化值定义宏时可以有默认的参数初始化值,如果调用宏时未给出参数,则编译器使用默认参数值。格式为:paramname:=例如:为mWriteLn宏提供一个空格作为默认的参数:mWriteLn MACRO text:=mWrite text call Crlf ENDM 如果调用时不带参数,那么仍然会打印一个空格并在后面跟一个换行符。布尔表达式布尔表达式编译器允许在常量布尔表达式中使用以下关系运算符:LT 小于 GT 大于 EQ 等于 NE 不等于 LE 小于等于 GE 大于等于IF,ELSE
4、和ENDIF伪指令格式为:IF expression statement-list ENDIF或:IF expression statement-list ELSE statement-list ENDIF IF伪指令后面必须跟一个常量布尔表达式。表达式可以包含常量、符号常量或宏参数常量,但不能是寄存器或变量名。例子:mGotoxyConst宏 mGotoxyConst宏使用LT和GT操作符对传递给宏的参数进行范围检查,参数X和Y必须是常量。另一个常量ERRS用于统计发现的错误数。IFIDN和IFIDNI伪指令IFIDN伪指令以区分大小写的方式比较两个符号(包括宏参数)是否相等,如果相等则返回
5、TRUE。IFIDNI伪指令则不区分大小写。格式为:IFIDN,statements ENDIFmReadBuf MACRO bufferPtr,maxchars IFIDNI,ECHO Warning:second argument to mreadbuf cannot be edx ECHO*EXITM ENDIF push ecx push edx mov edx,bufferPtr mov ecx,maxchars call ReadString pop edx pop ecxENDM下面的语句将导致宏产生一条错误信息:mReadBuf OFFSET buffer,edx 例如:下面的
6、mReadBuf宏中,第二个参数不能是EDX,因为buffer的偏移被送到EDX时,参数会被覆盖。例子:对矩阵行求和例子:对矩阵行求和定义宏mCalc_row_sum mCalc_row_sum MACRO index,arrayOffset,rowSize,eltType LOCAL L1 mov eax,index mov ebx,arrayOffset mov ecx,rowSize mul ecx add ebx,eax shr ecx,(TYPE eltType/2)mov eax,0 mov esi,0L1:IFIDNI,mov edx,eltType ptrebx+esi*(TY
7、PE eltType)ELSE movzx edx,eltType ptrebx+esi*(TYPE eltType)ENDIF loop L1ENDM特殊操作符特殊操作符&替换操作符文本操作符!特殊字符操作符%展开操作符替换操作符&将宏的内部对宏参数的引用替换为调用时的实际值。ShowRegister MACRO regName LOCAL tempStr .data tempStr BYTE “®Name=”,0 .code push eax push edx mov edx,offset tempStr call WriteString mov eax,regName call W
8、riteHex pop edx pop eax ENDM当程序中出现宏调用语句:ShowRegister ECX则宏调用的输出为:ECX=00000101展开操作符%展开文本宏并把常量表达式转换成文本。在与用TEXTEQU联合使用时,%操作符对常量表达式求值并将结果转化成整数。例1:count=10 sumVal TEXTEQU%(5+count);=“15”例2:mGotoxyConst%(5*10),%(3+4)调用宏时,两个表达式分别被求值并作为参数传递行首的行首的%当%作为源代码行的第一个字符时,预处理器将展开在该行发现的所有文本宏和宏函数。例子:.data array DWORD 1
展开阅读全文