找回密码
 立即注册
查看: 751|回复: 6

关于汇编语言中ORG和LJMP

[复制链接]
  • 打卡等级:常住居民III
  • 打卡总天数:143
  • 最近打卡:2025-04-29 09:29:30

31

主题

148

回帖

982

积分

高级会员

积分
982
发表于 2024-1-21 12:12:32 | 显示全部楼层 |阅读模式
图片为陈桂友老师教学视频的截图。


陈桂友老师汇编语言的一个问题.png

我的问题是:
一个LJMP是占了三个字节,所以LJMPINT0_ISR到ORG 000BH 后面的LJMPT0_ISR虽然是B-3=8个字节,但是实际只有LJMPINT0_ISR占了三个字节。还有5个字节是空余的。
问题是这个ORG 0003H在生成为目标文件后是否占用了空间呢?应该是生成的吧。那么又占用了多少空间呢?


陈老师说第2个ORG 0003H正好规定了LJMP INT0_ISR装到了0003H。那么ORG在生成目标文件就不占空间了。
而且陈老师貌似没有解释为啥后面的0003H到000BH,以及后面的000BH到0013H不再是只间隔3个字节空间了。而是分别间隔了8和5个字节空间。

以上,请教各位一下。
回复

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:143
  • 最近打卡:2025-04-29 09:29:30

31

主题

148

回帖

982

积分

高级会员

积分
982
发表于 2024-1-21 12:26:05 | 显示全部楼层
又看了一会视频,貌似是stc官方规定的中断向量地址就是这样间隔开的。
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:522
  • 最近打卡:2025-05-02 00:29:54

10

主题

1159

回帖

5121

积分

论坛元老

积分
5121
发表于 2024-1-21 12:28:13 | 显示全部楼层
ORG伪指令告诉编译程序在将程序代码加载到内存时,按指定的立即数的值作为下一条指令的代码的偏移地址来分配内存空间,
比如ORG 0000H,则指定下一条指令的代码的偏移地址为0000H。


扩展资料
  伪指令(Pseudo Instruction)是用于对汇编过程进行控制的指令,该类指令并不是可执行指令,没有机器代码,只用于汇编过程中为汇编程序提供汇编信息。例如,提供如下信息:哪些是指令、哪些是数据及数据的字长、程序的起始地址和结束地址等。伪指令有2个特点:
  (1)由于是伪“指令”,因而它只存在于汇编语言中。高级语言中不叫指令,叫语句;
  (2)由于是“伪”指令,也即“假”指令,因而不是可执行指令,不会产生机器代码,不会占用ROM空间,只用于汇编过程中为汇编程序提供汇编信息。

回复 支持 2 反对 0

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:522
  • 最近打卡:2025-05-02 00:29:54

10

主题

1159

回帖

5121

积分

论坛元老

积分
5121
发表于 2024-1-21 12:44:40 | 显示全部楼层
yzhk*** 发表于 2024-1-21 12:26
又看了一会视频,貌似是stc官方规定的中断向量地址就是这样间隔开的。

就是照着STC8H 系列中断向量地址次序表来篇写的。

Interrpt.png



回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:143
  • 最近打卡:2025-04-29 09:29:30

31

主题

148

回帖

982

积分

高级会员

积分
982
发表于 2024-1-21 13:08:33 | 显示全部楼层
angm*** 发表于 2024-1-21 12:44
就是照着STC8H 系列中断向量地址次序表来篇写的。

求问官方为啥要间隔着来,故意浪费一些空间。是怕工艺导致问题么?貌似intel的8031当年就是这样设计的
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:522
  • 最近打卡:2025-05-02 00:29:54

10

主题

1159

回帖

5121

积分

论坛元老

积分
5121
发表于 2024-1-21 15:03:43 | 显示全部楼层
yzhk*** 发表于 2024-1-21 13:08
求问官方为啥要间隔着来,故意浪费一些空间。是怕工艺导致问题么?貌似intel的8031当年就是这样设计的 ...

MCS51当年就是这样设计的

请注意中断向量地址次序表表中为每个中断预留了有限数量的字节。 例如,从位置 0003H 到 000AH 总共 8 个字节预留给 INT0(外部硬件中断 0)。同样,从位置 000BH 到 0012H 总共 8 个字节预留给 Timer0(定时器 0 中断)。
如果给定中断的服务例程足够短以适合分配给它的内存空间,则将其放置在向量表中; 否则,向量表中放置一条LJMP指令来指向ISR的地址。 在这种情况下,分配给该中断的其余字节未使用。
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:143
  • 最近打卡:2025-04-29 09:29:30

31

主题

148

回帖

982

积分

高级会员

积分
982
发表于 2024-1-21 22:30:06 | 显示全部楼层
angm*** 发表于 2024-1-21 15:03
MCS51当年就是这样设计的

请注意中断向量地址次序表表中为每个中断预留了有限数量的字节。 例如,从位置 ...

多谢指点!
回复 支持 反对

使用道具 举报 送花

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

本版积分规则

QQ|手机版|小黑屋|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2025-5-2 20:45 , Processed in 0.345372 second(s), 91 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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