移植到51单片机中汇编的一个小问题
<P><STRONG><FONT size=6><SPAN class=bold><SPAN class=smalltxt>移植到51单片机中汇编的一个小问题</SPAN></SPAN><BR></FONT></STRONG><BR><SPAN></P><P>save_stack:<BR> INC DPTR<BR> INC R0<BR> MOV A,@R0<BR> MOVX @DPTR,A<BR> DJNZ R5,save_stack<BR> <BR> ;保存仿真堆栈指针?C_XBP<BR> INC DPTR<BR> MOV A,?C_XBP ;?C_XBP仿真堆栈指针高8位<BR> MOVX @DPTR,A<BR> INC DPTR<BR> MOV A,?C_XBP+1 ;?C_XBP仿真堆栈指针低8位<BR> MOVX @DPTR,A <BR> <BR> ;调用用户程序<BR> LCALL _?OSTaskSwHook</P>
<P> </P>
<P> ;OSTCBCur = OSTCBHighRdy<BR> MOV R0<FONT color=red>,#OSTCBCur<BR></FONT> MOV R1<FONT color=red>,#OSTCBHighRdy<BR></FONT> MOV A,@R1<BR> MOV @R0,A<BR> INC R0<BR> INC R1<BR> MOV A,@R1<BR> MOV @R0,A<BR> INC R0<BR> INC R1<BR> MOV A,@R1<BR> MOV @R0,A<BR> <BR> MOV R0<FONT color=magenta>,#OSPrioCur<BR></FONT> MOV R1<FONT color=magenta>,#OSPrioHighRdy<BR></FONT> MOV A,@R1<BR> MOV @R0,A<BR> <BR> LJMP OSCtxSw_in</P>
<P> </P>
<P>这是一段移植中的汇编指令,红色的是函数名,粉红色的是结构体名。</P>
<P>第一个问题是:<FONT color=darkorchid>C_XBP仿真堆栈指针</FONT>的作用是什么?</P>
<P>第二个问题是:前面我看到的代码中有 #LOW (OSTCBCur) 这句,说明函数名和结构体名肯定不是8位的。那这里怎么不用LOW这个宏定义了呢?</P>
<P>而且这样赋值给8位R寄存器,数据位数对应不上啊。</P>
<P>各位大侠,这样理解有没有道理啊。得怎么解释啊。</P></SPAN>
[ 本帖最后由 sydyh43 于 2012-7-18 21:41 编辑 ] 不懂,表示关注!
至于说为什么不用宏定义。我想这个可以根据个人爱好吧,也可能不用宏移植性更好吧 结构体名是大于8位的,赋值给一个8位的寄存器,数据不就溢出了吗
页:
[1]