为什么单片机51汇编程序,累加器有时候要写成ACC,有时候却要写成A .否则都会报错?

学习 时间:2026-04-09 04:41:12 阅读:9610
为什么单片机51汇编程序,累加器有时候要写成ACC,有时候却要写成A .否则都会报错?比如:CJNE A,#08H,LOOP1这里如果A,写成ACC就会报错……

最佳回答

俊秀的黄蜂

如意的小懒猪

2026-04-09 04:41:12

这是51的系统架构决定的。因为51累加器有2个地址,一是特殊功能寄存器地址,指令使用这个地址访问累加器,是已明确知道访问对象就是累加器,是专指的,这是用A表示。比如ADD A,03H,因为在51中,ADD 的第一对象就是累加器,而不能用别的寄存器,用A可以少打俩字母CC。另外一个是累加器的直接内存地址,指令访问时并不明确访问对象是什么,因为访问地址是程序员编程决定的。比如PUSH/POP指令,在51的定义里是PUSH/POP direct,这个direct可以是0~255。指令事前并不知direct到底是多少,这时将direct写成ACC,编译器就找到默认的地址E0H,而将它编译出来。如果你熟悉51单片机,应不会有这样的疑问。不过,不管是否熟悉51系统,开始时尽管讲累加器些成A。,而不写成ACC。当编译器提示出错时,将A 改成ACC即可。所以这样做的原因,是因为大多数51中访问特殊功能寄存器的速度要比访问直接地址内存快,特别累加器的特殊功能寄存器地址,访问速度时最快的。类似的情况还存在通用寄存器组R0~R7上。它们跟累加器一样同时有寄存器地址和直接内存地址,有的编译器如果 Keil 将它们的直接内存地址写成AR0~AR7。访问寄存器地址也比访问内存地址快。

最新回答共有2条回答

  • 苹果钢笔
    回复
    2026-04-09 04:41:12

    这是51的系统架构决定的。因为51累加器有2个地址,一是特殊功能寄存器地址,指令使用这个地址访问累加器,是已明确知道访问对象就是累加器,是专指的,这是用A表示。比如ADD A,03H,因为在51中,ADD 的第一对象就是累加器,而不能用别的寄存器,用A可以少打俩字母CC。另外一个是累加器的直接内存地址,指令访问时并不明确访问对象是什么,因为访问地址是程序员编程决定的。比如PUSH/POP指令,在51的定义里是PUSH/POP direct,这个direct可以是0~255。指令事前并不知direct到底是多少,这时将direct写成ACC,编译器就找到默认的地址E0H,而将它编译出来。如果你熟悉51单片机,应不会有这样的疑问。不过,不管是否熟悉51系统,开始时尽管讲累加器些成A。,而不写成ACC。当编译器提示出错时,将A 改成ACC即可。所以这样做的原因,是因为大多数51中访问特殊功能寄存器的速度要比访问直接地址内存快,特别累加器的特殊功能寄存器地址,访问速度时最快的。类似的情况还存在通用寄存器组R0~R7上。它们跟累加器一样同时有寄存器地址和直接内存地址,有的编译器如果 Keil 将它们的直接内存地址写成AR0~AR7。访问寄存器地址也比访问内存地址快。

上一篇 人体尺寸测量分为哪两类?各自的特点和用途?

下一篇 一两位数,数字之和是9,如将个位数字,十位数字对调与原数相乘的结果是1458,设十位数字为x,则列方程为------.