How do I access a local variable in assembly?
I have used the SRC to determine how the compiler created the variable. it changes it's name from variable to variable?nnn where nnn is a number.
How do I determine what nnn is? (other than looking at the .src file) can I access the variable using the original label name?
If I use the variable:nnn , nnn will occasionally change and ten I get errors!
Help
here is a Sample:
void ProcessSerialSwitch() { data unsigned char i; data unsigned char RcvFIFOEmptyFlagLo; data unsigned char RcvFIFOEmptyFlagHi; // char code Mask[8]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80}; /* MemSwitchReg(); RcvFIFOEmptyFlagLo=XBYTE[RegAddrReceiveFIFOEmpty]; RcvFIFOEmptyFlagHi=XBYTE[RegAddrReceiveFIFOEmpty+1]; MemSwitchRam(); */ RcvFIFOEmptyFlagLo=0xFF; RcvFIFOEmptyFlagHi=0xFF; //对RcvFIFOEmptyFlagLo,RcvFIFOEmptyFlagHiæ¯ä¸€bit进行检测,若为1,则对åº"䏲壿œ‰æ•°æ® //ç"±äºŽCè¯è¨€å¯¹ä½æ"作效率低,ä¸"æ¤å‡½æ•°ç»å¸¸è¢«è°ƒç"¨ï¼Œæ"¹ä¸ºæ±‡ç¼– //for (i=0;i<SerialCount;i++) { // if (i<8) {if (RcvFIFOEmptyFlagLo&Mask[i]) SerialSwitchReadChar(i);} // else if (RcvFIFOEmptyFlagHi&Mask[i-8]) SerialSwitchReadChar(i); //} ACC=RcvFIFOEmptyFlagLo; #pragma asm checklo: //MOV A,RcvFIFOEmptyFlagLo JZ checkhi // CLR A #pragma endasm i=0; #pragma asm // MOV i,A testlo: #pragma endasm ACC=RcvFIFOEmptyFlagLo; #pragma asm // MOV A,RcvFIFOEmptyFlagLo JZ checkhi lblrorlo: CLR C RRC A JC doreceivelo JZ checkhi // INC i #pragma endasm i++; #pragma asm JMP lblrorlo doreceivelo: // MOV RcvFIFOEmptyFlagLo, A #pragma endasm RcvFIFOEmptyFlagLo=ACC; SerialSwitchReadChar(i); //è¯»å–æ•°æ® i++; ACC=RcvFIFOEmptyFlagLo; #pragma asm //inc i //MOV A, RcvFIFOEmptyFlagLo JNZ lblrorlo checkhi: #pragma endasm i=8; ACC=RcvFIFOEmptyFlagHi; #pragma asm // MOV i,8 // testhi: //MOV A, RcvFIFOEmptyFlagHi JZ returnintr lblrorhi: CLR C RRC A JC doreceivehi JZ returnintr #pragma endasm i++; #pragma asm //INC i JMP lblrorhi doreceivehi: // MOV RcvFIFOEmptyFlagHi, A #pragma endasm RcvFIFOEmptyFlagHi=ACC; SerialSwitchReadChar(i); i++; ACC=RcvFIFOEmptyFlagHi; #pragma asm //inc i // MOV A,RcvFIFOEmptyFlagHi JNZ lblrorhi returnintr: RET #pragma endasm }
Forgive my ignorance here, but wouldn't it be ever so much easier to do all that with a little assembly language function?
Forgive my ignorance here
Ignorance of all the OP's carefully-considered reasons that made it not ever so much easier to do all that with a little assembly language function in his particular application...
Surely, he must have had plenty...
;-)
View all questions in Keil forum