访问段寄存器 MASM

发布于 2024-07-26 12:59:32 字数 117 浏览 7 评论 0原文

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

如何查询段寄存器?!

谢谢

I'm trying to query the value located in the Process Enviornment Block, pointed to by the FS segment register. Attempting to compile code with the fs:[0] segment included results in an error (error A2108: use of register assumed to ERROR).

How do you query the segment registers?!

Thanks

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

兮子 2024-08-02 12:59:32

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

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

通过这种方式,您可以仅关闭针对该单个指令的错误检查。 ASSUME 指令仅通知汇编器要做什么,它们不会导致发出任何代码。

MASM by default assumes that any access to the segment registers is an error (which usually it is). You need to redefine the assumptions for the FS register using ASSUME FS:NOTHING.
You can place this directive at the top of your file, OR you could "reassume" the FS register temporarily. Example:

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

This way you turn off the error checking only for this single instruction. The ASSUME directives only inform the assembler what to do, they don't cause any code to be emitted.

温柔戏命师 2024-08-02 12:59:32

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

什么都不做
文件顶部应删除寄存器错误检查。

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

According to the MSDN documentation for error A2108, you need to add an assume directive to your code.

ASSUME NOTHING
at the top of your file should remove register error checking.

I presume this is because for most code, using the segment registers results in incorrect behavior.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文