本帖最后由 zj1037157350 于 2020-2-12 22:35 编辑
Keil C51中键入如下代码:
#include "reg51.h"
void delay(unsigned int xms);
xdata int AA=5;
void main()
{
delay(1000);
}
void delay(unsigned int xms)
{
unsigned int x,y;
for(x=xms;x>0;x--)
for(y=110;y>0;y--);
}
注意到其中一句代码为,xdata int AA=5。
Keil转换的部分汇编语言为:
12: void delay(unsigned int xms)
13: {
14: unsigned int x,y;
15: for(x=xms;x>0;x--)
C:0x008F D3 SETB C
C:0x0090 EF MOV A,R7
C:0x0091 9400 SUBB A,#AA(0x00)
C:0x0093 EE MOV A,R6
C:0x0094 9400 SUBB A,#AA(0x00)
C:0x0096 4014 JC C:00AC
16: for(y=110;y>0;y--);
C:0x0098 7D6E MOV R5,#0x6E
C:0x009A 7C00 MOV R4,#AA(0x00)
C:0x009C ED MOV A,R5
C:0x009D 1D DEC R5
C:0x009E 7001 JNZ C:00A1
C:0x00A0 1C DEC R4
C:0x00A1 ED MOV A,R5
C:0x00A2 4C ORL A,R4
C:0x00A3 70F7 JNZ C:009C
C:0x00A5 EF MOV A,R7
C:0x00A6 1F DEC R7
C:0x00A7 70E6 JNZ delay(C:008F)
C:0x00A9 1E DEC R6
C:0x00AA 80E3 SJMP delay(C:008F)
17: }
C:0x00AC 22 RET
注意到其中有一些代码中含有:#AA(0x00)。
有大神知道这个“AA”是什么意思吗?代码多的时候,它会不会影响到“AA”的值?并解说一下下面这段代码的意思。
C:0x0091 9400 SUBB A,#AA(0x00)
谢谢各位路过的大神!
|