如何理解下面的代码片段
How to understand the snippet of code below
对于上下文:由于在线 类,一些印度大学的计算机 类 已经沦为老师只给我们代码并期望我们死记硬背。
该程序是计算给定数组中 +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 指令的循环吗?
Shouldn't some sort of loop with a DEC ECX and JE 0 instructions be there as well?
这几乎就是 loop
instruction 所做的。
对于上下文:由于在线 类,一些印度大学的计算机 类 已经沦为老师只给我们代码并期望我们死记硬背。
该程序是计算给定数组中 +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 指令的循环吗?
Shouldn't some sort of loop with a DEC ECX and JE 0 instructions be there as well?
这几乎就是 loop
instruction 所做的。