版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第七章汇编语言程序设计何宾2023.08汇编语言程序设计
--符号和符号名字符号是定义的一个名字,用来表示一个值、文本块、地址或者寄存器的名字。也可用符号表示常数和表达式符号最多可以由31个字符组成,包括A~Z之间的大写字母a~z之间的小写字母0~9之间的数字下划线“_”问号“?”符号名字可以以除0~9以外的任何字符开头汇编语言程序设计
--符号和符号名字符号可以以多种方式定义在汇编语言程序代码中,可以使用EQU或SET控制语句定义符号,用于表示表达式。例如:NUMBER_FIVEEQU5TRUE_FLAGSET1FALSE_FLAGSET0在汇编语言程序代码中,可以将符号定义为标号。比如:LABEL1:DJNZR0,LABEL1符后也用于引用一个变量的位置。比如:SERIAL_BUFFERDATA99h符号和符号名字
--标号标号定义了程序或数据空间中的“位置”(地址)适用于符号名字的所有规则也适用于标号当定义标号时,标号必须是一行中第一个文本字段它前面可能是制表符或空格在符号名字后面必须紧跟着冒号字符“:”,用于将其标识为标号一行只能定义一个标号符号和符号名字
--标号比如:LABEL1:DS2LABEL2:NUMBER:DB27,33,'STRING',0COPY:MOVR6,#12H在上面的例子中,LABEL1、LABEL2、NUMBER和COPY都是标号符号和符号名字
--标号标号可以指程序代码、基本数据或扩展数据存储器中的变量空间,也可以指程序在程序或代码空间中的常数数据此外,程序开发人员也可以使用标号将程序执行转移到其他位置标号后面的指令可以通过使用标号来引用程序可以跳转到标号或调用标号。在标号后面的代码将被立即执行在调试程序代码时,标签可以给仿真器和调试器提供消息仿真器或调试器可以在调试时提供标号。这将有益于简化调试过程注:标号只能定义一次,不能重新定义它符号和符号名字
--特殊的汇编器标号A251汇编器定义并保留MCS-251ISA中寄存器集的名字在基于MCS-251ISA的汇编程序代码中,这些预定义的名字用于访问处理器核中的寄存器寄存器功能A表示8051单片机处理器核中的累加器。它与许多操作一起使用,包括乘法和除法、将数据移动到外部存储器和从外部存储器移动数据、布尔运算等DPTR寄存器DPTR是16位的数据指针,用于访问XDATA或CODE存储器中的地址数据PC寄存器PC是16位的程序计数器。它包含着下一条要执行指令的地址C进位标志;指示产生进位的操作状态。操作也使用进位标志来表示借位符号和符号名字
--特殊的汇编器标号寄存器功能AB在乘法(MUL)和除法(DIV)指令中,使用寄存器A和寄存器B对R0~R7在当前活动寄存器组中的,8个8位通用8051寄存器。最多可以使用四个寄存器组AR0~AR7表示当前寄存器组中R0~R7的绝对数据地址。这些寄存器的绝对地址根据当前选择的寄存器组而变化。这些符号仅在给出USING汇编语句时才可以使用R8~R15MCS-251ISA中提供的额外8个8位通用寄存器WR0~WR30MCS-251ISA中提供的16个16位通用寄存器。寄存器WR0~WR14与寄存器R0~R15重叠。注意,此处没有可用的WR1DR0~DR28,DR56,DR60MCS-251ISA中提供的10个32位通用寄存器。寄存器DR0~DR28与寄存器WR0~WR30重叠。注意,此处没有可用的DR1、DR2和DR3汇编语言程序设计
--表达式和操作数操作数是与汇编命令或指令一起指定的参数或表达式汇编器命令需要常数或符号的操作数。比如:VVVEQU3DS10h汇编器指令比命令支持的操作数种类更多有些指令不需要操作数,有些指令最多需要3个操作数,多个操作数用逗号分隔。比如:MOVR2,#0所需操作数的个数以及类型取决于指定的指令或命令汇编语言程序设计
--表达式和操作数指令操作数的类型操作数类型功能立即数用作数字值的符号或常数直接位地址引用位地址的符号或常数程序地址引用代码地址的符号或常数直接数据地址引用数据地址的符号或常数间接地址对一个存储器位置的间接引用,(可选)偏移特殊汇编器符号寄存器名字表达式和操作数
--数字数字以十六进制、十进制、八进制和二进制数的形式指定如果没有指定数字的形式,默认为十进制数十进制数、八进制数或二进制数的第一个字符必须是数字(0~9)对于第一个字符不是数字(0~9)的十六进制数,必须在其前面添加一个零进制后缀合法的字符例子十六进制H、h0~9、A~F、a~f1234H、99H、0A0F0H、0FFH十进制D、d0~91234、65590D、20d、123八进制O、o、Q、q0~7177O、7777o、25O、123o、177777O二进制B、b0~11111B、10011111B、101010101B注:(1)十六进制数也可以使用C语言的表示方法,如0x12AB。(2)可以在数字之间插入符号“$”,用于增加数字的可读性,比如:1$2$3$4等效于1234。表达式和操作数
--数字A251汇编器支持指定绝对地址的记数法页面当页面为0或所有其他页面为ECODE时,使用该符号指定的数字将接收存储器类型EDATA通过这种方式,可以使用这些数字来引用任何存储器位置ABSVAL1EQU0:20H;符号用于寻址20HABSVAL2EQU0:80H;符号用于寻址EDATA空间的80HPORT0EQUS:80H;符号用于SFR空间80HENTRYEQU10:2000H;入口点在102000H表达式和操作数
--数字
MOVWR0,ABSVAL1MOVR1,ABSVAL2MOVPORT0,R1EJMPENTRYMOVWR0,0:20H;访问ABSVAL1MOVR1,0:80H;访问ABSVAL2MOVS:80H,R1EJMP10:2000H表达式和操作数
--数字冒号表示法中的数字用下面代替VAL1EQU0:20HVAL1EQUEDATA20HVAL2EQU0FF:1000HVAL2EQUECODE0FF1000HORGOFE:2000H?modulename?numberSEGMENTECODEAT0FE2000HRSEG?modulename?numberORG0:400H?modulename?numberSEGMENTEDATAAT400HRSEG?modulename?numberCSEGAT0FE:2000H?modulename?numberSEGMENTECODEAT0FE2000HRSEG?modulename?numberBVAR1BIT0:20H.1BVAR1BIT20H.1BVAR1BIT0:30H.1BAVR1EQUEBIT30H.1PUSH.B#13PUSHBYTE#13PUSH.W#13PUSHWORD#13表达式和操作数
--数字注:提供冒号符号是为了与其他251宏汇编器兼容。如果不需要将代码移植到其他汇编器,建议在汇编源文件中使用表7.4中的替换序列表达式和操作数
--字符在表达式中可以使用ASCII字符来生成数字值表达式可以由单引号包含的两个ASCII字符组成注:字符个数不能超过两个,否则在对汇编程序处理的过程中会报错表达式值‘A’0041h‘AB’4142h‘a’0061h‘ab’6162h‘’Error:Nullstringisinvalid‘ABC’Error:Morethan2characters表达式和操作数
--字符在汇编语言的任何地方都可以使用字符,它可以用来作为立即数。例如:LETTER_AEQU'A'
TEST:MOV@R0,#'F'SUBBA,#'0'表达式和操作数
--字符串字符串与汇编器描述DB一起使用,用来定义在A251汇编程序中的消息字符串用一对单引号''包含。比如:KEYMSG:DB'Pressanykeytocontinue.'该声明将在KEYMSG指向的缓冲区内生成下面的十六进制数,即:50h、72h、65h、73h、73h、20h、…、6Eh、75h、65h、2Eh此外,也可以在同一行混合字符串和数字数据。比如:EOLMSG:DB'Endofline',00h在该例子中,后面添加的值00h,用于表示字符串“行尾”的结束表达式和操作数
--字符串可以使用两个连续的单引号字符将单引号插入字符串。比如,MSGTXT:DB'ISN''TAQUOTEREQUIREDHERE?'.表达式和操作数
--位置计数器在汇编器中,为每个段保留了一个位置计数器在这个计数器中,包含了指令或者数据的偏移地址位置计数器在每行之后递增该行中代码或数据的字节数默认,将每段的位置计数器初始化为0可以用ORG描述修改位置计数器的初值表达式和操作数
--位置计数器在表达式中,使用“$”符号,用于得到位置计数器当前的值,可以使用位置计数器确定一个字符串的长度。比如:msg:DB'Thisisamessage',0msg_len:EQU$-msg此外,可以在指令中使用位置计数器。比如,下面的指令创建一个无限循环JMP$;while(1)表达式和操作数
--操作符在汇编语言中,操作符可以是一元操作符(即,只有一个操作数);或者二元操作符(即,有两个操作数)操作符及其操作数的组合就构成一个表达式操作符
--优先级括号可用于包含多个运算符的表达式中,以指定运算符的求值顺序如果表达式中未使用括号,则运算符优先级顺序决定求值顺序优先级操作符1(最高)()2NOT、HIGH、LOW、BYTE0,BYTE1,BYTE2,BYTE3、WORD0、WORD23一元+、一元−4*、/、MOD5+、-6SHL(左移)、SHR(右移)7AND、OR、XOR8(最低)EQ、=、NE、<>、LT、<、LTE、<=、GT、>、GTE、>=操作符
--优先级BYTEx根据x所指定操作数的位置,返回相应的字节BYTE0返回最低的字节(与LOW等效);BYTE1返回紧挨BYTE0的字节(与HIGH等效)WORDx根据x指定的操作数的位置,返回相应的字WORD0返回最低的字(16位);WORD2返回最高的两个字节(16位)MSB32位操作数LSBBYTE3BYTE2BYTE1BYTE0WORD2WORD0
HIGHLOW操作符
--类操作符在本章前面介绍了类运算符,它们为表达式分配存储器类这就是将表达式与类关联的方式操作符语法功能BITBIT表达式将类BIT分配给表达式CODECODE表达式将类CODE分配给表达式CONSTCONST表达式将类CONST分配给表达式DATADATA表达式将类DATA分配给表达式EBITEBIT表达式将类EBIT分配给表达式ECODEECODE表达式将类ECODE分配给表达式ECONSTCONST表达式将类ECONST分配给表达式EDATAEDATA表达式将类EDATA分配给表达式IDATAIDATA表达式将类IDATA分配给表达式HCONSTHCONST表达式将类HCONST分配给表达式HDATAHDATA表达式将类HDATA分配给表达式XDATAXDATA表达式将类XDATA分配给表达式操作符
--类型操作符类型运算符为表达式指定数据类型操作符语法功能BYTEBYTE表达式将类BYTE分配给表达式WORDWORD表达式将类WORD分配给表达式DWORDDWORD表达式将类DWORD分配给表达式NEARNEAR表达式将类NEAR分配给表达式FARFAR表达式将类FAR分配给表达式表达式和操作数
--表达式EXTRNCODE(CLAB);代码空间CODE入口EXTRNDATA(DVAR);数据空间DATA的变量
MSKEQU0F0H;定义符号用于代替0xF0VALUEEQUMSK-1;另一个常数的符号值LVALEQU12345678H;LVAL的值为12345678HmyVarEQUEDATA0030H;用16位地址访问变量
FOOSEGMENTCODE;定义代码段CODE的名字FOORSEGFOO;引用该段表达式和操作数
--表达式ENTRY:MOVA,#40H;用常数加载寄存器MOVR5,#VALUE;加载常数符号值MOVR3,#(0x20ANDMASK);计
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 肿瘤科的肿瘤标志物
- 冬季寒冷的驱寒暖身食物
- 小型露天采石场安全会议制度
- 孕期的饮食禁忌清单
- 胆汁反流性胃炎的体位护理
- 2026厦门市护士招聘笔试题及答案
- 2026衢州市辅警招聘面试题及答案
- 大四欢送会题目及答案
- MES系统辅助决策支持系统接入标准
- 2026年秋天到了幼儿园
- 人工智能教育模式在初中历史教学中的应用与实践教学研究课题报告
- 2025年海淀卫校新生面试题库及答案
- 69-集团战略管理体系设计方案:构建高效执行力与行业领先战略管理能力的全面规划与实施指南
- DB4205∕T 89-2021 小流域暴雨洪水经验公式法洪峰流量计算规范
- 徐矿集团历年校园招聘笔试必刷题
- 五四表彰大会通知
- 《中华人民共和国环境保护法》测试题库及答案
- 中考专项复习魔壶的秘密反应后溶液中溶质成分的探究
- 铁路运输企业固定资产全生命周期管理创新研究
- TCANSI1742024造修船企业安全生产标准化基本要求
- 电梯配件储备方案(3篇)
评论
0/150
提交评论