keil汇编编程出错,解决不了

2019-03-24 17:42发布

程序如下:
                          ORG      0000H
                          LJMP     START
                          ORG      0003H
                          LJMP     EXT0
                          ORG      TIM0
                                                  
START:                    MOV           SP,#70H
                          MOV      TMOD,#00000001B
                          MOV      TH0,#HIGH(65536-10000)
                          MOV      TL0,#LOW(65536-10000)
                          SETB     TR0
                          MOV      IE,#10000011B
                          MOV      IP,#00000001B
                          MOV      R5,#100
                          MOV      R1,#0FEH
                          JMP      $
                                                  
TIM0:                     PUSH     ACC
                          PUSH     PSW
                                 MOV      TH0,#HIGH(65536-10000)
                          MOV      TL0,#LOW(65536-10000)
                          DJNZ     R3,LOOP
                          MOV      R3,#100
                          MOV      A,R1
                          MOV      P2,A
                          RL       A
                          MOV      R1,A

LOOP:                     POP      PSW
                          POP      ACC
                          RETI

EXT0:                     PUSH     ACC
                          PUSH     PSW
                          MOV      A,#00
                          MOV      R2,#10

LOOP3:                    MOV      P2,A
                          CALL     DELAY
                              CPL      A
                          DJNZ     R2,LOOP3
                          POP      PSW
                          POP      ACC
                          RETI

DELAY:                    MOV      R5,#20
D1:                       MOV      R6,#20
D2:                       MOV      R7,#248
                          DJNZ     R7,$
                          DJNZ     R6,D2
                          DJNZ     R5,D1
                          RET
                          END


报警如下:
Build target 'Target 1'
assembling AAAA.asm...
AAAA.asm(7): error A42: PHASE ERROR (PASS-2)
Target not created




关于这个设置堆栈数值为啥会错,求大神解答下,应该是对的啊,
此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
2条回答
ywlzh
1楼-- · 2019-03-24 23:51
本帖最后由 ywlzh 于 2016-4-7 10:10 编辑

这么简单的问题


ORG是Origin的缩写:起始地址,源。在汇编语言源程序的开始通常都用一条ORG伪指令来实现规定程序的起始地址。如果不用ORG规定则汇编得到的目标程序将从0000H开始。例如:
             ORG 2000H   
    START:MOV  AX,#00H

汇编语言源程序中若没有ORG伪指令,则程序执行时,指令代码被放到自由内存空间的CS:0处;若有ORG伪指令,编译器则把其后的指令代码放到ORG伪指令指定的偏移地址。两个ORG伪指令之间,除了指令代码,若有自由空间,则用0填充。

预处理-->编译-->汇编-->链接,这是高级语言的编译全过程。对于纯汇编,就只有汇编和链接两个步骤。
org指令是链接时使用的,不是汇编那一步使用的。即不是cpu的一条指令,而是给编译器看的伪指令。
在51单片机、x86 dos、win32 exe中实现都有差异。
以最简单的51单片机为例,编译器最终链接生成HEX文件,再烧录到51的rom中去。单片机很简单,没有x86的分段、分页,启动就是从rom的0x0的位置开始执行。同时0x30H位置开始存放中断向量, 所以单片机程序一般开头就是:
   ORG 0000H
   AJMP MAIN
   ORG 0030H
这里的ORG 0000H指令,使得程序链接成HEX文件时,AJMP MAIN这条指令的机器码就在HEX文件的0x0位置。这是链接器的工作。 至于x86 dos和win32 exe,ORG的实现就复杂了,ORG不再是绝对定位,只能在一个段里相对定位。
这个是别人说的
对于初学者,你就记着,ORG后面跟的是地址,不是标号!
w505024
2楼-- · 2019-03-25 05:49
 精彩回答 2  元偷偷看……

一周热门 更多>