为什么单片机51汇编程序,累加器有时候要写成ACC,有时候却要写成A .否则都会报错?
来源:学生作业帮 编辑:大师作文网作业帮 分类:综合作业 时间:2024/11/19 01:03:21
为什么单片机51汇编程序,累加器有时候要写成ACC,有时候却要写成A .否则都会报错?
比如:
CJNE A,#08H,LOOP1
这里如果A,写成ACC就会报错……
比如:
CJNE A,#08H,LOOP1
这里如果A,写成ACC就会报错……
这是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.访问寄存器地址也比访问内存地址快.
另外一个是累加器的直接内存地址,指令访问时并不明确访问对象是什么,因为访问地址是程序员编程决定的.比如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.访问寄存器地址也比访问内存地址快.
为什么单片机51汇编程序,累加器有时候要写成ACC,有时候却要写成A .否则都会报错?
"sbit ACC7=ACC^7;//累加器A 51单片机原理"是什
英文题目大写有的单词要大写,有时候in要写成In,有时候又不行.到底什么时候大写?
英语.为什么有时候主语要加BE动词,有时候不用?
为什么有时候下雨之前会打雷有时候却不会?
为什么51单片机P0口有时候要加上拉电阻才能用,有些芯片直接可以接P0口不用上拉电阻就可以用
生命像...有时候...有时候...有时候...仿写,要原创,快.
为什么要写成“春蚕到死丝方尽”
为什么do有时候要加ing
有时候下雨为什么要打雷呢
用十字相乘因式分解时,为什么有时候系数要横向写,而有时候要交差写?
C#中Tostring()到底什么意思,为什么输出语句时,有时候要用,有时候不要用?.