sunicecream 发表于 2015-12-21 02:01:43

求教一个51汇编程序中关于$+n跳转的疑问

最近在看BLHELI的汇编程序,有些疑问不得解,睡不着呀。问题是这样的:
下边这段程序
jb        ACC.Rcp_In, ($+5)                          ; Is it high?
        ajmp        pca_int_fail_minimum                    ;                                             2字节指令
        mov        Rcp_Prev_Edge_L, Temp1       ; Temp1,Temp2分别为R0,R1。2字节指令Rcp_Prev_Edge_L为一个内存地址
        mov        Rcp_Prev_Edge_H, Temp2      ;                                             2字节指令Rcp_Prev_Edge_H 为一个内存地址
        ajmp        pca_int_exit                           ; Exit                                       2字节指令

pca_int_fail_minimum:
        ; Prepare for next interrupt
        Rcp_Int_First                                        ; Set interrupt trig to first again
        Rcp_Clear_Int_Flag                                 ; Clear interrupt flag
        clr        Flags2.RCP_EDGE_NO                        ; Set first edge flag
        jnb        Flags2.RCP_PPM, ($+5)                ; If flag is not set (PWM) - branch

上列程序段中的第一句jb        ACC.Rcp_In, ($+5),当判断条件为真时会跳转到哪里?查手册的话,move direct Rn ,ajmp addrll都是2字节指令。我的疑惑是这个5是怎么算出来的?类似的还有好多看不明白。我是汇编的小白,能大虾解一下惑,非常感激。

teddeng 发表于 2015-12-21 02:25:38

就是跳到 mov      Rcp_Prev_Edge_L, Temp1。
jbACC.Rcp_In, ($+5)这句本身3字节,AJMP2字节,一起5字节。

lusson 发表于 2015-12-21 08:44:18

相对地址跳转。。

sunicecream 发表于 2015-12-21 09:44:09

teddeng 发表于 2015-12-21 02:25
就是跳到 mov      Rcp_Prev_Edge_L, Temp1。
jbACC.Rcp_In, ($+5)这句本身3字节,AJMP2字节,一起 ...

这样的呀,我一直理解是判断的下一条语句开始地址算起的呢。谢谢了

hefanghua 发表于 2015-12-21 10:16:34

这跟51单片机有什么关系?
页: [1]
查看完整版本: 求教一个51汇编程序中关于$+n跳转的疑问