标题: 用keill 4编译汇编语句如果添加STARTUP.A51文件就出错 有没有单片机高手帮我解答 [打印本页]

作者: july0    时间: 2018-4-23 11:09
标题: 用keill 4编译汇编语句如果添加STARTUP.A51文件就出错 有没有单片机高手帮我解答
我用keill 4编译汇编语句为什么会出现下面的情况

ORG 0030H
MOV 30H,#11H
MOV 31H,#22H
MOV A,30H
ADD A,31H
MOV R1,A
END
问题在于这时候如果是添加了STARTUP.A51文件,那么程序运行就在里面一直死循环出不来,如果没有加入STARTUP.A51这个文件那么程序会在闪存里出不来

还有一个有趣的现象就是添加了SYARTUP.A51这个文件
改变ORG的值会发生不一样的情况
当ORG大于0005H时同上
当小于0005H 但大于0000H时程序不进入STARUTP.A51而是直接进入闪存
当等于0000H时,程序会执行但不执行END而执行完编写的程序后会直接进入STATURP.A51

  我一直没想明白
  所以求各位同道中人为在下解惑

作者: yzwzfyz    时间: 2018-4-23 12:13
程序开始,必须从0000H单元取指令运行,你对0000H单元没有写开序。所以运行是随机取指的,程序将得不到保证!
作者: july0    时间: 2018-4-23 13:56
yzwzfyz 发表于 2018-4-23 12:13
程序开始,必须从0000H单元取指令运行,你对0000H单元没有写开序。所以运行是随机取指的,程序将得不到保证 ...

ORG 0030H不是已经规定了程序的开始是从0030H开始的嘛
作者: july0    时间: 2018-4-23 14:07
yzwzfyz 发表于 2018-4-23 12:13
程序开始,必须从0000H单元取指令运行,你对0000H单元没有写开序。所以运行是随机取指的,程序将得不到保证 ...

另外ORG一开始就指示ip值一开始在0030h
作者: yzwzfyz    时间: 2018-4-23 15:38
楼主:
51单片机必须从0000H开始运行,这是铁律!不是你ORG能定义的。
你的ORG只能定义你的“某个程序‘从某个单元开始放置。本例,你是从0030H开始放置了这段程序。但你改变不了单片机的硬件行为:从0000H开始取指!!!
你想一下:如是程序中有10个ORG,如果依你的说法,不就混套了吗。
作者: yzwzfyz    时间: 2018-4-23 15:39
必须弄清楚这一点。





欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1