MOV C ,ACC.1 ; 这里的 A 是未知数,所以 C = ? 未知
ANL C ,P1.1 ; 与操作 C = ? 还是 未知
MOV C, ACC.2 ; 因为 A 是未知数,所以 C = ? 还是 未知
ANL C, P1.7 ; 与操作 C = ? 还是 未知
ORL C, OFH ; 或操作 0FH 位 是未知数 C 是未知数 所以 C = ? 还是 未知
MOV P1.5, C ; P1.5 = C 也是 未知数
SJMP $ ; 运行 结果 A= ? CY= ? 都还是 未知数。
P1口的值都没给,让人家怎么叙述啊。
意思就是把P1口的 第一位 作为一个标志, 存在 A 的第一位
把P1口的第7位 作为一个标志, 存在 A 的第二位
把 A 的第二位 跟 0FH 或 一下, 再把结果赋给 P1.5
最好一句跳到当前,原地徘徊,相当于暂停(Halt)。
A 的值:就最低两个位的值参与运算了,具体的值要视A的初始值而定。
Cy的值:不变,所用到的指令不影响进位位标志。
可以确定A的值不变,CY的值如楼上所说,跟ACC.1 ACC.2 P1.1 P1.7 四个位的初值有关;
情况较为复杂,可以展开讨论
ACC.1=0;ACC.2=0 ==>CY=0
ACC.1=0;ACC.2=1==> P1.7=0:CY=0; P1.7=1:CY=1;
ACC.1=1;ACC.2=0==> P1.1=0:CY=0; P1.1=1:CY=1;
ACC.1=1;ACC.2=1==>跟P1.1和P1.7有四种组合,逐个讨论,太烦了,所以略
感觉这题应该至少给出ACC的初值和P1口的初值
感觉你的程序不指这么一点点,如果你的累加器全为FF,P1也同样为FF, 那么c就为1,如果累加器全为0,p1同样为FF或0,那么c就为0
前3个的理解都是对的,最后一个有点问题
应该是把R0的内容送到SFR中地址为90H的单元,因为高128字节的内部RAM地址和SFR重叠,SFR只能
直接寻址
,高128B的RAM只能间接寻址