assembly 关键字“ret“在x86汇编代码中有什么作用

jvidinwx  于 2022-12-04  发布在  其他
关注(0)|答案(1)|浏览(174)

我是一个x86汇编代码的新手,在我正在学习的一门课程中,我偶然发现了一段代码。这个过程的主要目的是从一个数组的开头开始循环,并返回第一个非零元素的值。我的问题是,为什么我们不需要在“notfound“指令中再加一个“ret“,或者像在“found“指令中那样跳转到“quit“呢?是不是因为eax总是包含我们想要从过程中得到的返回值?据我所知,eax只是一个累加器寄存器,对吗?

.386
.model flat

.data
;data labels does not have column
intArray SWORD 0,0,0,0,1,3,0,-34,-56,7,8

.code
main    proc
        mov ebx,OFFSET intArray
        mov ecx,LENGTHOF intArray

;instruction labels have columns
L1:
        cmp WORD PTR[ebx],0
        jnz found
        add ebx,2
        loop L1
        jmp notfound

found:
        movsx eax,WORD  PTR[ebx]
        jmp quit

notfound:
        mov eax,999999

quit:
        ret

main    endp
end     main

难道我们不应该在“notfound“指令中添加一个“ret“或跳转到“quit“吗?

  • 谢谢-谢谢
tcbh2hod

tcbh2hod1#

mov eax,999999语句(notfound标签的结尾)之后,它将转到quit标签。由于ret指令在mov eax,999999指令之后,因此不需要jmp
notfound标签之前存在jmp quit的原因是因为ret指令不是found标签结束的后续指令。
换句话说,当您在notfoundquit标签之间添加新内容时,必须添加一个jmp quit

相关问题