打印

菜鸟问一下51 ORG用法

[复制链接]
2937|19
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
forsuccess|  楼主 | 2007-8-20 00:27 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
 KEIL中仿真 把从30地址开始10个RAM单元中内容置FF
  ORG 00H
    MOV R1,#30H
    MOV R0,#10

    ORG 040 ;***********************************
LOOP:    
    MOV A,#0FFH
    MOV @R1,A
    INC R1
    DJNZ R0,LOOP
    SJMP $
      END

多了带*******************一行就不能仿真,为什么,ORG不是我自己指定
程序方的位置吗,为什么有影响,请教各位答复,谢谢。

相关帖子

沙发
hotpower| | 2007-8-20 00:45 | 只看该作者

40H或0x40

使用特权

评论回复
板凳
forsuccess|  楼主 | 2007-8-20 12:28 | 只看该作者

还是不行啊。。。。。。

使用特权

评论回复
地板
oldcat8999| | 2007-8-20 13:46 | 只看该作者

这样做应该是不可以的

从00H开始存放了两条MOV指令,从40H开始存放LOOP段指令,但是在MOV后LOOP前的内容是什么呢?应该说是不确定的,或者说是没有意义的、非法的。但是MOV指令后没有跳转指令,所以单片机在执行完MOV指令后会继续执行ROM中下面的指令,这些指令本身就是非法的,因此肯定会出问题。
那么,下一个问题是:MOV后LOOP前的内容究竟是什么呢?我曾经使用野指针读取过STC8051单片机ROM中的空闲部分,结果是所有的为编程的内容都是0FFH,我没有去查找过0FFH对应的程序是什么,但可以肯定地是,这些程序肯定是没有任何意义,是非法的。
以上的解释你能明白吗?

使用特权

评论回复
5
forsuccess|  楼主 | 2007-8-20 22:57 | 只看该作者

非常感谢

我明白了,非常感谢。
好多高手,不屑于这个问题,看来这个问题还真上不了台面,惭愧。

使用特权

评论回复
6
拜师学艺| | 2007-8-21 00:23 | 只看该作者

受益了,谢谢啦

使用特权

评论回复
7
omantou| | 2007-8-21 08:08 | 只看该作者

为什么这样还是不行

     ORG 0040H
     MOV R1,#30H
     MOV R0,#10
LOOP:    
     MOV A,#0FFH
     MOV @R1,A
     INC R1
     NOP
     DJNZ R0,LOOP
DENG:SJMP DENG
     END

使用特权

评论回复
8
btiger2000| | 2007-8-21 08:36 | 只看该作者

上电复位从0000开始执行

最起码要加一句:
ORG 0000
跳转至你程序的入口

使用特权

评论回复
9
computer00| | 2007-8-21 08:37 | 只看该作者

倒塌...直接帮你写好了...

  ORG 0000H
     LJMP LOOP
;保留给中断服务
;
  ORG 0040H
     MOV R1,#30H
     MOV R0,#10
LOOP:    
     MOV A,#0FFH
     MOV @R1,A
     INC R1
     NOP
     DJNZ R0,LOOP
DENG:SJMP DENG
     END
 

我是C人,不知道忽悠对了没...

使用特权

评论回复
10
omantou| | 2007-8-21 08:48 | 只看该作者

呵呵

     ORG 0000H
     AJMP MAIN
     ORG 0040H
MAIN:MOV R1,#30H
     MOV R0,#10
LOOP:    
     MOV A,#0FFH
     MOV @R1,A
     INC R1
     NOP
     DJNZ R0,LOOP
DENG:SJMP DENG
     END

这样就对了
开始那两句不小心给忘了
谢谢

使用特权

评论回复
11
forsuccess|  楼主 | 2007-8-21 17:13 | 只看该作者

******

computer00这样写  ORG 0040H下面的两句
     MOV R1,#30H
     MOV R0,#10
在程序里始终没有执行吧??????

使用特权

评论回复
12
mannerfh| | 2007-8-21 17:26 | 只看该作者

哈哈

有意思,看来汇编忘的人不少啊!!!

使用特权

评论回复
13
hotpower| | 2007-8-21 18:50 | 只看该作者

10楼对,00忽悠过点了~~~

使用特权

评论回复
14
computer00| | 2007-8-21 19:55 | 只看该作者

倒塌...忽悠过头了...

  ORG 0000H
     LJMP CLRMEM
;保留给中断服务
;
  ORG 0040H

CLRMEM:
     MOV R1,#30H
     MOV R0,#10
LOOP:    
     MOV A,#0FFH
     MOV @R1,A
     INC R1
     NOP
     DJNZ R0,LOOP
DENG:SJMP DENG
     END
 

使用特权

评论回复
15
hyh0lh| | 2007-8-22 11:28 | 只看该作者

现在楼主知道怎么写了吧

给你点小建议:汇编代码执行都是从头(0000H)开始执行,所以起初的“ORG 0000H”可以省略掉,但“LJMP MAIN”是不可少的,这是让你的程序从你的主程序开始,当然你也可以用别的标号来代替MAIN,这是你的自由;编程最好不要占用前64个字节,那是汇编的中断入口专用地址存放。

使用特权

评论回复
16
conwh| | 2007-8-22 12:58 | 只看该作者

倒塌的编译器

使用特权

评论回复
17
cuijianmin| | 2007-8-22 14:45 | 只看该作者

为什么我的编译器能把楼主的程序编出来呢???

我用WAVE6000编译器能够把楼主那个程序汇编出来!!
楼主的KEIL是不是没有设置好啊!!

使用特权

评论回复
18
forsuccess|  楼主 | 2007-8-22 18:16 | 只看该作者

******

可以编译,但是不能运行的。。。。。。

使用特权

评论回复
19
forsuccess|  楼主 | 2007-8-23 08:21 | 只看该作者

ORG 0040H什么作用

十楼那个 ORG 0040H 在这个程序中有什么作用?

使用特权

评论回复
20
btiger2000| | 2007-8-23 08:24 | 只看该作者

ORG 0040H 后面的代码从40H开始编译,跨过中断向量区

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

34

主题

69

帖子

0

粉丝