汇编中SetWindowText 函数的第一个参数不能是eax吗

registervalueoverwrittenbyINVOKE... register value overwritten by INVOKE 展开
 我来答
vsbat
推荐于2016-10-24 · TA获得超过241个赞
知道小有建树答主
回答量:171
采纳率:0%
帮助的人:174万
展开全部
因为 invoke 指令中如果你使用了 addr 即 取地址伪操作符
且 addr 的对象是个局部变量 的话 编译器会使用寄存器eax。比如
local @szString
invoke SetWindowText,eax,addr @szString
这里 "addr @szString"
会被翻译为:
lea eax,@szString
push eax
此时 eax 的值已被更改 你不能再用它作为此函数的 参数了
比如 这里 的窗口句柄 `~~~~
解决方法:
mov ebx,eax
然后 以 ebx 作为参数
雨柠1328
2016-05-26 · TA获得超过229个赞
知道答主
回答量:34
采纳率:0%
帮助的人:7.2万
展开全部
因为 invoke 指令中如果你使用了 addr 即 取地址伪操作符
且 addr 的对象是个局部变量 的话 编译器会使用寄存器eax。比如
local @szString
invoke SetWindowText,eax,addr @szString
这里 "addr @szString"
会被翻译为:
lea eax,@szString
push eax
此时 eax 的值已被更改 你不能再用它作为此函数的 参数了
比如 这里 的窗口句柄 `~~~~
解决方法:
mov ebx,eax
然后 以 ebx 作为参数
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
名扬爱夏
2016-04-27
知道答主
回答量:8
采纳率:0%
帮助的人:8655
展开全部
因为 invoke 指令中如果你使用了 addr 即 取地址伪操作符
且 addr 的对象是个局部变量 的话 编译器会使用寄存器eax。比如
local @szString
invoke SetWindowText,eax,addr @szString
这里 "addr @szString"
会被翻译为:
lea eax,@szString
push eax
此时 eax 的值已被更改 你不能再用它作为此函数的 参数了
比如 这里 的窗口句柄 `~~~~
解决方法:
mov ebx,eax
然后 以 ebx 作为参数
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
云虎y4
2016-05-19
知道答主
回答量:3
采纳率:0%
帮助的人:3293
展开全部
bhgahjazjhsqjhzsqhjbzjjkaznl, wkzn,z nnzwn k.z wmk.zwm.
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
梦醒时分951
2016-05-11
知道答主
回答量:4
采纳率:0%
帮助的人:4697
展开全部
鹅鹅鹅鹅鹅鹅鹅鹅鹅鹅鹅鹅饿鹅鹅鹅饿谔谔呃呃呃呃呃呃呃呃呃鹅鹅鹅呃呃呃恩恩呃呃呃呃呃呃鹅鹅鹅呃呃呃恩恩
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 2条折叠回答
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式