我正在练习实验室,并且继续在Visual Studio中运行此代码。我需要解释代码中正在发生的事情,并解释循环如何工作以及使循环停止的原因。但是,
A)我不完全了解buf [esi]命令的作用
B)我不明白为什么ECX
每次循环都会掉下来。
我确实知道LENGTHOF buf
在主proc中创建的值为4,这是因为SBYTE
标签具有4个元素的buf
数组。
我也了解xor eax, eax
将eax寄存器清零,并且esi
被mov
清零。
主要是我不明白的循环。
我已经尝试在Visual Studio中调试[step into]命令,并一遍又一遍地观看它,并输入了不同的值,但是我根本不理解这种模式。
我知道每次运行它时,从buf
加载的值将沿着数组从0、1、2、3开始。与源代码行的顺序相同。
.386
.model flat, stdcall
.stack 4096
ExitProcess PROTO, dwExitCode: DWORD
.data
; define your variables here
buf SBYTE 0,1,2,3
.code
main PROC
mov ecx, LENGTHOF buf
mov esi, 0
xor eax, eax
L1:
mov al, buf[esi]
and al, 80h
jz NO
neg buf[esi]
NO:
inc esi
loop L1
main ENDP
END main
没有预期的答案。我不需要答案,因为我只能在VS中运行它,我无法解释发生了什么。
我知道ECX = 0时循环中断。