想问一个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环境下没法访问并写。
各位给出出主意吧,谢谢了!