- 1、本文档共69页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第8章宏汇编技术分析
8.6.3 实验示例 在带符号数的运算中,如果从键盘输入负号,要求程序能够判断出“-”,并将数值求补。 示例8-4 从键盘多次输入十进制数,无论正、负数,求出补码并用二进制和十六进制显示。 设计思路: (1)?主程序main调用子程序subr1,两次调用子程序subr2分别显示二进制和十六进制数。 (2)子程序subr1:功能为键盘输入,数字键ASCII码→十进制数(该十进制数保存为二进制);判断负号,求出负数的补码;用存储单元x传参; (3)子程序subr2:取出x,用循环左移保留要显示的数值,查ASCII表分别显示二进制数和十六进制数; (4)利用宏库8-2.mac简化程序。 运行结果: 8.6.4 实验任务 实验目的: 通过分析和运行示例程序,观察宏在程序中的用法,加深对模块化结构设计的理解。 实验内容: 参考示例8-4,完成下列实验内容 (1)对输入的负数求反码。(8-5.asm) (2)对输入的多个带符号数用补码做相加运算。 (3)对(2)的运算结果分别用二进制、十六进制显示。 (4)对(2)的运算结果用十进制显示。用十进制显示时,如果是负数,要用‘-’表示负号。提示:判断最高位(符号位)为1则为负数,要再求补,得到其真值显示。 实验要求: (1)第3、4题选做 (2)实验内容用截图形式记录实验结果 (3)写出实验结果分析 ? 实验拓展: (1)如果将输入的数扩大范围,能用双字表示,程序应该怎样改写? (2)分析第七章的例7-6,对键盘输入的学生姓名和成绩,按成绩排序;如果在子程序中采用宏,程序结构会大大精简。那么应该如何设计程序? 习题八 例 定义分支宏指令BRANCH。 宏定义: BRANCH MACRO B1,B2 LOCAL OUT1 MOV AL,B1 CMP AL,B2 JLE OUT1 SUB AL,B2 OUT1:HLT ENDM 宏调用: BRANCH 10,BL BRANCH DL,BH 宏展开: 1 MOV AL,10 1 CMP AL,BL 1 JLE ??0000 1 SUB AL,BL 1 ??0000:HLT 1 MOV AL,DL 1 CMP AL,BH 1 JLE ??0001 1 SUB AL,BH 1 ??0001:HLT 8.2.2 宏删除 当不需要某个宏时,可以将其删除。 格式:PURGE 宏名[,宏名…] 说明:PURGE伪指令在汇编时将该语句中的宏定义名删除。 例 将宏INPUT和SUMM删除。 PURGE INPUT,SUMM 例1 定义判断运算宏指令DIST_OPER。 宏定义: DIST_OPER MACRO DD1,DD2 LOCAL LET1 INPUT ;已定义的键盘输入宏指令INPUT CMP AL,‘-’ JNE LET1 NEG DD1 LET1: ADD DD1,DD2 RETSYS ;已定义的源程序结束功能的宏RETSYS ENDM 宏调用: DIST_OPER X,BL 8.2.3 宏嵌套 在宏定义中可以使用宏调用,称为宏嵌套。宏嵌套可以增加宏的功能,简化宏的操作。 宏展开: 2 MOV AH,01H 2 INT 21H 1 CMP AL,’-’ 1 JNE ??0000 1 NEG X 1 ??0000 1 ADD X,BL 2 MOV AH,4CH INT 21H 宏展开中数字2表示是宏嵌套中的指令。 8.2.4 宏库建立与调用 例 建立宏库8-1.mac 文件。共有4个宏。 程序如下: ;8-1.mac 宏库 ;1 INPUT macro mov ah,01H int 21h endm ;2 OUTPUT macro x mov dl,x mov ah,02h int 21h endm 1.建立宏库 把这些宏的宏定义部分放在一个文本文件中,为其起名并加上扩展名.MAC,称为宏库 。 ;3 RETSYS macro mov ah,4ch int 21h endm ;4 ADDI macro x1,x2,result mov ax,x1 add ax,x2 mov result,ax endm ;5 STR_MOV macro opr1,opr2,opr3 mov cx,opr1 lea si,opr2 lea di,opr3 cld rep movsb endm
文档评论(0)