注册 登录
编程论坛 汇编论坛

mov 指令不能数据结构指针传送,结构的成员

asd577586785 发布于 2014-02-04 11:44, 788 次点击
LOCAL    @Print[100]:byte
LOCAL    @Pct:CHOOSEFONT
LOCAL    @Log:LOGFONT

               mov    @Pct.lpLogFont,addr  @Log ;这条语句会报错,但是我把@Log定义为全局变量就不会报错了。这是为什么呢?为什么不能把用局部变量定义的数据结构@Log的地址传送给结构成员??

[ 本帖最后由 asd577586785 于 2014-2-4 11:47 编辑 ]
4 回复
#2
zklhp2014-02-04 11:56
因为addr是个伪指令 本质上是类似 ebp+n 的形式 而这种表达式的求值只能在运行的时候进行 addr又没高级到用lea 所以失败

而全局的在编译出来之后就是确定的数了 相对于mov mem, imm 立即数送到内存变量 这种方式是允许的 所以成功

多说一句 宏汇编 毕竟是比较低级的 说到底还是要转换为汇编指令的 编译器不知道怎么转 只能报错
#3
asd5775867852014-02-05 11:58
回复 2楼 zklhp
但是 罗云彬的win32汇编语言程序设计中讲过。addr 局部变量,是被编译成 lea,eax,局部变量 的形式。 所以应该不存在你说的这个问题。


版主我这个是写的windows程序,是用汇编写的。我在看罗云彬的windows程序开发, 本来是想学C的windows程序开发, 但没找到好书! 在网上看了几本C的windows开发电子书,都觉得没老罗这本好,
#4
zklhp2014-02-05 14:32
以下是引用asd577586785在2014-2-5 11:58:33的发言:

但是 罗云彬的win32汇编语言程序设计中讲过。addr 局部变量,是被编译成 lea,eax,局部变量 的形式。 所以应该不存在你说的这个问题。
 
 
版主我这个是写的windows程序,是用汇编写的。我在看罗云彬的windows程序开发, 本来是想学C的windows程序开发, 但没找到好书! 在网上看了几本C的windows开发电子书,都觉得没老罗这本好,

看书不专心 你怎么不看看罗云彬后面又写了什么

只有本站会员才能查看附件,请 登录


不论是用C语言开发Windows程序也好 用汇编开发Windows程序也好 实际开发中用的很少 因为效率太低 但这是一种学习Windows编程的方法 用C语言开发Windows程序有 Windows程序设计 Aogo网站上还有把里面的例子程序转换为汇编的版本

但说到底 这种开发实际用处不大 你要这么学可能连工作都找不到 别怪我没告诉你

[ 本帖最后由 zklhp 于 2014-2-5 14:34 编辑 ]
#5
asd5775867852014-02-05 17:42
回复 4楼 zklhp
版主教训得是!!! 以后看书一定会用心再用心!! 版主大人多虑啦,和我同年的还在上高中我就已经上班了啦!!!
1