- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第四章(专)
第四章 汇编语言程序设计 4.1 概述 1、机器语言 3、高级语言 4.2 程序设计的方法 4.3 汇编程序格式与伪指令 伪指令 伪指令是汇编程序能够识别并对汇编过程进行某种控制的汇编命令。它不要求计算机做任何操作,也不产生机器码,不影响程序的执行,仅提供帮助汇编的一些信息。 MCS-51单片机主要有8条伪指令。 一、起始地址设定伪指令ORG 二、汇编结束伪指令 END 三、赋值伪指令 EQU 四、 DATA数值地址赋值伪指令 格式:字符名称 DATA 表达式 功能:DATA与EQU基本相同,即将DATA右边表达式的值赋给一个字符名称。二者的区别是:EQU必须先定义,后使用;而DATA可先使用后定义。因此,EQU一般放在程序的开始,而DATA可放在程序的任何地方。 五、字节数据定义伪指令 DB 六、字数据定义伪指令 DW 七、空间定义伪指令 DS 八、位地址符号定义伪指令 BIT 4.4.1 顺序程序 例1:把片内RAM中50H地址单元中的内容与40H地址单元中的内容互换。 例1:把片内RAM中50H地址单元中的内容与40H地址单元中的内容互换。 例1:把片内RAM中50H地址单元中的内容与40H地址单元中的内容互换。 例1:把片内RAM中50H地址单元中的内容与40H地址单元中的内容互换。 例2:双字节无符号数加法 [例] 设R2寄存器中保存两个压缩的BCD码,试将它们拆开,并转换成ASCII码分别放在片内RAM 11H(高位)和10H(低位)单元中。 根据ASCII码表可知,0~9的BCD数与ASCII码表只相差30H。因此,本题只需将R2中的两个BCD数拆开,分别加上30H即可。 4.4.2 分支程序 [例] : 程序如下: ORG 0100H MOV DPTR,#2000H;地址指针指2000H单元 MOVX A,@DPTR ;(2000H)→A MOV R0,A ;A→R0 MOV DPTR,#2001H;地址指针指2001H单元 MOVX A,@DPTR ;(2001H)→A MOV 30H,R0 CJNE A,30H,NE ;若两个数不相等,则转NE 4.4.3 循环程序 [例] 统计单字节变量X中有多少位为1,并存入ONE 变量中。 使用带进位左循环移位指令和位判断转移指令,分别将X变量最高位移入进位标志位CY中并判断其值,若为1,则将ONE单元加1。这样重复操作八次即可。 [例] 在首地址为片外RAM 2000H数据缓冲区中,连续存放100个非零的无符号单字节数,求出其中最大的偶数。 用位操作指令JB对操作数最末位进行判断,若为1则是奇数,为0则是偶数。用SUB减法指令,通过标志位CY可判断两个操作数的大小。程序流程图如图所示。 4.4.4 子程序及其调用 主程序为: 子程序为: 4.5 常用程序举例 [例] 将20H单元中的两个十六进制数转换成ASCII码,低4位的ASCII码保存在21H单元,高4位的ASCII码保存在22H单元。 例 将多位十六进制数转换成ASCII码。 设地址指针R0指向十六进制数低位,R2中存放字节数,转换后地址指针R0指向十六进制数的高位。R1指向要存放的ASCII码的高位地址。实现程序如下: 4.5.2 数据处理 1.查询 [例] 在外部RAM 1000H开始的地址单元中存放30个数据,找出其中的奇数存入内部RAM 20H开始的存储单元中,并统计奇数的个数,存入3FH单元。 用位操作指令对操作数最低位进行判断,若为1即为奇数。本题中,DPTR是片外数据缓冲区地址指针,R0是片内数据缓冲区地址指针。 ORG 0030H MOV DPTR,#1000H;指向片外缓冲区首地址 MOV R0,#20H ;指向片内缓冲区首地址 MOV R7,#30 ;循环次数送入R7 MOV 3FH,#00H ;清零 LP: MOVX A,@DPTR ;取数 JNB ACC.0,EVEN ;偶数转EVEN MOV @R0,A ;奇数保存 INC R0 ;修改片内地址 INC 3FH ;修改统计个数 EVEN: INC DPTR ;修改片外地址 DJNZ R7,LP ;控制循环 SJMP $ 2.排序 [例] 将片内RAM 30H开始的连续16个单元的数据按从小到大的顺序排序。 此题采用的是冒泡排序法,即对这16个数据组成的数据串,依次将相邻两数分别进行比较,若后面的数小于前面的数,则比较的相邻两数互换,且置位地址单元7FH为1。若这组数据比较完后,相邻两数有交换(即交换
文档评论(0)