我不理解此代码中的[esi]操作数,或者不解释循环中发生了什么?

时间:2019-10-09 20:18:09

标签: assembly x86

我正在练习实验室,并且继续在Visual Studio中运行此代码。我需要解释代码中正在发生的事情,并解释循环如何工作以及使循环停止的原因。但是,

A)我不完全了解buf [esi]命令的作用
B)我不明白为什么ECX每次循环都会掉下来。

我确实知道LENGTHOF buf在主proc中创建的值为4,这是因为SBYTE标签具有4个元素的buf数组。

我也了解xor eax, eax将eax寄存器清零,并且esimov清零。

主要是我不明白的循环。

我已经尝试在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时循环中断。

0 个答案:

没有答案