关于汇编语言中ORG和LJMP
图片为陈桂友老师教学视频的截图。我的问题是:
一个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个字节空间。
以上,请教各位一下。
又看了一会视频,貌似是stc官方规定的中断向量地址就是这样间隔开的。{:4_167:} ORG伪指令告诉编译程序在将程序代码加载到内存时,按指定的立即数的值作为下一条指令的代码的偏移地址来分配内存空间,
比如ORG 0000H,则指定下一条指令的代码的偏移地址为0000H。
扩展资料
伪指令(Pseudo Instruction)是用于对汇编过程进行控制的指令,该类指令并不是可执行指令,没有机器代码,只用于汇编过程中为汇编程序提供汇编信息。例如,提供如下信息:哪些是指令、哪些是数据及数据的字长、程序的起始地址和结束地址等。伪指令有2个特点:
(1)由于是伪“指令”,因而它只存在于汇编语言中。高级语言中不叫指令,叫语句;
(2)由于是“伪”指令,也即“假”指令,因而不是可执行指令,不会产生机器代码,不会占用ROM空间,只用于汇编过程中为汇编程序提供汇编信息。
yzhkpli 发表于 2024-1-21 12:26
又看了一会视频,貌似是stc官方规定的中断向量地址就是这样间隔开的。
就是照着STC8H 系列中断向量地址次序表来篇写的。
angmall 发表于 2024-1-21 12:44
就是照着STC8H 系列中断向量地址次序表来篇写的。
求问官方为啥要间隔着来,故意浪费一些空间。是怕工艺导致问题么?貌似intel的8031当年就是这样设计的 yzhkpli 发表于 2024-1-21 13:08
求问官方为啥要间隔着来,故意浪费一些空间。是怕工艺导致问题么?貌似intel的8031当年就是这样设计的 ...
MCS51当年就是这样设计的
请注意中断向量地址次序表表中为每个中断预留了有限数量的字节。 例如,从位置 0003H 到 000AH 总共 8 个字节预留给 INT0(外部硬件中断 0)。同样,从位置 000BH 到 0012H 总共 8 个字节预留给 Timer0(定时器 0 中断)。
如果给定中断的服务例程足够短以适合分配给它的内存空间,则将其放置在向量表中; 否则,向量表中放置一条LJMP指令来指向ISR的地址。 在这种情况下,分配给该中断的其余字节未使用。
angmall 发表于 2024-1-21 15:03
MCS51当年就是这样设计的
请注意中断向量地址次序表表中为每个中断预留了有限数量的字节。 例如,从位置 ...
多谢指点!
页:
[1]