4

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

你如何查询段寄存器?!

谢谢

4

2 回答 2

7

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

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

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

于 2009-07-03T16:41:21.323 回答
4

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

假设 文件顶部的任何内容都不应删除注册错误检查。

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

于 2009-07-02T20:42:19.883 回答