2010-06-19 120 views

回答

2

你正在混淆一个字节地址的位地址。它们不重叠或指向相同的物理位置。采用位地址(例如,SETB)的指令知道如何将位地址解码为字节地址和位编号。字节地址是通过屏蔽位地址中的3个最低位获得的。位数是通过掩盖最高5位获得的。

例如。位地址87h - >字节地址80h,位#7

+0

非常感谢您的解释。它适用于SFR。但是如果'SETB 01h'呢?它应该是字节地址#20和位#1。我可以说位可寻址内存和字节可寻址内存在不同的内存空间,可以自动由硬件(或介绍)处理? – Grissiom 2010-07-10 15:33:40

+0

是的,正如您所指出的那样,对于非SFR(地址<80h),过程是相同的,除了字节地址附加了20h的偏移量。指令将在内部处理寻址,但要小心将它们视为“不同的”存储空间,它们会重叠。 SETB 01h将在存储单元20h中设置#1位。这可以通过目标地址为20h的字节可寻址MOV指令来覆盖。 MOV 20h,00h。这将清除00h到07h的位地址。程序员要小心;) – mocj 2010-07-12 17:06:41

0

仅P0.0和P0.1指的是8位P0寄存器的个别位(据我所知)。

+0

是的,但如果它们是位寻址,它们最终会有一个地址。 – Grissiom 2010-06-19 03:31:45

相关问题