;bit-addressable byte RAM
BRAM SEGMENT DATA BITADDR
RSEG BRAM
status: DS 1
flag1 BIT status.0
flag2 BIT status.1
flag 3 BIT status.2
程序的意思是想在RAM区的位寻址区定义几个标志位,我想问:
1 它怎么不用SBIT定义位变量而用本应是定义SFR可寻址位的BIT定义?
2 关于可重定位变量的定义我不太懂,如果我在后来程序中使用了20H~2FH的某几个byte(例如作为数据暂存区使用),编译器也能自动避开那几个BYTE定义status么?
3 那个BITADDR是自己起的名字,整个程序除这里写了一下再没出现过了,它干嘛用的?
1 它怎么不用SBIT定义位变量而用本应是定义SFR可寻址位的BIT定义?
----------
sbit 是在SFR的地址范围内(80H-FFH),不是RAM区
2 关于可重定位变量的定义我不太懂,如果我在后来程序中使用了20H~2FH的某几个byte(例如作为数据暂存区使用),编译器也能自动避开那几个BYTE定义status么?
---------------------
用C语言定义变量,或用汇编语言并遵循其变量定义约定,就没有问题
3 那个BITADDR是自己起的名字,整个程序除这里写了一下再没出现过了,它干嘛用的?
------------------
BITADDR 一般只用BIT就可,是KEIL汇编语言关键词,表示所定义的SEGMENT要处于可位寻址区域
定义一个处于位寻址区的SEGMENT,现在更常用的语法像这样
my_bit_seg segment bit
sbit是C51语言增加的一个类型,汇编中无。sbit对应的SFR区域并非RAM区。
编译器编译时会自动避开已经显性指定被占用的地址空间。如果程序员自己硬性指定不同的变量占用同样的地址空间,那会报错。