This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

28335 汇编 SBF 指令 LRETR 指令请教



L00A5DE: MOVW DP,#0x1A0
TBIT @0x01,#0 
SBF L00A647,TC 
MOVU ACC,@0x05 
MOVB XAR4,#0x3 
RPT #0xF 
||SUBCU ACC,@AR4 
CMP AL,@0x04 
SB L00A647,HIS
MOVL XAR4,#0x3125B8
MOVW DP,#0x1C4
MOVL XAR5,*+XAR4[0] 
MOV AL,@0x08

...................

L00A647: MOVW DP
MOV AL,@0x0C
CMPB AL,#0x1 
SBF L00A697,EQ
CMPB AL,#0x2
SBF L00A650,EQ
INC @0x3D 
SB L00A6B6,UNC

L00A6B6:    LRETR   

SBF为条件转移,现在的疑问是那个条件的  if为假我能知道不跳转,执行后面的MOVU ACC,@0x05 之后的所有程序,但是如果if为真就要跳转,那么是不是SBF L00A647,TC  跳转到L00A647,后面的MOVU ACC,@0x05 之后的所有程序都不执行了,即使那个L00A647会调用L00A6B6:    LRETR   返回?还是说执行完跳转指令后,依然回到MOVU ACC,@0x05?

请高手解答下。也就是 if((真){L00A647}else{................}.这个else该包含哪些代码,是不是SBF L00A647,TC 之后的所有?还是说 if (真) {L00A647}   MOVU ACC,@0x05 没有else?

  • 是的如果if(假)那就执行下面的代码,就是:

    SBF L00A697,EQ
    CMPB AL,#0x2
    SBF L00A650,EQ
    INC @0x3D 
    SB L00A6B6,UNC

    L00A6B6:    LRETR   

  • 感谢你的回复,但是,感觉你说的执行代码并不是我说的   if(真)  和  if(假)  的任意一种情况。

    SBF L00A647,TC 这个是我的条件迷惑之处

    也就是 if((真){L00A647}else{................}.这个else该包含哪些代码,是不是SBF L00A647,TC 之后的所有?还是说 if (真) {L00A647}   MOVU ACC,@0x05 没有else?

  • 感谢您的回复,但是您回复的所执行 的代码似乎不是我说的   if(真)   或者是  if(假)  的任意一种情况所要跳转的。

    我的迷惑从SBF L00A647,TC 的条件跳转。

    如果用C表示,就是说是  if  (真){...}  else {..........}还是说只有 if       没有else 。

    也就是 if((真){L00A647}else{................}.这个else该包含哪些代码,是不是SBF L00A647,TC 之后的所有?还是说 if (真) {L00A647}   MOVU ACC,@0x05 没有else,如果没有else 则是说执行完 if(真)中 的代码接着还是会执行 if(真)后面的代码?

  • SBF就是一个跳转语句,表示这个条件成立跳转L00A647,不成立继续执行,你可以理解为继续执行就是else的部分