Assembly 在这个程序中,JMP如何返回给调用者?

Assembly 在这个程序中,JMP如何返回给调用者?,assembly,x86,Assembly,X86,for循环的一部分 ; ....... jmp SHORT $LN3@clearArray ; enter the loop body $LN2@clearArray: ; incrementation mov eax, DWORD PTR _p$2534[ebp] add eax, 4 mov DWORD PTR _p$2534[ebp]

for循环的一部分

    ; .......

    jmp SHORT $LN3@clearArray                ; enter the loop body

$LN2@clearArray:                                 ; incrementation
    mov eax, DWORD PTR _p$2534[ebp]          
    add eax, 4
    mov DWORD PTR _p$2534[ebp], eax

$LN3@clearArray:
    mov eax, DWORD PTR _p$2534[ebp]          ; check conditions
    cmp eax, DWORD PTR _length$[ebp]
    jae SHORT $LN4@clearArray                ; when loop condition fails...

; 6    :    {
; 7    :        *p = 0;

    mov eax, DWORD PTR _p$2534[ebp]          ; loop body
    mov DWORD PTR [eax], 0

; 8    :    }

    jmp SHORT $LN2@clearArray

$LN4@clearArray:

; ........
完成$LN2后,如何返回到$LN3? 这是由Visual Studio 2010 C++汇编程序输出生成的。p>
谢谢。

一条
jmp
指令就像一条
goto
语句。它将控制权转移到一个新位置,并在该位置继续执行;您不会从
jmp
返回(尽管您可以发出另一个
jmp


在这个特定的示例中,$LN2处的代码会变成$LN3,因此每次执行$LN2时,$LN3都会执行。$LN3处的代码正在比较循环计数器,以查看它是否已达到最大值。
cmp
(“比较”)和
jae
(“跳转高于或等于”)指令执行比较,然后在满足条件(即计数器等于或大于长度)时退出循环。换句话说,如果循环计数器jae不执行任何操作,并进入下一条指令。但是,如果计数器>=length,则跳转到退出循环的$LN4。

一条
jmp
指令的作用类似于一条
goto
语句。它将控制权转移到一个新位置,并在该位置继续执行;您不会从
jmp
返回(尽管您可以发出另一个
jmp


在这个特定的示例中,$LN2处的代码会变成$LN3,因此每次执行$LN2时,$LN3都会执行。$LN3处的代码正在比较循环计数器,以查看它是否已达到最大值。
cmp
(“比较”)和
jae
(“跳转高于或等于”)指令执行比较,然后在满足条件(即计数器等于或大于长度)时退出循环。换句话说,如果循环计数器jae不执行任何操作,并进入下一条指令。但是,如果计数器>=长度,则跳转到退出循环的$LN4。

Errrr。。。你什么意思,怎么说?控制流只是从
mov-DWORD-PTR…
指令继续到下一条指令,即
mov-eax,DWORD-PTR


还是我误解了你的问题

呃。。。你什么意思,怎么说?控制流只是从
mov-DWORD-PTR…
指令继续到下一条指令,即
mov-eax,DWORD-PTR


还是我误解了你的问题

多谢各位。我想cbranch明白了。我主要对jmp指令感兴趣。我可能把自己搞糊涂了。谢谢,谢谢。我想cbranch明白了。我主要对jmp指令感兴趣。我可能把自己搞糊涂了。谢谢,非常感谢。这很有帮助。:)非常感谢你。这很有帮助。:)如果你对这个帖子投了反对票,最好陈述你的理由,而不是仅仅投反对票然后离开。我讨厌不说明理由就投否决票。对某些人来说,这似乎微不足道,但有时人们会碰巧忘记一些事情。这就是stackoverflow存在的原因。有时我会看到非常优秀的工程师在这里发帖,我可以通过查看错误来回答他们,但他们无法回答。那是因为我是一个局外人,我清楚地看待这个问题。所以请不要无缘无故地否决投票。这显然是无知的。如何提高我的提问质量?通过给我反馈。如果你对这个帖子投了反对票,最好陈述你的理由,而不是仅仅投反对票然后离开。我讨厌不说明理由就投否决票。对某些人来说,这似乎微不足道,但有时人们会碰巧忘记一些事情。这就是stackoverflow存在的原因。有时我会看到非常优秀的工程师在这里发帖,我可以通过查看错误来回答他们,但他们无法回答。那是因为我是一个局外人,我清楚地看待这个问题。所以请不要无缘无故地否决投票。这显然是无知的。如何提高我的提问质量?通过给我反馈。