gpt4 book ai didi

assembly - Assembly (MASM) 中的 Push 操作是否使寄存器的新值与推送的值相同?

转载 作者:行者123 更新时间:2023-12-04 20:00:41 35 4
gpt4 key购买 nike

我目前正在为我的类(class)开发 Assembly 中的嵌套循环。我想知道的是,如果我推送 ecx,我是否需要将另一个值移动到 ecx 中,或者当前值是否与推送的 ecx 具有相同的信息?

例子:

ArraySum PROC

push esi ; save esi, ecx
push ecx
mov eax, 0 ; set the sum to zero

L1:
add eax, [esi] ; add each integer to sum
add esi, TYPE DWORD ; point to next integer
loop L1 ; repeat for array size

pop ecx ; restore ecx and esi to original values
pop esi
ret ; sum is eax

ArraySum ENDP

当我再次引用 ecx 时,它是否包含原始值 5,即使该值已被压入堆栈?可以说,使用与上面相同的代码,我添加了一个循环。计数器是从 5 开始还是我需要重新初始化 ecx?

我想这可能与我脑海中的措辞不完全一样。我在教科书中使用它,它确实有效。我想我的问题是,如果我们推送它并且在推送之后没有将另一个值移动到 ecx 中,为什么它会使用 ecx 的原始值?

附言我知道我使用的代码示例不是嵌套循环,但这个函数在另一个循环中。并不是说它真的对我的问题有任何影响:)

最佳答案

Push 读取寄存器的内容并将其压入堆栈,它制作一个副本而 ecx 保持不变。 Ecx 保留推送前的内容。 Pop 确实修改了寄存器 ecx,获取堆栈中的内容并将其写入寄存器。

关于assembly - Assembly (MASM) 中的 Push 操作是否使寄存器的新值与推送的值相同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8307108/

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