- 一般在多个数据连加的时候用到ADDC指令,比如三个数相加,先前两个数用ADD,然后再用ADDC指令加上第三个数
- 即使溢出也不会使得进位寄存器改变,算一种循环加一的操作,加满了就归0.如果加一的操作对象是I/O口,先读锁存器内值,再加一,再输出到I/O口中
- 压缩BCD码的意思是用高4位BCD码表示10进制数的十位,低4位表示个位,而普通BCD码只有4位。DA A只能用于加法运算
- 这里00减1会变成FF。此外,DPTR可以加一不可以减一;乘法指令需要把两个乘数分别放在A B中,并且乘积的高8位在B中取得,低8位在A中取得;AB之前没有空格;进位标志C始终为0。对外部I/O口的读-修改-读操作同加一指令
- 注意字节清零指令只能对累加器A使用,将A的所有位清零,不能对其它寄存器使用。如果想对其它寄存器字节清零,用MOV 移0进去就行。同乘法,进位C始终为0
- 这些也都是只能对A使用。RL指令运行后第7位会放入第0位
- 注意结果并非都是存放到A中,结果是放到第一操作数中
- 如果每次用LJMP都要算一下要跳转的指令所在地址是很麻烦的,后续会介绍一个方法,可以对指令进行标注,并使用该标注作为该指令所在地址,编译时会自动算出标号指令所在地址。“标号隐藏着地址信息”
- 同理,使用标号,编译时会自动算出偏移量。注意,跳转目标与当前PC值的地址偏移量超出128个字节将会编译出错。解决方法是二次跳转,跳转到范围内的一条LJMP跳转指令即可
- 该指令实际通过减法操作实现,但是并不改变减数和被减数的内容
- 与JMP指令不同之处在于这里涉及压栈保存现场,而且子程序执行完会返回该指令处顺序执行下一条指令
- NOP指令不做任何操作,等一个机器周期
- 字节传送和位传送都是MOV,编译器通过观察操作数得出是字节传送还是位传送,即,当操作数中出现位变量时执行位传送指令,并把06H当作位地址;字节清零和位清零都是CLR,但是字节清零只能对A操作,所以如果操作数是地址,那么一定是位地址,执行位清零
- ANL C,/bit 表示先将bit中的内容取反再与,结果存回C