- 1、本文档共56页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
例: (A)=0BAH , (R1)=88H, 问执行指令 ADD A, R1 后, (A)=? , 标志位状态 加1指令有一条十六位加法指令 INC DPTR,但减1指令中没有16位的减1指令。只有 DEC DPL , DEC DPH 等。 上面是8位减一,要完成DPTR的16位-1,需要一段程序,例如 CLR C MOV A, DPL SUBB A,#1 MOV DPL, A MOV A, DPH SUBB A, #0 MOV DPH, A 逻辑与的应用 教材上有一个例(例3.17): 将累加器A中的一个压缩BCD数分解为非压缩的BCD数,存放到内部RAM的40H,41H,低位在前,高位在后。 MOV R0, A ; ANL A, #0FH ; MOV 40H, A ; MOV A, R0 ; ANL A, #0F0H ; SWAP A ; MOV 41H, A ; 指令 ANL P1, #0F0H 是读取P1口输出数据锁存器的值, 与立即数 0F0H与,然后在写回P1口的输出数据锁存器。 实际上,就是P1口的 P1.7~P1.4维持不变 P1.3~P1.0全部输出0 教材56页的例子,自己看一下。 前面按键检测、LED控制的例子也用到类似的方法——保证输出到P1口高4位的信号=1。 ORL A, #0F0H MOV P1, A 也可以直接写 ORL P1, #0F0H 在汇编语言程序中,一般使用标号调用,这个标号位于子程序的最开始处,它又叫做子程序名。 子程序一般要使用RET 指令结束。该指令弹出调用指令压栈的PC,回到原来的顺序去继续执行。例如前面的延时子程序。 1. 无条件转移 (1) 长跳转指令 指令格式: LJMP addr16 功能:转移到addr16指定的地址去执行。它可以转移到64KB程序存储空间的任何一个地方去执行。 指令执行时间:24个时钟周期 指令长度: 3字节。 在程序设计中,转移目的地址通常使用标号。例如 MOV A,#35H …… LJMP ABCD …… ABCD: MOVX @R0, A …… (2)短跳转指令 指令格式: AJMP addr11 功能:取出指令后的PC的高5位与ADDR11 的11位构成16位的转移地址。他只能在当前指令的2KB地址范围内进行转移。 指令执行时间:24个时钟周期 指令长度: 2字节。 在程序设计中,通常使用标号。在汇编语言程序设计中,只需要给出标号,汇编程序会自动计算11位值。 它可以向前、也可以向后转移。 例: ADD A,#100 AJLM ABCD …… ABCD:RL A …… 我设计程序时,很少使用该指令,而是直接使用长跳转指令LJMP。 原因:两条指令的执行速度相同,LJMP指令没有转移空间限制,仅多使用一字节存储空间。 (3)相对转移指令 指令格式: SJMP rel 功能:取出指令后的PC与带符号的相对转移量rel相加,形成转移地址。它可以在-128~+127的范围内转移。 例如 SJMP 64H 转移到1000+2+64=1066H 地址去执行。 指令执行时间:24个时钟周期 指令长度: 2字节。 在汇编语言程序设计中,通常使用标号,可以不必直接给出偏移量。 假设该指令的存放地址=1000H 在汇编语言程序设计中,更方便的是直接利用标号转移 例如: SJMP BCDE …… BCDE:MOV A,#55H MOV DPTR, #1000H MOVX @DPTR ,A 汇编程序会自动将目标标号对应的地址,转换成相对偏移量。 (4)散转指令 格式: JMP @A+DPTR 功能:转移地址为 (A)+(DPTR) 该指令非常有用。程序运行过程中,当有许多转移控制条件时,如果逐个条件进行判断,则程序变得非常复杂。这是我们可以对条件进行编码,
文档评论(0)