鱼c win32汇编 第三章 代码结构 续

API函数返回值的类型对汇编程序来说只有一种类型dword,返回值永远放eax寄存器,如果eax放不下这个返回值,把这个返回值内存地址放进eax,程序员说法就是指针吧!

If Unicode
MessageBox equ < MessageBoxW > ; Unicode类型
Else
MessageBox equ < MessageBoxA> ; ANSI类型
遇到和MASM的关键字同名的时候,用<>。比如include

YY  Proc 
Local  @A:dword ,@B: word
Local  @Cbyte

Mov  eax,@A
Mov  ax,@A
Mov  al,@A
Ret

YY  endp

变量类型的转换与使用
Mov ax,dword ptr A
Mov ax,word ptr A
把A的类型转换成dword,就是类型加ptr
注意:前面的内容添0,要符合寄存器容量
变量的大小与数量
Sizeof查变量大小
Lengthof查变量个数(变量数组个数)


子程序的定义
子程序开始名proc 属性:距离 语言类型 可视区域 uses寄存器列表 参数类型

距离:内存模式
语言类型:参数的使用方式和堆栈平衡方式是stdcall,c,syscall,之类的,默认.model定义的值
可视区域:PRIVATE只对子程序模块可见,PUBLIC对所有模块可见,EXPORT导出函数,默认PUBLIC
uses寄存器列表: 编译器在子程序指令开始前自动安排push寄存器,并在ret后自动pop,开头用pushad和结尾popad,比较灵活。
参数和类型: 定义参数名的时候不能跟全局变量和子程序中局部变量重名。类型win32中的参数类型只有32位一种,可以省略

子程序结束名endp


用invoke调用子程序
用invoke调用子程序报错 err0r a2006:undefined symbol :子程序名
意思是说,invoke不知道子程序的定义所以无法进行参数的检测,
处理方法:在子程序头部用proto

-
VARARG:参数个数可以不确定,
数据结构的引用
Mov eax , stWndClass.IpfnWndProc:把IpfnWndProc字段的值放入eax中
esi寄存器作指针寻址
Mov esi ,offt stWndClass
使用esi寄存器作指针寻址
Move ax,[esi+WndClass.IpfnWndProc]=mov eax,[esi+4]
粗心大意的用法
Move ax,[esi+stWndClass.IpfnWndProc]=mov eax,[esi+403004h]

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值