大二上汇编语言_第1页
大二上汇编语言_第2页
大二上汇编语言_第3页
大二上汇编语言_第4页
大二上汇编语言_第5页
已阅读5页,还剩39页未读 继续免费阅读

付费下载

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

高级汇编语言程序设计本章结构6.1宏功能程序的设计6.2模块化程序设计6.1宏功能程序设计6.1.2宏体特殊处理伪指令6.1.5宏指令与子程序比较6.1.3宏操作符6.1.7条件汇编6.1.4宏库的建立与使用6.1.1宏汇编6.1.6重复汇编6.1

宏功能程序设计6.1.1宏汇编宏:源程序中一段有独立功能的程序代码。宏指令:用户自定义的指令。在编程时,将多次使用的功能用一条宏指令来代替。

汇编语言程序指令伪指令(伪操作)宏指令6.1

宏功能程序设计6.1.1宏汇编主程序:…CALL----…CALL----…CALL----…子程序:

………RET优:模块化省内存缺:开销大6.1

宏功能程序设计6.1.1宏汇编优:参数传送简单,执行效率高缺:占用内存空间大宏定义:Qmacrox,y

endm主程序:…Qa,b…Qc,d…Qe,f…目标程序:………………

LOGO6.1

宏功能程序设计6.1.1宏汇编macro_nameMACRO

[哑元表]

;形参/虚参

[LOCAL标号表]…………;宏定义体

ENDM宏定义

LOGO6.1

宏功能程序设计6.1.1宏汇编(必须先定义后调用)

macro_name[实元表];实参宏调用宏展开汇编程序把宏调用展开宏定义体复制到宏指令位置,实参代虚参

LOCAL中的标号??0000~??ffff

LOGO6.1

宏功能程序设计6.1.1宏汇编宏展开:1pushax1pushbx1pushcx1pushdx1pushsi1pushdi宏定义:savereg

MACROpushaxpushbxpushcxpushdxpushsipushdi

ENDM宏调用:savereg例:保存寄存器6.1

宏功能程序设计6.1.1宏汇编举例例:两个字相乘

宏定义:multiply

MACROopr1,opr2,resultpushdxpushaxmovax,opr1imulopr2movresult,axpopaxpopdx

ENDM6.1

宏功能程序设计6.1.1宏汇编举例例:两个字相乘

宏调用:

multiplycx,var,xyz[bx]宏展开:1pushdx1pushax1movax,cx1imulvar1movxyz[bx],ax1popax1popdx6.1

宏功能程序设计6.1.1宏汇编举例例:求绝对值宏定义:absolMACROoper

LOCALnextcmpoper,0jgenextnegopernext:

ENDM宏调用:……absolvar……absolbx……宏展开:

……1cmpvar,01jge??00001negvar1??0000:…………1cmpbx,01jge??00011negbx1??0001:……6.1

宏功能程序设计6.1.2宏体特殊处理伪指令伪指令操作:.XALL

:缺省的列表方式,只列出宏体中产生目标代码的语句。.SALL

:在LST清单中不列出任何宏展开后的语句。.LALL

:在LST清单中列出宏展开后的全部语句(包括注释)。6.1

宏功能程序设计6.1.2宏体特殊处理伪指令startermacrocsname,dsnameassumecs:csname,ds:dsname,es:dsname push ds sub ax,ax pushax mov ax,dsname mov ds,ax mov es,ax endm宏调用:.xallstartercode,data1pushds1sub ax,ax1pushax1movax,data1movds,ax1moves,ax6.1

宏功能程序设计6.1.3宏操作符宏汇编操作符:&;;%

%表达式

汇编程序将%后面的表达式转换为数字,并在展期间用这个数取代哑元。;;注释

宏展开时,;;后面的注释不予展开。符号1&符号2

宏展开时,合并前后两个符号形成一个符号。6.1

宏功能程序设计6.1.3宏操作符leapmacrocond,labj&condlab

endm宏定义:6.1

宏功能程序设计6.1.3宏操作符宏调用:leapz,there……leapnz,here宏展开:1jzthere……1jnzhere6.1

宏功能程序设计6.1.3宏操作符宏定义:msgmacrolab,num,xyzlab&numdb‘HELLOMR.&xyz’

endm6.1

宏功能程序设计6.1.3宏操作符宏调用:msgary,1,wang……msgary,2,zhang宏展开:1ary1db‘HELLOMR.wang’……1ary2db‘HELLOMR.zhang’6.1

宏功能程序设计6.1.3宏操作符举例例:定义宏指令STRG,实现存储字符串的功能

宏定义:

STRGMACROSTRINGDB‘&STRING&’ENDM宏调用:STRG25-1STRG%25-1宏展开:1DB‘25-1’1DB‘24’6.1

宏功能程序设计6.1.3宏操作符举例宏定义:msgmacrocount,stringmsg&countdbstringendmerrmsgmacrotextcntr=cntr+1msg%cntr,textendm6.1

宏功能程序设计6.1.3宏操作符举例宏调用:cntr=0……errmsg‘SYNTAXERROR’……errmsg‘INVALIDOPERAND’6.1

宏功能程序设计6.1.3宏操作符举例宏展开:1cntr=cntr+11msg%cntr,‘SYNTAXERROR’2msg1db‘SYNTAXERROR’……1cntr=cntr+11msg%cntr,‘INVALIDOPERAND’2msg2db‘INVALIDOPERAND’

6.1

宏功能程序设计6.1.4宏库的建立与使用建立宏库>EDITMACRO.MACmacro1MACRO

[哑元表]

……ENDM

macro2MACRO

[哑元表]

……ENDM……macroNMACRO

[哑元表]

……ENDM6.1

宏功能程序设计6.1.4宏库的建立与使用调用宏库>EDITEXP.ASMincludeMACRO.MAC……macro1[实元表]……macro2[实元表]……macroN[实元表]……purgemacroN6.1

宏功能程序设计6.1.5宏指令与子程序比较是否保持断点是否节约存储空间区别宏指令可以带形参6.1

宏功能程序设计6.1.6重复汇编用于连续产生完全相同或基本相同的一组代码。重复伪操作REPTREPT表达式

……;重复块ENDM不定重复伪操作IRP/IRPCIRP

哑元,<自变量表>

……;重复块ENDMIRPC

哑元,字符串

……;重复块ENDM6.1

宏功能程序设计6.1.6重复汇编CHAR=‘A’TABLELABELBYTE

REPT

26DBCHARCHAR=CHAR+1

ENDM1DB41H1DB42H1DB43H……1DB5AH汇编后:例:把字符‘A’到‘Z’的ASCII码填入数组TABLE举例6.1

宏功能程序设计6.1.6重复汇编例:产生一组指令,将字数组TAB的内容入栈保存举例;宏定义PUSH_TABMACROKPUSHTAB+k

ENDM;宏调用I=0

REPT5PUSH_TAB%II=I+2

ENDM;宏展开2PUSHTAB+02PUSHTAB+22PUSHTAB+42PUSHTAB+62PUSHTAB+86.1

宏功能程序设计6.1.6重复汇编例:建立ARRAY数组举例.lallARRAYLABELWORDREPT

7DW$+2ENDMDWARRAYARRAYLABELWORD1DW$+21DW$+21DW$+21DW$+21DW$+21DW$+21DW$+2DWARRAY汇编后:6.1

宏功能程序设计6.1.6重复汇编例:生成一组入栈指令举例IRPREG,<AX,BX,CX,DX>PUSHREGENDM1PUSHAX1PUSHBX1PUSHCX1PUSHDX汇编后:6.1

宏功能程序设计6.1.6重复汇编例:生成存储字符串的汇编语句举例汇编后:arraylabelbyteIRPCK,12345db‘NO.&K’ENDM1db‘NO.1’1db‘NO.2’1db‘NO.3’1db‘NO.4’1db‘NO.5’6.1

宏功能程序设计6.1.7条件汇编根据条件把一段源程序包括在汇编语言程序内或者排除在外。IF

自变量

;为条件

……;自变量满足条件则汇编此块[ELSE]……;自变量不满足条件则汇编此块ENDIF一般格式:6.1

宏功能程序设计6.1.7条件汇编IF表达式

;表达式≠0,则汇编IFE表达式

;表达式=0,则汇编IF1

;在第一遍扫视期间满足条件IF2

;在第二遍扫视期间满足条件IFDEF符号

;符号已定义,则汇编IFNDEF符号

;符号未定义,则汇编IFB<自变量>

;自变量为空,则汇编IFNB<自变量>

;自变量不为空,则汇编IFIDN<字符串1>,<字符串2>

;串1与串2相同IFDIF<字符串1>,<字符串2>

;串1与串2不同6.1

宏功能程序设计6.1.7条件汇编NEXT:CMPB,AXJLEOUTMOVAX,B

ENDIFOUT:

ENDM例:求最大值放入AX举例宏定义:MAXMACROK,A,B,CLOCALNEXT,OUTMOVAX,A

IFK-1

IFK-2CMPC,AXJLENEXTMOVAX,C

ENDIF6.1

宏功能程序设计6.1.7条件汇编

例:求最大值放入AX举例宏调用:MAX1,PMAX2,P,QMAX3,P,Q,R1MOVAX,P1??0002:CMPQ,AX1JLE??00031MOVAX,Q1??0003:宏展开:1MOVAX,P1??0001:1MOVAX,P1CMPR,AX1JLE??00041MOVAX,R1??0004:CMPQ,AX1JLE??00051MOVAX,Q1??0005:6.1

宏功能程序设计6.1.7条件汇编例:宏定义的递归调用:POWER实现(X*2N)举例;宏定义POWER

MACROX,NSALX,1CNT=CNT+1IFCNT-N

POWERX,NENDIF

ENDM;宏调用CNT=0

POWERAX,3;宏展开1SALAX,12SALAX,13SALAX,16.1

宏功能程序设计6.1.7条件汇编举例

movax,dividendmovbx,divisorsubcx,cxcomp:cmpax,bxjboutsubax,bxinccxjmpcompout:movquotient,cx

endmdividemacrodividend,divisor,quotientlocalcomp,outcnt=0

ifndefdividendcnt=1

endif

ifndefd

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论