我是一个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“吗?
- 谢谢-谢谢
1条答案
按热度按时间tcbh2hod1#
在
mov eax,999999
语句(notfound
标签的结尾)之后,它将转到quit
标签。由于ret
指令在mov eax,999999
指令之后,因此不需要jmp
。在
notfound
标签之前存在jmp quit
的原因是因为ret
指令不是found
标签结束的后续指令。换句话说,当您在
notfound
和quit
标签之间添加新内容时,必须添加一个jmp quit
。