第4章汇编语言程序设计祥解.ppt

  1. 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第4章汇编语言程序设计祥解.ppt

例4 变元可以是操作码的一部分。 但在宏定义体中必须用作分隔符。 宏定义 LEAP MACRO COND, LAB JCOND LAB ENDM 宏调用 LEAP Z, THERE LEAP NZ, HERE ? 宏展开 + JZ THERE ? + JNZ HERE 是一个操作符,它在宏定义体中可以作为形参的前缀,展开时可以把前、后两个符号合并而形成一个符号,这个符号可以是操作码、操作数或是一个字符串。 4. 取消宏定义伪指令 宏指令一经定义,在整个程序中有效。宏指令名可以与指令助记符或伪操作名相同。此时宏指令的优先级最高,而同名的指令或伪操作就失效了。 一旦出现上述情况,可用伪操作PURGE在适当的时候取消宏定义,以便恢复指令的原始含义。 格式:PURGE 宏指令名1,宏指令名2, … 5. 定义局部标号伪指令 若同一条宏指令在程序中多处出现,将被汇编程序多处展开。若宏定义中又使用了标号,则在展开处多次出现同一标号。这时,汇编程序将指出“标号重复定义”错误。为此,可用定义局部标号伪指令LOCAL,把宏定义中的标号限定为局部标号。在汇编展开时,汇编程序将会为这些局部标号自动编号。 格式:LOCAL 标号1,标号2, … ① LOCAL伪操作只能用在宏定义体内,而 且它必须是MACRO伪操作后的第一个 语句,在MACRO和LOCAL伪操作之间 不允许有注释和分号标志。 ② 汇编程序对LOCAL伪操作的局部标号表 中的每一个局部标号建立唯一的符号, 即用??0000~??FFFF代替在展开中存在 的每个局部标号。 例5 ABSOL MACRO OPER LOCAL NEXT CMP OPER,0 JGE NEXT NEG OPER NEXT: ENDM 宏定义 宏调用 ? ABSOL VAR ? ABSOL BX 宏展开 ? + CMP VAR, 0 + JGE ??0000 + NEG VAR + ??0000: ? + CMP BX, 0 + JGE ??0001 + ??0001: ? + NEG BX 宏定义允许嵌套,它包含以下两层含义: ① 宏定义中允许使用宏调用,其限制条件 是:必须先定义后调用; ② 宏定义体内不仅可以使用宏调用,也可 以包含宏定义 DATA SEGMENT SUM DW ? COUNT DW 10 ARY DW 1,2,3,4,5,6,7,8,9,10 DATA ENDS CODE SEGMENT MAIN PROC FAR ASSUME CS:CODE,DS:DATA 例8 将上例改为寄存器传递 START: MOV AX,DATA MOV DS,AX LEA SI,ARY MOV CX,COUNT CALL SCADD MOV SUM,AX MOV BX,AX CALL DISPLAY MOV AX,4C00H INT 21H MAIN ENDP SCADD PROC NEAR XOR AX,AX KKK: ADD AX,[SI] INC SI INC SI LOOP KKK RET SCADD ENDP DISPLAY PROC NEAR MOV CH,4 NEXT: MOV CL,4 ROL BX,CL MOV DL,BL AND DL,0FH ADD DL,30H CMP DL,3AH JC PRINT ADD DL,7 PRINT: MOV AH,2 INT 21H DEC CH JNZ NEXT RET DISPLAY ENDP CODE ENDS END START 可以看出:子过程SCADD返回时将累加和放在AX寄存器中传送给主过程;主过程将待显示的累加和送BX寄存器,供DISPLAY子过程使用。子过程与调用程序事先约定寄存器,子过程SCADD中用到的寄存器内容就不必压栈保护。 (3)利用地址表传递 在主过程中建立一个地址表,把要传送给子程序的参数都存放在地址表里,并把地址表的首地址通过BX寄存器传送给子过程,子过程将运算结果送指定单元。 例9 将上例改为地址表传递 CODE SEGMENT MAIN PROC FAR ASSUME CS:CODE,DS:DATA START: PUSH CS POP DS LEA BX,TABLE CALL SCADD

文档评论(0)

love + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档