- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第5章 汇编语程序结构
* AT 表达式 使段的起始地址是表达式所计算出来的16位段地址,但它不能指定代码段,例如 AT 5800H,表示本段从存储器物理地址58000H开始装入 * 2、假定伪指令ASSUME 格式:ASSUME 段寄存器:段名 [,段寄存器:段名] 段寄存器名:指四个段寄存器DS、ES、CS、SS中的一个; 段名:指用SEGMENT/ENDS伪指令语句定义的段名。 必须用冒号 功能:建立段寄存器与段之间的对应关系。该伪指令一般出现在代码段中。 * 3、段地址的装填--在程序代码段开始处。 ASSUME伪指令语句只是建立了当前段与段寄存器的联系,但不能把各段的段基址装入相应的寄存器中,段寄存器的装入是采用程序的方法。 ①DS、ES的装填 MOV AX , 段名(DATA) MOV DS/ES , AX 汇编时是立即数,故需用AX作为桥梁实现立即数→段寄存器 ②SS的装填 ⅰ)自动加载(如下定义时,可自动加载SS、SP) 当定义堆栈段为:STACK1 SEGMENT STACK … STACK1 ENDS 组合类型 * ⅱ)用执行程序的方法加载 STACK2 SEGMENT DW 40H DUP(?) TOP LABLE WORD STACK2 ENDS CODE SEGMENT … MOV AX , STACK2 MOV SS , AX MOV SP , OFFSET TOP … CODE ENDS * ⅲ)CS的装填 用结束伪指令END加载程序的起始地址 格式: END 地址表达式 例: CODE SEGMENT ASSUME CS:CODE START: … … CODE ENDS END START * 5.3.4 过程定义伪指令 过程名 PROC [NEAR]/FAR … (语句系列) RET … (语句系列) 过程名 ENDP CALL 过程名 过程调用 * 5.3.5 结构定义伪指令 结构名 STRUC … (数据定义语句系列) 结构名 ENDS STUDENT STRUC NAME1 DB ‘WANG’ NUMBER DB ? ENGLISH DB ? MATHS DB ? * STUDENT ENDS COMPUTER DB ? S1 STUDENT ‘ZHANG’,11,87,90,89 结构引用 MOV AL,S1·ENGLISH MOV BX,OFFSET S1 MOV AL,[BX]·ENGLISH * 1.程序计数器$ 字符“$”在8086宏汇编中具有一种特殊的意义,把它称为程序计数器。表示位置计数器的当前值,它可以在数值表达式中使用。 在程序中,“$”出现在表达式里,它的值为程序下一个所能分配的存储单元的偏移地址。 5.3.7 程序计数器$和ORG伪指令 * JNZ $+8 转向地址是JNZ指令首地址加上8 * 2.置汇编地址计数器伪指令ORG 格式:ORG 数值表达式 功能:将数值表达式的值赋给汇编地址计数器。数值表达式的值须为0~65535之间的非负整数。 DATA SEGMENT DATA SEGMENT ORG 2 VAR1 DB
文档评论(0)