assembly - PUSH 操作入栈
问题描述
假设我必须在汇编中执行以下指令:(x86)
**PUSH AL
SUB CL,AL
PUSH CL**
其中 CL=34H, AL=34H
如果是这样,我可以将 CL 推入堆栈吗?如果执行上述指令,ESP会减少吗?会设置零标志吗?
上面的代码CL会变成0,如果是这样,我可以把它压入堆栈吗?这会影响堆栈指针吗?
解决方案
的 和 的值AL
与CL
您是否可以将它们压入堆栈无关。重要的只是堆栈段SS
和堆栈指针SP
(或ESP
或RSP
,取决于操作模式)。如果堆栈指针指向堆栈内部并且寄存器的大小在堆栈指针和堆栈限制之间,那么您可以压入寄存器。
也就是说,x86 中没有实际指令来推送 8 位寄存器。
当你推动时,SP
会减少。您推送的寄存器保持不变。
推荐阅读
- c# - 通过 API 使用 Asp.Net Identity 登录 WinForm 应用程序
- python - 超越自定义异常但打印所有其他异常
- can-bus - 在可以运行 AUTOSAR 应用程序的管理程序上集成像 Erika Enterprise 这样的 RTOS?
- google-cloud-storage - 如何仅访问网络上特定域/主机的谷歌签名 URL?
- mongodb - 如何在 MongoDB 中查找文档、更新文档并插入新文档?
- python - 在实现 StandardScaler 时无法将字符串转换为浮点数:'N'
- reactjs - 继承数据时使用 React-Redux 从 reducer 更改状态而不是根状态
- sql - SQL 使用查询根据排序字段为记录分配排名
- html - 使用自定义按钮时,旧 Webkit 缺少供应商前缀的 CSS 渐变
- c++ - 在 C++ 中缩放浮点值