- 1、本文档共51页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
3、带参数的返回指令 例:段内带参数返回指令 格式:RET n; 功能: a、返回地址偏移量送到IP,(SP)+2送到SP b、(SP)+n送到SP (3)子程序设计的要求 编写子程序时要满足以下要求: 1、具有通用性 2、主程序与子程序之间的参数传递方式: 寄存器传送 、参数传送 、堆栈传送 3、注意保存信息,通常保存信息的方法: 调用程序中保存信息、子程序中保存信息 4、正确使用堆栈 (4)子程序设计举例 例:将8/16位二进制数按位转换成它的ASCII串,并将转换结果存放到指定的存储单元中。 分析: 程序采用主、子程序结构。 主程序:提供被转换的数,存放转换后ASCII串首址; 子程序:完成将二进制数转换为ASCII串,转换要求从高 位到低位依次进行 入口参数:待转换数据、位数、存放转换ASCII码结果首址 出口参数:无 程序的数据段和堆栈转: .model small .data BIN8 DB 53H ; BIN16 DW 0A84BH ASCBUF 20H DUP(0) ;WHY??? .stack 1、寄存器传递参数 入口参数:待转换数在DX中,待转换数位数在AX,存放结果ASCII首址在DI中 信息保存由主程序完成。 程序见文本《子程序-寄存器法》 2、堆栈传递参数 首先在主程序中将参数压入堆栈中,然后在子程序中从堆栈中取出参数 上例中将待转换数、待转换数位数、存放结果ASCII的首址先压入堆栈中 保存信息的工作由子程序完成 程序见文本《子程序-堆栈法》 见书P73例3.17 见书P73例3.18 见书P75例3.19 作业14(课堂) 4、编制程序,反复从键盘输入字符,并将其送显示器显示,当输入“Enter”键时,结束程序。 程序编制中常见的问题 1、设计好数据段,充分使用“$” 例:表格形的数据段,如要设计一个数组,其中学号、名次是字变量,分数是字节变量 DA SEGMENT XH DW 1 DB 90 DW ? DW 2 DB 80 DW ? … N=($-XH)/5 … 第一个 第二个 2、选择合适的指令及寻址方式 指令要求无语法错误 *双操作数指令中,不能同时为存储器 例:MOV A, B MOV [BX],[SI] MOV NUM, 2 *单操作数指令,操作数可以是寄存器或存储器,但不能为立即数 例: INC AX INC A INC [BX] INC BYTE PTR [BX] *寄存器号不能出现在不带[ ]的表达式中 例: MOV AX, SI+1 *注意寻址方式的区别 例: ADD [SI],SI ;SI的内容改变否? ADD SI, SI *不要插入不必要的指令 例: DEC BX CMP BX, 0 JNE LOP 3、合理安排源程序格式用“ ;”号对程序进行注释 宏功能程序设计 宏指令的使用要经过两个基本步骤: (1)宏定义:使用伪指令MACRO、ENDM将重复的语句序列定义成宏指令,选定好形参,并为该宏指令取一符号名(简称宏名字) (2)宏调用:在程序中需要的地方通过带实参的宏名字(宏指令)来调用宏定义 (1)宏定义 语句格式: 宏指令名 MACRO [形式参数 [,形式参数] ] 宏体 ENDM 例:在某个程序中,由于要经常输出缓冲区中的字符串,需要反复进行9号功能调用。 … LEA DX, BUF1 MOV
文档评论(0)