这几句汇编编译后是什么样的?

hxxhxx   2009-8-1 07:56 楼主
;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是自己起的名字,整个程序除这里写了一下再没出现过了,它干嘛用的?

回复评论 (3)

1 它怎么不用SBIT定义位变量而用本应是定义SFR可寻址位的BIT定义?
----------
sbit 是在SFR的地址范围内(80H-FFH),不是RAM区

2 关于可重定位变量的定义我不太懂,如果我在后来程序中使用了20H~2FH的某几个byte(例如作为数据暂存区使用),编译器也能自动避开那几个BYTE定义status么?
---------------------
用C语言定义变量,或用汇编语言并遵循其变量定义约定,就没有问题

3 那个BITADDR是自己起的名字,整个程序除这里写了一下再没出现过了,它干嘛用的?
------------------
BITADDR 一般只用BIT就可,是KEIL汇编语言关键词,表示所定义的SEGMENT要处于可位寻址区域
点赞  2009-8-1 08:56
定义一个处于位寻址区的SEGMENT,现在更常用的语法像这样
my_bit_seg segment bit
点赞  2009-8-1 08:59
sbit是C51语言增加的一个类型,汇编中无。sbit对应的SFR区域并非RAM区。

编译器编译时会自动避开已经显性指定被占用的地址空间。如果程序员自己硬性指定不同的变量占用同样的地址空间,那会报错。
点赞  2009-8-1 10:43
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复