C51 汇编 EQU问题

来源:百度知道 编辑:UC知道 时间:2024/06/08 12:36:28
K_OLD EQU 30H
K_NEW EQU 31H
;---------------------------------------------------------
ORG 0000H
JMP MAIN
ORG 0030H
;---------------------------------------------------------
MAIN:
MOV SP,#60H
MOV P1,#0FFH
MOV P0,#0FFH
MOV K_OLD,#00H
MOV 20H,#0FFH
刚学单片机,这是一个例程的前面一部分, 我想问下, 这里K_OLD EQU 30H K_NEW EQU 31H 这两句, EQU定义到 30H和31H ,可下面ORG 0030H,程序从30H开始, 这样不会冲突吗。
K_OLD EQU 30H 这里的30H是数,不是地址吗?

EQU是宏定义,前面的两句定义后,在程序里,K_OLD就等于30H,
如MOV K_LOD,#80H等同于MOV 30H,#80H

这里的30H,31H是RAM的地址,RAM是用来存放数据的

而ORG指向的是ROM地址,就是程序代码的存放地址,单片机复位后从ROM的0000H地址开始执行。

EQU和ORG的意思是完全不同的。

EQU像宏定义一样,在前两行声明之后程序中出现K_OLD和K_NEW,编译器自动把他们替换成30H和31H;而ORG 0030H这一句的意思是,下面的MOV SP,#60H这条指令写在0030H。