A和ACC的实质是一样的,对应地址都是0E0H,
只是汇编在使用时,在格式上取了两个名字。
你看看它们的使用方法,有的地方用A,有的地方用ACC,会发现有一定的规律。
当其要进行位表示时,必须用ACC,
比如要写成ACC.7,而不能写成A.7
但当其作为8位二进制数时,ACC和A都能用
但还是有区别
比如 INC ACC和INC A 都能用
ACC是地址的调用
而A是累加器调用
由于PUSH、POP 是直接寻址,后面一定跟的是直接地址
所以在进栈和出栈的时候 不能用A 只能用Acc
有这么一说
累加器有A、ACC和E0H三种表示形式,分属两种不同的寻址方法,使用A时,为寄存器寻址,指令码为04H,使用ACC和E0H时,为直接寻址,指令码为05E0H
INC A 是寄存器寻址
INC A 是单字节指令,转换成机器码是:04H,机器码中没有明确指出操作数,隐含操作
数是累加器A,所以把这种方式寻址叫寄存器寻址。
INC ACC是直接寻址
INC ACC 是双字节指令,转换成机器码是:05H,E0H。机器码中包含了累加器A的地址E0H
这个 E0H 可以换成其他直接地址,所以这种方式寻址叫直接寻址。
PUSH 和 POP 指令只支持直接寻址,所以不能用 A
PUSH ACC 机器码:C0H E0H
POP ACC 机器码:D0H E0H
51中有个主要的寄存器,A寄存器。ACC等价于A寄存器,调用ACC寄存器就是对A寄存器进行操作,A有8位所以ACC也有8位,正常情况下两者差不多,ACC可以直接进行位操作,寄存器A如果要进行位操作就要借助各种指令,操作起来比较复杂,所以ACC的存在就显得很有必要。
这是我在实践中的心得体会。