我使用的是 Keil uVision3,真是讓人又愛(ài)、讓人又氣!時(shí)不時(shí)遇到一些莫名其妙的問(wèn)題。
這不,今天又遇到一次。 本來(lái)就下面一句:
Write_word(0,4,169+TIANGAN);
鼠標(biāo)指在“TIANGAN”上,顯示=9,加上169(0xa9)應(yīng)該等于0xb2?山Y(jié)果一看卻是0xae
下面是編譯器給出的對(duì)應(yīng)的匯編:
//--------------------------------------------------------------------------
58: }
59: Write_word(0,4,169+TIANGAN);
C:0x2966 E51D MOV A,DIZHI(0x1D) //這一句應(yīng)該匯編成“MOV A,TIANGAN(0x1C), DIZHI 是下一個(gè)地址(0x1D)的內(nèi)容,內(nèi)容是0x05,加上169=0xae
C:0x2968 24A9 ADD A,#0xA9
C:0x296A FB MOV R3,A
C:0x296B 7D04 MOV R5,#0x04
C:0x296D E4 CLR A
C:0x296E FF MOV R7,A
C:0x296F 022B2C LJMP Write_word(C:2B2C)
//**************************************************
無(wú)奈改成這樣試一試:
結(jié)果仍然是錯(cuò)的:
62: j=TIANGAN+169;
63: Write_word(0,4,j);
匯編的結(jié)果如下:
62: j=TIANGAN+169;
C:0x2966 E51D MOV A,DIZHI(0x1D) //這一句應(yīng)該匯編成“MOV A,TIANGAN(0x1C), DIZHI 是下一個(gè)地址(0x1D)的內(nèi)容,內(nèi)容是0x05
C:0x2968 24A9 ADD A,#0xA9
C:0x296A F525 MOV 0x25,A
63: Write_word(0,4,j);
C:0x296C FB MOV R3,A
C:0x296D 7D04 MOV R5,#0x04
C:0x296F E4 CLR A
C:0x2970 FF MOV R7,A
C:0x2971 022B2E LJMP Write_word(C:2B2E)
//**************************************************
最后改成這樣,終于正確了。
59 uu=&TIANGAN;
60 j=*uu+169;
61 Write_word(0,4,j);
上面三句匯編的結(jié)果:
59: uu=&TIANGAN;
C:0x2966 781C MOV R0,#TIANGAN(0x1C)
60: j=*uu+169;
C:0x2968 E6 MOV A,@R0
C:0x2969 24A9 ADD A,#0xA9
C:0x296B F525 MOV 0x25,A
61: Write_word(0,4,j);
C:0x296D FB MOV R3,A
C:0x296E 7D04 MOV R5,#0x04
C:0x2970 E4 CLR A
C:0x2971 FF MOV R7,A
C:0x2972 022B2F LJMP Write_word(C:2B2F)
不知道各位高手遇到過(guò)這種情況沒(méi)有?如遇到過(guò)又是怎樣處理的?
[此貼子已經(jīng)被作者于2013-4-15 21:07:15編輯過(guò)]
|