找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1230|回复: 8
打印 上一主题 下一主题
收起左侧

关于51单片机汇编代码实例中经常出现JMP标号,CALL子程序

[复制链接]
跳转到指定楼层
楼主
ID:748096 发表于 2022-11-15 14:12 来自手机 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
而教程中一般没有介绍怎么使用,比如LJMP,SJMP,AJMP,ACALL,LCALL。是不是编译系统自动识别代码自动修改成合适地址的
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:883242 发表于 2022-11-15 17:04 | 只看该作者
当然是编译的时候确定地址,然后给机器码赋予正确的值。
回复

使用道具 举报

板凳
ID:884147 发表于 2022-11-15 17:47 | 只看该作者
尽量不用A打头的AJMP,ACALL,甚至完全忘掉!它们是不能跨页的。
回复

使用道具 举报

地板
ID:624769 发表于 2022-11-15 18:55 | 只看该作者
一般 编程时,用  
JMP  LABLE1

LABLE1:
这种方式书写, 编译的时候,会自动根据  LABLE1: 所在位置,用地址替代。

也会根据地址选择使用 AJMP  还是  LJMP
回复

使用道具 举报

5#
ID:123289 发表于 2022-11-16 11:35 | 只看该作者
你猜的很对!
如果编译器这一点都做不到,它还译个鸟啊。
回复

使用道具 举报

6#
ID:883242 发表于 2022-11-16 13:24 | 只看该作者
mtdzok 发表于 2022-11-15 17:47
尽量不用A打头的AJMP,ACALL,甚至完全忘掉!它们是不能跨页的。

AJMP、ACALL可以节约1个字节,当年Intel设计指令集的时候就想到了单片机编程就是螺蛳壳里面做道场。
回复

使用道具 举报

7#
ID:123289 发表于 2022-11-16 15:04 | 只看该作者
JMP 和CALL 都是强制转向特定的地址,不同的是CALL多了个当前地址压栈。
标准51,是8位系统,理论上指令最多有256种,我数了一下,实际公布的是255种。
其中JMP 和CALL就占18种,理论上两种就可以了,省出16种可以做其它功能。
多做16种,好处只是短转(加A的)比长转(加L)指令省一个字节,而执行时间是不变的。
个人认为,这是CPU架构时,CPU指令系统的严重浪费。

STC对标准51进行了重大的改进,但也不得不遵守标准51的规矩,指令系统不能变!。
例如:STC新增了一个DPTR,但使用这个新增的DPTR,却只能用一个开关去切换,用起来不太爽呀。
如果当初省出这16种指令的空间,部分用于新增DPTR操作多好呢。
真希望宏晶,对51的指令系统作为改进,形成一个类似51,又优于51的,更灵活的新的8位机系列。
回复

使用道具 举报

8#
ID:77589 发表于 2022-11-21 15:19 | 只看该作者
可以尽量用短跳转和调用,如果超出地址范围了,编译器会报错,你再换个更长一点的就好了。
回复

使用道具 举报

9#
ID:401564 发表于 2022-11-21 16:57 | 只看该作者
直接用JMP和CALL就可以了,不要加什么的,完全没有必要
那是以前的东西了
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表