当前位置: 代码迷 >> 汇编语言 >> 想问一个windows汇编中标号的使用有关问题
  详细解决方案

想问一个windows汇编中标号的使用有关问题

热度:3577   发布时间:2013-02-26 00:00:00.0
想问一个windows汇编中标号的使用问题:
我现在在做一段S3睡眠、唤醒的代码。有一个这样的子程序:
_MyResume PROC NEAR PUBLIC
  cli
  jump wakeup
pmode_cr0:
  dd 00000000h
pmode_entry:
  dd 00000000h

wakeup:
  cld
  ...;some segment 初始化
   
  mov eax, pmode_cr0
  mov cr0, eax
  ...
_MyResume ENDP

问题出在 "mov eax, pmode_cr0".睡眠之前我从寄存器里获取cr0的值并保存到_MyResume对应的内存的此变量的地址。比方来说,pmode_cr0的地址为0x80227b04,而地址0x80227b04实际对应的值为0x1。我用硬件调式工具查看_MyResume对应的伪代码,发现"mov eax, pmode_cr0"翻译为"mov eax, 0x80227b04h",而不是"mov eax, [0x80227b04]".这显然不到我的需要。

我在linux上试了下,同样的代码是可行的。AT&T汇编与intel汇编有这么大的差异吗?
这2天查看了好多书和网上的帖子,没有找到解决的办法。这个代码因为是为S3做的,而且此段是在实模式下执行的。睡眠之前需要在保护模式保存一些值希望在_MyResume里可以restore到寄存器。 如果定义到普通的.data段,我在实模式c环境下没法访问并写。

各位给出出主意吧,谢谢了!



------解决方案--------------------------------------------------------
探讨

我试过mov eax, pmode_cr0,结果依然相当于"mov eax, 0x80227b04h"
您这个是不是大概是:
mov ebx,pmode_cr0
mov eax,[ebx]
请问用ebx做过渡有啥用呢?等后天去了马上试一下。谢谢

------解决方案--------------------------------------------------------
mov eax,ds:[0x80227b04]
  相关解决方案