单片机中为什么是0000H开始执行程序?

如题所述

原因:单片机中,0000H单元为系统启动地址,ORG 0000H AJMP MAIN 就是在该地址存放一条绝对跳转指令,转入主程序的入口地址。ORG 0030H 是为了把用户程序定位到用户RAM区(30H-7FH),0000H-0030H存储单元地址是有其他特殊功能的。

在汇编语言源程序的开始通常都用一条ORG伪指令来实现规定程序的起始地址。如果不用ORG规定则汇编得到的目标程序将从0000H开始。程序从ROM的0000开始存放程序,但是AJMP  MAIN是一条无条件跳转指令,也就是说,单片机上电之后首先从0000处开始执行程序。

但是,AJMP直接将程序跳转到MAIN标号指向的存储区域开始取指令,并执行,而一般MAIN标号是放在语句ORG 0030之后的,也即,主程序是从0030这个地址开始存放的。

扩展资料:

单片机数据存储器的特殊区段:

1、工作寄存器区(00H-1FH)

在00H-1FH共32个单元,被均匀地分为四组工作寄存器堆:RB0、RB1、RB2、RB3,每组寄存器堆包含8个工作寄存器,均以R0-R7来命名,这些寄存器被称为通用寄存器。工作寄存器用于临时存放8位信息。在使用时,由程序状态字寄存器中的RS0、RS1来选择工作寄存器堆。

2、位寻址区(20H-2FH)

片内数据存储器的20H-2FH存储区为位寻址区,既可作为一般单元按字节寻址,也可按位进行寻址。位寻址区有16个字节,位地址为00H-7FH。

参考资料来源:百度百科-单片机存储器

参考资料来源:百度百科-org

温馨提示:内容为网友见解,仅供参考
无其他回答

单片机中为什么是0000H开始执行程序?
原因:单片机中,0000H单元为系统启动地址,ORG 0000H AJMP MAIN 就是在该地址存放一条绝对跳转指令,转入主程序的入口地址。ORG 0030H 是为了把用户程序定位到用户RAM区(30H-7FH),0000H-0030H存储单元地址是有其他特殊功能的。在汇编语言源程序的开始通常都用一条ORG伪指令来实现规定程序的起始地址...

...为什么能够从程序存储器的0000H单元开始执行程序?
在硬件上,程序计数器(也叫指令指针)PC的值就是单片机下一条要执行的单片机指令的地址。因此AT89C51单片机上电后,程序将从程序存储器的0000H单元开始执行。呵呵 满意就选满意回答 喽

为什么MCS-51单片机的第一条指令要放在ROM的0000H单元
因为51单片机复位后PC(程序计数器)的初值为0000H,也就是说复位后程序先执行处于0000H单元的那条指令。

单片机都是从0000H开始执行指令的吗?
是的,51单片机复位后从0000H单元的指令开始执行。因此如果你的真实第一条指令在1000H,那么需要在0000H处放一条跳转指令,跳转到1000H.ORG 0000H LJMP MAIN ORG 1000H MAIN:

51单片机复位后从什么地址开始取指令执行?为什么?
复位从0000H开始执行 复位之后,程序计数器的值被清空了,初始化为全0

...在用单片机汇编编程时,开头都要写上 ORG 0000H AJMP MAIN ORG 003...
ORG是伪指令,告诉编译器,程序从ROM的0000开始存放程序,但是AJMP MAIN是一条无条件跳转指令,也就是说,单片机上电之后首先从0000处开始执行程序,但是,AJMP直接将程序跳转到MAIN标号指向的存储区域开始取指令,并执行,而一般MAIN标号是放在语句ORG 0030之后的,也即,主程序是从0030这个地址开始存放的...

单片机里的#00H问题
代表的是立即数,也就是咱们所说的数字,不加#汇编里面是当做地址来编译的。00H和0000H都是0,而且都是16进制表示的,H就是16进制的意思,另外还有B二进制,D十进制。就像你写100和00000100一样,都是100么,写0000H可能是为了在程序中强调这个是个16位的数,跟其他的数字做对齐的。

【单片机 ,汇编】最基本的语法,求解释。关于16进制。
帮你解答:ORG 0000H中的0000H是单片机的起始地址,即单片机开始执行指令的第一条指令的地址。第一条指令 是LJMP START 为一条转移指令,转到用户主程序开始的地方,即START处。因为单片机地址是16位的二进制地址,用十六进制表示即是4位十六进制数 如0000H 和0100H 这里H表示十六进制数 0100H...

用汇编语言写单片机程序开头为什么一般都这样:ORG 0000H LJMP START...
在单片机复位的时候 在你没有做任何改变的时候 程序指针会是指向00000H的地址 所以我们吧 START 卸载地址00H 让单片机复位后直接跳转到 START的程序段去执行 ORG 30H 是你程序的代码开始地址,由于30H以前有中断向量入口和寄存器的地址,所以一般用户程序都是从30H开始的。

单片机上电后程序从哪开始执行?
1、单片机上电后程序从0000H开始执行。2、如果是用C51编程,不用指定语句的地址。编译后编译器会给你自动安排地址。3、如果用汇编语言编程,应该指定第一条语句的地址是0000H,然后在0000H处写一条跳转指令,跳到你的主程序处。4、至于startup.a51中的内容,不同的编译器应该不一样,但和你的程序...

相似回答
大家正在搜