访问段寄存器 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 的寄存器 edx::eax 中的 mul 和内存分配