gpt4 book ai didi

assembly - 在 assembly 中进入和离开?

转载 作者:行者123 更新时间:2023-12-03 12:24:46 26 4
gpt4 key购买 nike

我正在阅读《汇编语言的艺术》(Randall Hyde,link to Amazon),并尝试了该书中的控制台应用程序。这是一个使用 Win32 API 函数为自己创建新控制台的程序。该程序包含一个名为 LENSTR 的过程。 ,它将字符串的长度存储在 EBP 中登记。该函数的代码如下:

LENSTR PROC
ENTER 0, 0
PUSH EAX
;----------------------
CLD
MOV EDI, DWORD PTR [EBP+08H]
MOV EBX, EDI
MOV ECX, 100 ; Limit the string length
XOR AL, AL
REPNE SCASB ; Find the 0 character
SUB EDI, EBX ; String length including 0
MOV EBX, EDI

DEC EBX
;----------------------
POP EAX
LEAVE
RET 4
LENSTR ENDP

你能解释一下 enter的用法吗?和 leave这里的命令?

最佳答案

这是该函数的堆栈帧(激活记录)的设置。在内部,它通常看起来像这样:

    push( ebp );         // Save a copy of the old EBP value

mov( esp, ebp ); // Get ptr to base of activation record into EBP

sub( NumVars, esp ); // Allocate storage for local variables.

// ENTER with a non-zero immediate does all 3 of the above things, slowly.
然后当堆栈帧再次被销毁时,你必须按照以下几行做一些事情:
   mov( ebp, esp );    // Deallocate locals and clean up stack.

pop( ebp ); // Restore pointer to caller's activation record.
// LEAVE does the above steps; a RET instruction is separate

ret(); // Return to the caller.
Here是使用 HLA 更好地解释它。尽管在您正在阅读的书中对其进行了很好的解释,因为我也有那本书,而且我已经阅读了解释它的部分。

关于assembly - 在 assembly 中进入和离开?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5858996/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com