问题描述
针对上下文:由于存在在线课程,一些印度大学的计算机课程已减少为教师,他们只是给我们提供代码并期望我们死记硬背地学习。
程序将计算给定数组中+ ve和-ve的数量。 The entire code is here。
我的问题来自第45至59行(如下所示)
mov esi,arr
mov ecx,arr_size ;Array counter i.e. 6
mov ebx,0; ;counter for +ve nos
mov edx,0; ;counter for -ve nos.
next_num:
mov eax,[esi] ; take no. in RAX
rcl eax,1 ; rotate left 1 bit to check for sign bit
jc negative
positive:
inc ebx ; no carry,so no. is +ve
jmp next
negative:
inc edx ; carry,so no. is -ve
next:
add esi,4 ; 32 bit nos i.e. 4 bytes
loop next_num
在上面的代码中,据我所知,我将数组的起始位置存储在ESI寄存器中,并扫描每个元素并检查其是否为正值
但是,如何知道何时到达数组末尾?
代码正在维护ECX寄存器,但未使用它。那为什么为什么不连续运行呢?
是否还存在带有DEC ECX和JE 0指令的某种循环?
解决方法
是否还存在带有DEC ECX和JE 0指令的某种循环?
这几乎就是loop
instruction的作用。