|
发表于 2022-6-9 22:01:42
|
显示全部楼层
感谢:
我手里没有51的单片机或者模拟器,不过我用sdcc编译器看了下代码
C:代码
#include<stdio.h>
#include<8051.h>
__sbit y;
unsigned char x;
void
t(void)
{
y= x;
}
汇编代码:
_t:
ar7 = 0x07
ar6 = 0x06
ar5 = 0x05
ar4 = 0x04
ar3 = 0x03
ar2 = 0x02
ar1 = 0x01
ar0 = 0x00
; 1.c:10: y= x;
; assignBit
mov a,_x
add a,#0xff
mov _y,c
; 1.c:11: }
ret
从sdcc编译器的动作来看,貌似是可以正确转换的,我对51的汇编不太熟悉但大概我的理解是
mov a,_x // 参数x送入a寄存器
add a,#0xff // a + 0xff ,如果a非0,必将导致溢出,如果a为0,那么不会溢出
mov _y,c // c寄存器保存的是add算数运算的溢出位.
所以上面的代码大概率是正常的.
// 这个地方我不太了解在sdcc里c寄存器是不是cy标志,所以上面的分析未必正确.
|
评分
-
1
查看全部评分
-
|