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

关于汇编语言中ORG和LJMP

[复制链接]
  • TA的每日心情
    慵懒
    前天 00:26
  • 签到天数: 22 天

    [LV.4]偶尔看看III

    7

    主题

    15

    回帖

    145

    积分

    注册会员

    积分
    145
    发表于 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个字节空间。

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

    使用道具 举报

  • TA的每日心情
    慵懒
    前天 00:26
  • 签到天数: 22 天

    [LV.4]偶尔看看III

    7

    主题

    15

    回帖

    145

    积分

    注册会员

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

    使用道具 举报

  • TA的每日心情
    开心
    20 小时前
  • 签到天数: 175 天

    [LV.7]常住居民III

    9

    主题

    856

    回帖

    3361

    积分

    论坛元老

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


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

    回复 支持 2 反对 0 送花

    使用道具 举报

  • TA的每日心情
    开心
    20 小时前
  • 签到天数: 175 天

    [LV.7]常住居民III

    9

    主题

    856

    回帖

    3361

    积分

    论坛元老

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

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

    Interrpt.png



    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    慵懒
    前天 00:26
  • 签到天数: 22 天

    [LV.4]偶尔看看III

    7

    主题

    15

    回帖

    145

    积分

    注册会员

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

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

    使用道具 举报

  • TA的每日心情
    开心
    20 小时前
  • 签到天数: 175 天

    [LV.7]常住居民III

    9

    主题

    856

    回帖

    3361

    积分

    论坛元老

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

    MCS51当年就是这样设计的

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

    使用道具 举报

  • TA的每日心情
    慵懒
    前天 00:26
  • 签到天数: 22 天

    [LV.4]偶尔看看III

    7

    主题

    15

    回帖

    145

    积分

    注册会员

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

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

    多谢指点!
    回复 支持 反对 送花

    使用道具 举报

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

    本版积分规则

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

    GMT+8, 2024-5-17 21:02 , Processed in 0.064871 second(s), 55 queries .

    Powered by Discuz! X3.5

    © 2001-2024 Discuz! Team.

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