C語言的語法,有關macro巨集
|
||||
---|---|---|---|---|
高級會員
|
請問為什麼在我使用macro巨集時
例如我利用Swapf(f,dest,access),如下: bcd_temp=BCD[i]&0x0f; id[j++]=bcd_temp|0x30; Swapf(bcd_temp,1,1); bcd_temp=BCD[i]&0x0f; id[j++]=bcd_temp|0x30; bcd_temp 的位址為0425h 我本來是想將bcd_temp中的高低位址做交換,也就是說將0x425h中的內容值高低位址交換,但是當我執行到這個巨集時,實際交換的暫存器卻為0x007h。請問是什麼原因造成這個問題呢? 我在實際觀察program memory中也確實看到他所生成的程式為 movlb 0x00 swapf bcd_temp,F,bank 如果我將marco中的 #define Swapf(f,dest,access) {_asm movlb f swapf f,dest,access _endasm } 改為 #define Swapf(f,dest,access) {_asm movlw f swapf f,dest,access _endasm } 可以在program memory中觀察到他所生成的程式為 movlw 0x07 swapf bcd_temp,F,bank 所以就算所生成的程式為 movlb 0x04 swapf bcd_temp,F,bank 這樣在實際的暫存器位址也不是0x425H而是0x407H。 請問為什麼會有這樣的情形??? 我想應該是我使用方式錯誤了,可以請教正確的使用方式嗎?
發表於: 2007/1/31 16:42
|
|||
|