如何理解下面的代码片段

问题描述

针对上下文:由于存在在线课程,一些印度大学的计算机课程已减少为教师,他们只是给我们提供代码并期望我们死记硬背地学习。

程序将计算给定数组中+ 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的作用。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...