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

vieri32_inter 2012-03-31 05:47:24
我现在在做一段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环境下没法访问并写。

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

...全文
143 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
vieri32_inter 2012-04-06
  • 打赏
  • 举报
回复
我这个数据在cs段,如果0x80227b04是偏移的话您这个方式倒也适用。谢谢

[Quote=引用 6 楼 的回复:]

mov eax,ds:[0x80227b04]
[/Quote]
vieri32_inter 2012-04-06
  • 打赏
  • 举报
回复
您这个意见不错
谢谢

[Quote=引用 5 楼 的回复:]

引用 3 楼 的回复:

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

编译时候 取[ebx]里的地址的值
mov ebx,pmode_cr0 因为你已经确定这样做得到的是pm……
[/Quote]
Lactoferrin 2012-04-02
  • 打赏
  • 举报
回复
mov eax,ds:[0x80227b04]
屌絲來襲 2012-04-02
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 的回复:]

我试过mov eax, pmode_cr0,结果依然相当于"mov eax, 0x80227b04h"
您这个是不是大概是:
mov ebx,pmode_cr0
mov eax,[ebx]
请问用ebx做过渡有啥用呢?等后天去了马上试一下。谢谢
[/Quote]
编译时候 取[ebx]里的地址的值
mov ebx,pmode_cr0 因为你已经确定这样做得到的是pmode_cr0的地址,所以用[ebx]取出地址里的值给eax
就是你想要的mov eax,[0x80227b04]这种情况
Lactoferrin 2012-04-02
  • 打赏
  • 举报
回复
要这样
pmode_cr0 dd 00000000h

masm的语法感觉很乱,at&t的就清楚很多
vieri32_inter 2012-04-02
  • 打赏
  • 举报
回复
我试过mov eax, pmode_cr0,结果依然相当于"mov eax, 0x80227b04h"
您这个是不是大概是:
mov ebx,pmode_cr0
mov eax,[ebx]
请问用ebx做过渡有啥用呢?等后天去了马上试一下。谢谢
屌絲來襲 2012-03-31
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]

mov ebx,0x80227b0
mov eax,[ebx]
[/Quote]
mov ebx,0x80227b04
mov eax,[ebx]

少复制个4...
屌絲來襲 2012-03-31
  • 打赏
  • 举报
回复
mov ebx,0x80227b0
mov eax,[ebx]

21,458

社区成员

发帖
与我相关
我的任务
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
  • 汇编语言
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧