x86 LODSB STOSB 循环说明



我遇到了这些说明:

...
...
get:
lodsb  
xor eax,ebx 
stosb  
loop get 
push esp 
pop esi 
int3 

我看到这会加载一个字节执行异或并将字节存储在循环中,它会这样做直到 ECX = 0。我的问题是程序如何知道继续push esp指令?这仅仅是循环块语法所暗示的吗?

loop指令的名称可能有点误导。 你可能会相信它所做的只是跳到给定的标签,但想想看:如果它只是一个跳跃,那么loop和所有其他jmp指令之间有什么区别?

事情的真相是,loop不仅仅是一次跳跃。 它执行以下两项操作:

  1. 它递减 ecx 寄存器。
  2. 如果递减的结果不为零,则跳转到给定的标签。

因此,如您所见,它非常适合循环,这就是为什么它被称为 loop .

最新更新