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

2020-01-18 18:49发布

最近在看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是怎么算出来的?类似的还有好多看不明白。我是汇编的小白,能大虾解一下惑,非常感激。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
4条回答
teddeng
1楼-- · 2020-01-18 22:26
就是跳到 mov        Rcp_Prev_Edge_L, Temp1。
jb  ACC.Rcp_In, ($+5)  这句本身3字节,AJMP  2字节,一起5字节。
lusson
2楼-- · 2020-01-19 03:50
相对地址跳转。。
sunicecream
3楼-- · 2020-01-19 07:02
teddeng 发表于 2015-12-21 02:25
就是跳到 mov        Rcp_Prev_Edge_L, Temp1。
jb  ACC.Rcp_In, ($+5)  这句本身3字节,AJMP  2字节,一起 ...

这样的呀,我一直理解是判断的下一条语句开始地址算起的呢。谢谢了
hefanghua
4楼-- · 2020-01-19 07:47
这跟51单片机有什么关系?

一周热门 更多>