从一段程序中摘抄几句
FLAG EQU 38H
。
。
SEC DATA 38H
。
。
SETB FLAG
.
.
CLR FLAG
高手们,我不理解的是FLAG EQU 38H 和 SEC DATA 38H的地址不冲突吗?这两句到底有什么本质区别呢?EQU是“替换”的意思,DATA是数据存储器地址定义,那么后边 SETB FLAG 不是把地址38H置1吗,这和DATA的地址不就冲突了吗?为什么这段程序编译后执行正常呢?
------解决方案--------------------------------------------------------
FLAG是位寻址,即其Data地址从20H开始,一位即一个地址,比如位寻址的2H实际上就是data地址20H的第2位,即20H^2,10H就是22H的第1位,这样38H应该就是……(自己计算好了,但绝对不会是data地址38H的)
而SEC是普通寻址,38H就是实际Data地址的38H,与位地址无关。
------解决方案--------------------------------------------------------
equ 在汇编语言中使用,相当于C语言中的#define
、DATA 指令用于将一个内部 RAM 的地址赋给指定的符号名。
FLAG EQU 38H FLAG等于38H这个数
。
。
SEC DATA 38H SEC这个变量放在地址为38H里面