访问段寄存器 MASM

Posted

技术标签:

【中文标题】访问段寄存器 MASM【英文标题】:Accessing Segment Registers MASM 【发布时间】:2009-07-02 12:25:24 【问题描述】:

我正在尝试查询位于进程环境块中的值,该值由 FS 段寄存器指向。尝试编译包含 fs:[0] 段的代码会导致错误(错误 A2108:使用寄存器假定为 ERROR)。

如何查询段寄存器?!

谢谢

【问题讨论】:

【参考方案1】:

默认情况下,MASM 假定对段寄存器的任何访问都是错误的(通常是这样)。您需要使用ASSUME FS:NOTHING 重新定义FS 寄存器的假设。 您可以将此指令放在文件的顶部,或者您可以暂时“重新假定”FS 寄存器。示例:

ASSUME FS:NOTHING
MOV EAX, FS:[0]
ASSUME FS:ERROR

这样你就只为这条指令关闭错误检查。 ASSUME 指令只通知汇编器要做什么,它们不会导致任何代码被发出。

【讨论】:

【参考方案2】:

根据error A2108 的 MSDN 文档,您需要在代码中添加一个假设指令。

ASSUME NOTHING 文件顶部的应该删除注册错误检查。

我认为这是因为对于大多数代码,使用段寄存器会导致不正确的行为。

【讨论】:

以上是关于访问段寄存器 MASM的主要内容,如果未能解决你的问题,请参考以下文章

在 MASM 中访问数组

将寄存器用作 DB (MASM) 的参数

如何将寄存器放入 MASM 中的数组索引中?

带 masm 的寄存器 edx::eax 中的 mul 和内存分配

带 masm 的寄存器 edx::eax 中的 mul 和内存分配

如何将参数传递给 MASM64 中的程序?