Memory 为什么8051中的某些sfr是位可寻址的?

Memory 为什么8051中的某些sfr是位可寻址的?,memory,8051,Memory,8051,根据这一点:,地址可被8整除的SFR是位可寻址的。您可以对它们执行诸如SETB或CLR之类的操作。但是它们不是和其他内存地址重叠吗?我的意思是,例如,P0在80小时内。因此,P0.0将是80小时,P0.1将是81小时。但81h是SP的地址。它们不是重叠吗?P0.0和P0.1仅指8位P0寄存器的单个位(据我所知)。您将位地址与字节地址混淆了。它们不重叠或引用相同的物理位置。获取位地址(如SETB)的指令知道如何将位地址解码为字节地址和位号。字节地址是通过屏蔽位地址中的3个最低位获得的。通过屏蔽最高

根据这一点:,地址可被8整除的SFR是位可寻址的。您可以对它们执行诸如SETB或CLR之类的操作。但是它们不是和其他内存地址重叠吗?我的意思是,例如,P0在80小时内。因此,P0.0将是80小时,P0.1将是81小时。但81h是SP的地址。它们不是重叠吗?

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

您将位地址与字节地址混淆了。它们不重叠或引用相同的物理位置。获取位地址(如SETB)的指令知道如何将位地址解码为字节地址和位号。字节地址是通过屏蔽位地址中的3个最低位获得的。通过屏蔽最高的5位来获得位号


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

是的,但如果它们是位可寻址的,它们最终会有一个地址。非常感谢您的解释。这对SFR来说是正确的。但是如果
setb01h
呢?它应该是字节地址#20和位#1。我可以说位可寻址内存和字节可寻址内存位于不同的内存空间中,可以由硬件(或介绍)自动处理吗?是的,正如您所指出的,对于非SFR(地址<80h),程序是相同的,只是字节地址中增加了额外的20h偏移量。指令将在内部处理寻址,但要小心,将它们视为“不同”的内存空间,它们确实重叠。SETB 01h将在存储器位置20h中设置#1位。这可以被以地址20h为目标的字节可寻址MOV指令覆盖。MOV 20h,00h。这将清除位地址00h到07h。程序员注意;)