- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
ASM程序设计
操作数和表达式
本章讨论ASM51所用的操作数类型。叙述它们的用法以及在您的程序中可以规定的一些方式。本章的后部分研究数的表达式的用法。
本章用了两个要作某些定义的术语:汇编时的表达式及L51(重新定位及连接)时的表达式。汇编表达式是在汇编中要进行求值的那些表达式;它们是绝对的表达式。L51时的表达式是在重新定位时要求值的那些表达式;它们是由L51求绝对值的可重新定位的表达式。
操作数
1.1.1 操作数
所有的指令行的一般形式如下:
〈标号〉:助记符〈操作数〉〈,操作数〉〈,操作数〉〈;注释〉
操作数的数量及采用的操作数类型完全取决于助记符。各操作数用来进一步定义由助记符所提示的操作,以及鉴别由该指令所影响的各个部分。
全部操作数不出下面六类:
特殊的汇编符号
间接地址
立即数
数据地址(片内的)
位地址
代码地址
特殊的汇编符号是一个特殊的保留字,是指令所要求的操作数。
间接地址使用一个寄存器的内容来规定一个数据地址。
其余各类操作数(立即数,数据地址、位地址及代码地址)都是数值表达式。它们可以用符号作规定,但必须求解为一个数。如果一个表达式能够在汇编时彻底求解,它叫做绝对表达式;否则,叫做可重新定位的表达式。一个数值操作数允许的范围取决于与之所用的指令操作数由预先定义了的或用户定义的符号、数、及汇编时的操作符组成。
8051的地址空间有五种。其对应的段类型在括号内给出:
可被直接寻址的数据地址空间(DATA)
位地址空间(BIT)
外部的数据地址空间(XDATA)
程序地址空间(CODE)
可间接寻址的数据空间(IDATA)
在某些情况下,同一个数值对全部五种地址空间都是有效的地址。为帮助您防止在程序中出现逻辑错误,ASM51附着一个段类型并对寻址这些段的指令操作数(及对汇编伪指令的各个自变量)作类型的校验。例如,在跳转指令中,汇编程序校验其操作数、目标地址是否具有CODE的段类型。允许的段类型为DATA,BIT ,CODE,XDATA,IDATA。第二章将叙述如何用不同的段类型定义符号。
1.1.2 特殊的汇编符号
汇编程序保留了若干符号来将专门的寄存器指定为操作数。专门的汇编符号被译码成操作码类型,同时,一个数据地址被译码为操作数字节。表1-1列出这些符号并说明代表它们的每一个硬件寄存器。
如果一个指令的定义要求表中所列符号之一,那么只能使用规定的符号。不过,您能够用SET及EQU伪指令定义其他符号代替累加器(A)或工作寄存器(R0,…R7)。如此定义了的符号不可以在指令操作数中朝前访问。您不能够使用一个特殊汇编符号在指令操作数或伪指令自变量中作其他用途。下面表示若干使用这些符号的指令例子。
INC DPTR ;对16位的数据指针内容加1
SETB C ;置进位标志为1
JMP @A+DPTR ;将累加器内容与数据指针内容相加并跳转到该地址
除了这些符号之外,汇编程序也承认第二章中叙述的位置计数符号($)及寄存器地址符号AR0,AR1,…AR7,在第二章中与伪指令USING一起叙述。
表1-1 特殊的汇编程序符号
特殊符号 定义 A 累加器 R0,R1,R2 ,R3,
R4,R5,R6,R7 代替在当前起作用的寄存器组内的8个通用寄存器(可用4个寄存器组) DPTR 数据指针,一个16位寄存器用作对程序地址空间及外部地址空间寻址 PC 程序计数器,一个16寄存器内有要执行的下一个指令的地址 C 进位标志,接收ALU进位及由于操作数位7的借位 AB 在MUL及DIV指令中用作累加器.B寄存器对
1.1.3 间接寻址
间接寻址操作数说明这样一个寄存器,它含有该指令执行时该寄存器的内容,大多数指令间接寻址是在片内RAM中进行。不过,MOVC及MOVX指令使用一个间接地址操作数依次对程序存贮器及外部数据存贮器寻址。
在片内间接寻址时(IDATA空间),起作用的寄存器组中寄存器0及寄存器1中任一个都能够被规定为间接地址操作数。使用@记号后面跟寄存器的特殊符号(R0或R1),或跟一个代替该寄存器的特殊符号的符号,来表示间接寻址。如果您间接地访问一个不存在的地址(例如,在8044单片机上超过字节192),程序不指出错误而继续运行。如果它是一个源操作数,回送一个无定义的数据字节。如果它是一个目标操作数,数据便丢失。
下面是表示间接寻址的几个例子。
ADD A,@R1 ;将由寄存器1寻址的片内RAM单元的内容加到累加器
INC @R1 ;将由寄存器0寻址的片内RAM单元内容加1
MOVX @DPTR,A ;将累加器A内容的传送至由数据指针寻址的片外存贮器单元内
1.1.4 立即数
文档评论(0)