汇编指令 CALL、ACALL、LCALL三条指令的理解与异同点

汇编指令 CALL、ACALL、LCALL三条指令的理解与异同点


在汇编语言编程中,CALL、ACALL 和 LCALL 是用于子程序调用的不同指令,它们的主要区别在于寻址方式和有效地址范围:

1. CALL

  • 这是通用的“调用”指令,具体功能取决于具体的处理器架构和汇编器的实现。
  • 在一些8位微处理器(如8051)中,CALL可以有直接和间接两种形式。直接CALL可能受限于相对跳转范围,而在更复杂的处理器中(如x86),CALL通常用来进行远过程调用,允许转移至任意地址空间。

2. ACALL

  • ACALL是某些8位或16位单片机(例如8051系列)中的指令,全称是"Absolute CALL"或者"Short CALL"。
  • 该指令执行短距离的绝对调用,占用2个字节,其中包含一个11位的偏移量,因此只能在当前代码段的前2K字节内进行调用。
  • ACALL由于其有限的寻址能力,适用于小规模程序或空间受限的情况。

3. LCALL

  • LCALL也是针对类似8051这样的处理器设计的,全称为"Long CALL"。
  • LCALL同样用于子程序调用,但提供了一个更大的寻址范围,使用16位地址,因此能够跳转到64KB内存空间内的任何位置(对于8051而言)。
  • LCALL指令占用3个字节,支持长距离调用,更适合大型程序和需要跨越更大地址空间调用子程序的情况。

总结来说,三者的异同点主要体现在:

  • 寻址范围:ACALL局限于较短的寻址范围,而LCALL提供较大的寻址范围。
  • 指令长度:ACALL通常比LCALL短,从而节省了存储空间,但牺牲了灵活性;LCALL虽然占用更多空间,但提供了更大的调用自由度。
  • 适用场景:在小型系统或存储空间紧张时,可能会优先选择ACALL以节省空间;在大容量程序或跨段调用时,LCALL则是必需的选择。
  • 28
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
目 录 第1篇 序 幕 单片机是什么?单片机有何用?如何系统学习单片机?单片机系统设计的流程是怎样的,需要掌握哪些辅助软件?本篇将针对这些问题一一阐述,为读者掀开单片机完全学习与应用的华丽序幕。 第1章 单片机在哪里 1.1 ■寻找单片机 1.1.1 电磁炉与单片机 1.1.2 MP3播放机与单片机 1.1.3 更多单片机 1.2 ■学习单片机 1.2.1 掌握单片机基础知识 1.2.2 理解单片机系统 1.2.3 成为单片机系统设计师 1.3 ■单片机之家 1.3.1 Intel 8051单片机 1.3.2 PIC单片机 1.3.3 AVR单片机 1.3.4 其他单片机 1.4 ■应用体验——数字温度计 1.4.1 数字温度计工作原理 1.4.2 体验数字温度计 1.5 ■实例解读——装小球系统 1.5.1 需求分析 1.5.2 系统框架 第2章 如何成为单片机系统设计师 2.1 ■需要准备哪些 2.1.1 综合素质 2.1.2 软件工具 2.1.3 硬件工具之一:面包板 2.1.4 硬件工具之二:万用板和 印制电路板 2.1.5 焊接工具 2.1.6 焊接方法 2.2 ■单片机系统设计流程 2.2.1 需求分析 2.2.2 电路设计 2.2.3 程序设计 2.2.4 系统调试 2.3 ■应用体验——单片机控制下的 发光二极管 2.3.1 发光二极管工作原理 2.3.2 单片机的控制 2.3.3 体验单片机控制发光二极管 2.4 ■实例解读——反应时间测试仪 2.4.1 需求分析 2.4.2 电路设计 2.4.3 程序设计 第3章 单片机系统登场 3.1 ■单片机系统组成 3.1.1 单片机本身 3.1.2 系统的构成 3.2 ■单片机系统抽丝剥茧 3.2.1 AT89S51单片机的“外衣” 3.2.2 AT89S51单片机的管脚 3.2.3 常见外设 3.3 ■元器件插曲之一:变压器 3.3.1 变压器基础知识 3.3.2 电源变压器 3.4 ■元器件插曲之二:二极管与整流 3.4.1 二极管基础知识 3.4.2 整流 3.4.3 整流全桥 3.5 ■元器件插曲之三:电容 3.5.1 电容基础知识 3.5.2 电容的种类 3.5.3 电源滤波 3.6 ■元器件插曲之四:三端稳压与 单片机系统电源 3.6.1 三端稳压基础知识 3.6.2 单片机系统电源方案一: 自制直流稳压电源 3.6.3 单片机系统电源方案二: 电源适配器 3.6.4 单片机系统电源方案三: USB口供电 3.7 ■元器件插曲之五:晶振与振荡器 3.7.1 晶振基础知识 3.7.2 振荡器 3.8 ■诠释单片机最简系统 3.8.1 单片机最简系统 3.8.2 电源端(VCC、GND) 3.8.3 时钟信号端(XTAL1、 XTAL2) 3.8.4 复位端(RST) 3.8.5 外部程序存储器访问控制端 ( ) 3.8.6 从最简系统出发 3.9 ■元器件插曲之六:电阻 3.9.1 电阻基础知识 3.9.2 电阻的参数和种类 3.9.3 电阻的分压、限流、上拉作用 3.10 ■从单片机最简系统开始设计 3.10.1 发光二极管交替发光 3.10.2 程序设计 3.10.3 初见汇编语言 3.10.4 初识指令 3.10.5 立即数 3.11 ■应用体验——发光二极管的交替 发光 3.11.1 控制交替发光的原理 3.11.2 体验交替发光 3.12 ■元器件插曲之七:开关 3.12.1 开关基础知识 3.12.2 常用开关 3.13 ■实例解读——与发光二极管的 交互 3.13.1 需求分析 3.13.2 电路设计 3.13.3 程序设计 3.13.4 延时子程序 第4章 单片机系统设计辅助软件 4.1 ■Proteus单片机系统仿真软件 4.1.1 Proteus软件界面 4.1.2 用Proteus仿真 Vision单片机程序开发4.2 ■ Vision软件界面4.2.1 4.2.2 新建和保存项目 4.2.3 向项目中添加文件 4.2.4 汇编程序,生成执行代码 4.2.5 生成下载到单片机的执行 代码HEX文件 Vision的调试及仿真功能4.3 ■ 4.3.1 调试界面 4.3.2 虚拟逻辑分析仪 4.4 ■应用体验——把程序下载到 单片机里 4.4.1 下载器与单片机 4.4.2 体验下载过程 4.5 ■实例解读——流水灯 4.5.1 需求分析 4.5.2 电路设计 4.5.3 软件设计 第2篇 揭 密 单片机的内部结构是怎样的?单片机开发经常会用到哪些电子技术和元器件知识?还有那困扰了很多人的单片机编程语言……本篇将生动地通过诸多实例带出单片机的基础知识,在遇到相关模拟电路、数字电路、元器件知识时会有及时的补充说明,带领读者一揭开单片机的神秘面纱。 第5章 单片机的触角——I/O口 5.1 ■何谓I/O口 5.1.1 I/O口的功能 5.1.2 I/O口与单片机的关系 5.1.3 I/O口的操作 5.2 ■元器件插曲之八:场效应管 5.2.1 JFET 5.2.2 MOSFET 5.3 ■元器件插曲之九:逻辑门 5.3.1 非门 5.3.2 或门 5.3.3 或非门 5.3.4 与门 5.3.5 与非门 5.3.6 异或门 5.3.7 缓冲器 5.4 ■元器件插曲之十:锁存器与触发器 5.4.1 门控D锁存器 5.4.2 边沿D触发器 5.5 ■I/O口结构探密 5.5.1 P1口 5.5.2 P3口 5.5.3 P0口 5.5.4 P2口 5.5.5 I/O口小结 5.6 ■应用体验——控制流水灯 5.6.1 功能与电路 5.6.2 体验控制流水灯 5.7 ■实例解读——晃晃灯 5.7.1 原理分析 5.7.2 需求分析 5.7.3 电路设计 5.7.4 软件设计 第6章 七段数码管显示 6.1 ■二进制与数据 6.1.1 二进制与数字 6.1.2 二进制与语音 6.1.3 二进制与图像 6.2 ■元器件插曲之十一:七段数码管 6.2.1 七段数码管原理 6.2.2 七段数码管显示数字 6.3 ■应用体验——计时器 6.3.1 功能与电路 6.3.2 体验计时器 6.4 ■元器件插曲之十二:蜂鸣器 6.4.1 蜂鸣器 6.4.2 蜂鸣器如何工作 6.5 ■元器件插曲之十三:三极管及 三极管开关 6.5.1 三极管基础 6.5.2 三极管的直流放大特性 6.5.3 三极管的直流增益 6.5.4 三极管的电流关系式 6.5.5 三极管开关 6.6 ■实例解读——带声音提示的秒表 6.6.1 需求分析 6.6.2 电路设计 6.6.3 开关抖动的处理 6.6.4 计时中数字的增加 6.6.5 软件设计 第7章 解剖单片机 7.1 ■单片机的功耗 7.1.1 运行功耗 7.1.2 I/O口驱动功耗 7.1.3 空闲模式 7.1.4 待机模式 7.2 ■单片机内部结构 7.2.1 从I/O口到内部结构 7.2.2 数据在内部交换 7.2.3 算术逻辑单元(ALU) Vision中观察寄存器7.2.4 在 7.3 ■单片机的程序存储器 7.3.1 整体结构 7.3.2 程序下载到哪里 7.3.3 片内程序存储器 7.3.4 程序计数器PC 7.3.5 是片内还是片外程序存储器 Vision中观察程序存储器7.3.6 在 7.4 ■单片机的数据存储器 7.4.1 片内数据存储器 7.4.2 工作寄存器区(00H~1FH) 7.4.3 位寻址区(20H~2FH) 7.4.4 开放区(30H~7FH) Vision中观察数据存储器7.4.5 在 7.5 ■单片机的特殊功能寄存器 7.5.1 特殊功能寄存器分布图 7.5.2 特殊功能寄存器的功能 7.5.3 特殊功能寄存器的字节操作 7.5.4 特殊功能寄存器的位操作 Vision中观察特殊功能7.5.5 在 寄存器 7.6 ■应用体验——用取表方式实现 流水灯 7.6.1 取表法 7.6.2 取表法小结 7.6.3 体验流水灯 7.7 ■实例解读——直接驱动七段 数码管 7.7.1 需求分析 7.7.2 电路设计 7.7.3 软件设计 第8章 单片机与汇编指令 8.1 ■汇编语言真面目 8.1.1 汇编语言与高级语言 8.1.2 从汇编程序到执行代码 8.1.3 伪指令 8.2 ■指令的执行 8.2.1 振荡周期、机器周期、指令 周期 8.2.2 指令的执行 8.3 ■寻址方式 8.3.1 直接寻址 8.3.2 间接寻址 8.3.3 寄存器寻址 8.3.4 寄存器特征寻址 8.3.5 立即寻址 8.3.6 变址寻址 8.4 ■指令分类 8.4.1 指令概述 8.4.2 指令的长度 8.5 ■算术运算指令 8.5.1 加法指令——ADD A, <src-byte> 8.5.2 带进位的加法指令——ADDC A, <src-byte> 8.5.3 带借位的减法指令——SUBB A,<src-byte> 8.5.4 自增/自减指令——INC <byte> / DEC <byte> 8.5.5 乘法指令——MUL AB 8.5.6 除法指令——DIV AB 8.5.7 十进制调整指令——DA A 8.6 ■逻辑运算指令 8.6.1 与操作——ANL <dest-byte>,<src-byte> 8.6.2 或操作——ORL <dest-byte>,<src-byte> 8.6.3 异或操作——XRL <dest-byte>, <src-byte> 8.6.4 累加器A清0操作——CLR A 8.6.5 累加器A取反操作——CPL A 8.6.6 累加器A位移动操作——RL、 RLC、RR、RRC 8.6.7 累加器A高低位交换操作 ——SWAP A 8.7 ■数据装载指令 8.7.1 片内数据装载指令——MOV   <dest>, <src> 8.7.2 数据指针DPTR装载指令 ——MOV DPTR, #data16 8.7.3 堆栈指令——PUSH、POP 8.7.4 数据交换指令——XCH、 XCHD 8.7.5 片外数据装载指令——MOVX   <dest>, <src> 8.7.6 查表指令——MOVC  <dest>, <src> 8.8 ■布尔指令 8.8.1 清0、置1、取反操作——CLR、 SETB、CPL 8.8.2 布尔逻辑运算指令——ANL、 ORL 8.8.3 位数据装载指令——MOV <dest-bit>,<src-bit> 8.8.4 布尔跳转指令——JC、JNC、 JB、JNB、JBC 8.9 ■调用子程序指令 8.9.1 长调用指令——LCALL 8.9.2 绝对调用指令——ACALL 8.9.3 返回指令——RET、RETI 8.10 ■跳转与循环指令 8.10.1 无条件跳转指令——LJMP、 AJMP、SJMP、JMP 8.10.2 条件跳转指令——JZ、JNZ 8.10.3 比较跳转指令——CJNE <dest-byte>, <src-byte>, rel 8.10.4 循环指令——DJNZ <byte>,<rel-addr> 8.10.5 无操作指令——NOP 8.11 ■应用体验——七段数码管的串行 控制技术 8.11.1 串行与并行传输 8.11.2 串行控制七段数码管 8.11.3 程序设计 8.12 ■实例解读——指令应用(程序) 实例 8.12.1 数据求和 8.12.2 减法与二进制的二补数 8.12.3 异或操作指令XRL用于比较 寄存器数值 8.12.4 利用布尔指令产生矩形波 信号 8.12.5 布尔指令应用于控制
******* 大 学 课 程 设 计 说 明 书 课程设计名称:《单片机》课程设计 专 业:机械设计制造及其自动化 学 号:1224140146 学 生 姓 名:*** 指 导 教 师:**** 目录 1 设计任务 1 2 系统总体设计 1 3 硬件系统设计 2 4 程序流程图 3 5 程序 4 6 软件仿真 7 7 设计总结 7 参考文献 8 1 设计任务 用定时器设计的门铃,通过定时器控制门铃声响的系统设计,掌握定时/计数器的使用 方法,和简单程序的编写,最终提高我们的逻辑抽象能力。 要求是按下开关的时候开启中断,定时器溢出进入中断后,在软件以标志位i来判断 门铃声音呢,开始响铃。先是"叮",标志位i加1,延时后接着是"咚",标志位i加1,然 后是关中断。检测铃响脉宽也是以标志位i来识别"叮咚"。当i为0时给示波器A通道高电 平,i为2时,给示波器B通道高电平。 2 系统总体设计 1.针对本课题的设计任务,进行分析得到,本次设计是利用单片机实现对扬声器发省的 ,控制采用按钮操作,c51单片机进行控制,最终使扬声器发出"叮咚"声音。 绘制电路原理图,编写程序,并进行仿真,基本实现对输出频率的控制,用扬声器的管 理。其中有两个声音"叮"、"咚",因此有两个输出的频率对应于两个不同扬声器声音的 输出。最终利用单片机实现对扬声器发声的控制,采用按钮操作,c51单片机进行控制, 最后使扬声器发出"叮咚"声音。 本设计能模拟基本的扬声器发出声响的系统,是采用中断的方式定时控制不同频率的输 出。定时/计数器工作方式寄存器,定时器采用T0定时器工作于模式0,位数:13位。计 数范围:0-8192 ;中断设置每次定时器中断执行两个不同频率的输出。 3 硬件系统设计 单片机设计的门铃系统,可用单片机直接控制输出频率变化来实现门铃声响可以广泛的 应用到现实门铃的设计中。 据此,本设计系统以单片机为控制核心,连接成最小系统。系统的总体框图如上图所示 。因为它能够准确地划分成时钟频率,与UART(通用异步接收器/发送器)量常见的波特 率相关。特别是较高的波特率(19600,19200),不管多么古怪的值,这些晶振都是准确 ,常被使用的。当定时器1被用作波特率发生器时,波特率工作于方式1和方式3是由定时 器1的溢出率和SMOD的值(PCON.7-----双倍速波特率)决定。 4 程序流程图 5 程序 ORG 0000H ;规定汇编的起始地址为0000H LJMP MAIN ;把MAIN函数进行长转移 ORG 000BH LJMP T0ISR ORG 0030H MAIN: MOV TMOD,#00H ;定义工作方式寄存器TMOD用于选择定时器/计数器的 工作模式和工作方式 MOV IE,#82H MOV TH0,#HIGH(8192-700) ;定义定时器/计数器0(高字节)的地址 MOV TL0,#LOW(8192-700) ;定义定时器/计数器0(低字节)的地址 MOV R2,#0 MOV R3,#0 LOOP: JB P2.0,$ SETB TR0 JNB P2.0,$ ;直接寻址位为零则转移 SJMP LOOP T0ISR: CPL P2.3 ;对P2.3取反 LCALL ADDP LCALL CMPP JNZ T01 MOV TH0,#HIGH(8192-700) MOV TL0,#LOW(8192-700) RETI ;从中断返回 T01: DEC A ;累加器减1 JNZ T02 MOV TH0,#HIGH(8192-1000) MOV TL0,#LOW(8192-1000) RETI T02: CLR TR0 MOV R2,#0 MOV R3,#0 RETI ADDP: MOV A,R2 ADD A,#1 ;把立即数1加上累加器中的数寄存到累加器A中 MOV R2,A MOV A,R3 ADDC A,#0 ;把立即数加到累加器 MOV R3,A RET CMPP: CLR C MOV A,R2 SUBB A,#90H MOV A,R3 SUBB A,#1 JC CMPP0 CLR C ;清进位位 MOV A,R2 SUBB A,#20H ;累加器减去立即数20H MOV A,R3 SUBB A,#3 JC CMPP1 MOV A,#2 RET CMPP1: MOV A,#1 RET CMPP0: MOV A,#0 RET ;从子程序中返回 END 6 软件仿真 7 设计总结 这次课程设计使我得到了不小的收获,发现了自己的很多不足,知识体系上的漏洞, 看到了自己的实践经验还是比较缺乏,理论联系实际的能力还需很大提高。 首先拿到这个题目,我就开始收集大量的资料,包括C51单片机的原理,人的听力范 围等等与课程设计相关的各类知识,了解了很

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

嵌入式Stark

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值