本帖最后由 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)
谢谢各位路过的大神!
|