《Windows环境下32位汇编语言程序设计(第2版)》-chapter3补
2016-07-24 18:13
387 查看
今天更新一下第三章剩余的部分。
第四章开始介绍窗口的编写和资源文件的使用了,自己看到菜单的使用,自己再琢磨琢磨, 下次再发。
第四章开始介绍窗口的编写和资源文件的使用了,自己看到菜单的使用,自己再琢磨琢磨, 下次再发。
3.3.5变量和使用 以不同的类型访问变量 ----------------------------------------------------------------------- szBuffer db 1024 dup (?) mov ax, szBuffer ;报错,mov要求等长操作 mov ax,word ptr szBuffer;正确,地址操作,szBuffer前两个字节赋值给ax ----------------------------------------------------------------------- bTest db 12h wTest dw 1234h dTest dd 12345678h ;在内存中的情况:1234 1278 5634 12(高->低) mov al, bTest ;al = 12h mov ax, word ptr wTest ;ax = 3412h mov eax, dword ptr dTest;eax = 78123412h ;地址操作,高位地址存储高位字节 ----------------------------------------------------------------------- movzx ;用0填充 movsx ;用最高符号位填充 ----------------------------------------------------------------------- 变量的尺寸和数量 ----------------------------------------------------------------------- sizeof的用法 stWndClass WNDCLASS <> szHello db 'Hello,world!',0;0结束符算一个字节 dwTest dd 1,2,3,4 ;4个双字 mov eax, sizeof stWndClass ;eax = 40 变量 mov ecx, sizeof szHello ;ecx = 13 变量 mov esi, sizeof dwTest ;esi = 16 变量 mov edx, sizeof dword ;edx = 4 数据类型 mov ebx, sizeof WNDCLASS ;ebx = 40 数据结构 ----------------------------------------------------------------------- lengthof eax = 1 ;只定义了一个WNDCLASS ecx = 13 ;定义了13个byte esi = 4 ;定义了4个双字 ebx,edx报错 ;lengthof + 数据结构/数据类型 ----------------------------------------------------------------------- 注意: szHello db 'Hello', 0dh, 0ah db 'world', 0 sizeof szHello ;值为7而不是13,实际中不能用sizeof ;需要用lstrlen ----------------------------------------------------------------------- 获取变量的地址 ----------------------------------------------------------------------- 全局变量 mov register, offset name 局部变量 lea register, [ebp-4][, ebp-8][...] invoke语句 invoke ..., addr gname/lname, ... ;既不能用offset,也不能用lea ----------------------------------------------------------------------- 3.4使用子程序 子程序的定义 ----------------------------------------------------------------------- name proc [参数:类型] ;省略了距离,语言类型,可视区域,寄存器列表 local 局部变量表 指令 name endp ----------------------------------------------------------------------- invoke name ;写在子程序之后,不需要声明 ----------------------------------------------------------------------- 参数的传递和堆栈平衡 ----------------------------------------------------------------------- stdCall ;从右向左入栈,子程序实现堆栈平衡 ----------------------------------------------------------------------- 3.5高级语法 条件测试语句 ----------------------------------------------------------------------- 操作符:=, !=, >, >=, <, <=, &(只有这一个位操作), &&, ||, ! 限制条件:表达式的左边只能是寄存器或变量,不能为常数 表达式两端不能同时为变量,但可以同时为寄存器 ----------------------------------------------------------------------- Flag指示 CARRY? ;c = 1 OVERFLOW? ;o = 1 PARITY? ;p = 1 SIGN? ;s = 1 ZERO? ;z = 1 (eax == ebx) && ZERO? ;检测eax等于ebx同时z为1 ----------------------------------------------------------------------- 分支语句 ----------------------------------------------------------------------- .if 条件表达式 指令 [.elseif] [.else] .endif ----------------------------------------------------------------------- 循环语句 ----------------------------------------------------------------------- .while 条件表达式 指令 [.break [.if 退出条件]] [.continue] .endw ---------------------------------------------------------------------- .repeat 指令 [.break [.if 退出条件]] [.continue] .until 条件表达式 ----------------------------------------------------------------------- 3.6代码风格 匈牙利表示法 ----------------------------------------------------------------------- b byte w word dw dword h handle lp pointer sz string with the end of '0' lpsz pointer to sz f float st struct ----------------------------------------------------------------------- 函数名:功能全拼,首字母大写 ----------------------------------------------------------------------- 全局变量前加_ 局部变量前加@ 程序内部子程序名前加_ 程序内部子程序参数名前加_ -----------------------------------------------------------------------
相关文章推荐
- 如何重装TCP/IP协议
- Windows 8 官方高清壁纸欣赏与下载
- 谁是桌面王者?Win PK Linux三大镇山之宝
- 对《大家都在点赞 Windows Terminal,我决定给你泼一盆冷水》一文的商榷
- Windows Clang开发环境备忘
- 从Windows系统下访问Linux分区相关软件
- 对《大家都在点赞 Windows Terminal,我决定给你泼一盆冷水》一文的商榷
- Windows下搭建本地SVN服务器
- 使用Windows原生命令一键清空剪贴板
- windows用windeployqt发布qt quick application程序
- 利用开源软件打造自己的全功能远程工具
- Windows 8虚拟机不能全屏的解决方法
- 虚拟化基础架构Windows 2008篇之1-虚拟化基础服务概述
- 虚拟化基础架构Windows 2008篇之5-安装Windows部署服务
- 虚拟化基础架构Windows 2008篇之7-添加其他操作系统的安装镜像
- 虚拟化基础架构Windows 2008篇之9-配置Windows部署服务
- 虚拟化基础架构Windows 2008篇之12-WSUS工作站端配置
- Visual Studio 2012 示例代码浏览器 - 数以千计的开发示例近在手边,唾手可得