- 浏览: 1190370 次
- 性别:
- 来自: 广州
文章分类
- 全部博客 (883)
- Spring (101)
- Swing (1)
- Mysql (21)
- Js (59)
- Jsp (2)
- Hibernate (19)
- Myeclipse (5)
- SqlServer 2000 (2)
- poi (15)
- Java (70)
- SSH (12)
- Html (47)
- Fusion Charts (1)
- C\C++ (2)
- 汇编 (36)
- Jquery (37)
- Struts2 (6)
- Ubuntu (16)
- powerDesinger (4)
- Jboss (3)
- JAX-RS (13)
- JAXB (5)
- JAX-WS (11)
- JMS (4)
- WebSocket (8)
- PHP (16)
- Flash (1)
- maven (3)
- Oracle (8)
- HttpClient (6)
- sqlserver (19)
- svn (5)
- Tomcat (3)
- Jdbc (3)
- EsayUi (11)
- 微信公众平台 (19)
- IIS (2)
- Freemarker (11)
- Comet (1)
- Spring MVC (85)
- JBoss Seam (3)
- 二维码 (9)
- Spring Security (4)
- Ehcache (3)
- Apache Shiro (7)
- jackson (16)
- JPA (8)
- jcaptcha (2)
- RSA (2)
- Ajax (6)
- 跟我学Shiro (0)
- Spring4 (19)
- 跟我学spring3 (0)
- css (32)
- excel (4)
- Filter (3)
- 微信公众帐号开发教程 (0)
- Android (6)
- log4j (6)
- 淘宝接口 (17)
- 支付集成 (3)
- 单点登录 (3)
- Html5 (27)
- 移动平台前端 (3)
- Linux (44)
- FusionCharts (27)
- Json Jackson Xml (5)
- 方培工作室-微信开发 (0)
- Apache与Tomcat与IIS整合 (10)
- Nginx (17)
- webService (2)
- apache (4)
- lucene (3)
- lodop (2)
- Shiro (3)
- zTree (2)
- ireport (12)
- Servlet3.0 (5)
- 前端美工 (19)
- AngularJS (1)
- C#开发微信门户及应用 (0)
- Shell (3)
- bat脚本 (16)
- Bootstrap (26)
- Less (10)
- photoshop (6)
- Redis (6)
- Mongodb (10)
- MyBatis (3)
- 数据结构 (0)
- 读写分离-主从复制 (0)
- JFinal (0)
- 百度地图api (3)
- hadoop-hbase-hive-spark (3)
- WebStorm (2)
- Quartz (5)
- ios (0)
- Mina (8)
- Android Studio (4)
- Ratchet教程 (0)
- 移动端重构系列 (1)
- cubic-bezier贝塞尔曲线CSS3动画工具 (1)
- nginx+tomcat+memcached集群 (0)
- 集群 (0)
- ZooKeeper (3)
- Dubbo (0)
- vpn (0)
- kafka (0)
- JVM垃圾回收机制 (0)
- 微信小程序 (0)
- Lua (0)
- Hystrix (0)
- Vue.js (0)
- mycat (0)
- Openresty (0)
- springBoot (0)
- 新分类 (0)
- guava (0)
- 大数据 (0)
- Sentinel (0)
最新评论
-
JackMacing:
中文怎么解决?
SpringMVC与iReport(JasperReports) 5.6整合开发实例 -
18335864773:
用pageoffice把.可以实现在线的文档操作.直接转pdf ...
转:使用jasperreport动态生成pdf,excel,html -
linhao0907:
推荐一款轻量开源的支付宝组件:https://github.c ...
关于Alipay支付宝接口(Java版) -
songronghu:
太好了,非常有用,谢谢分享~
Java ConcurrentModificationException 异常分析与解决方案 -
wzwahl36:
http://www.atool.org/json2javab ...
Java下利用Jackson进行JSON解析和序列化
从接触 C 语言时, 我就不大喜欢宏; 但为了看懂别人的代码也不得不去了解.
宏可定义在源程序的任意位置, 但一般放在 .data 前面.
有些简单的宏可以用 equ、textequ 或 = 来代替, 但宏有更复杂的功能.
"宏" 的本质是 "替换", 但又像极了 "子过程";
所以即有宏过程(macro procedure)、也有宏函数(macro function).
它既以有参数(可以是: 常数、变量、寄存器、指令、表达式), 有时也需要像子过程一样声明.
宏可以指定哪些参数是必须的, 还可以给参数默认值.
宏可以包含数据(.data)和代码(.code)、还可以嵌套.
宏中的注释使用 ;; 如果只用 ; 将会被一起替换到代码中.
宏的功能很强大, 现在常用的 PrintDec、PrintHex、PrintString、PrintText 等等都是宏.
再强大它也只是 "文本替换".
"宏" 和 "子程序" 相比:
1、宏展开后顺序执行, 不像调用子程序跳来跳去, 这样程序会更 "快";
2、宏展开后会让代码量增大, 导致程序变 "大".
一个简单的宏:
; Test34_1.asm .386 .model flat, stdcall include windows.inc include kernel32.inc include masm32.inc include debug.inc includelib kernel32.lib includelib masm32.lib includelib debug.lib ;定义一个 mExit 宏 mExit macro PrintLine ret endm .code sum proc v1, v2, v3 mov eax, v1 add eax, v2 add eax, v3 ret sum endp ; main proc invoke sum, 11, 22, 33 PrintDec eax ;66 ;PrintLine ;ret mExit ;mExit 将被替换为上面两行代码 main endp end main
一个代替求和函数的宏:
; Test34_2.asm .386 .model flat, stdcall include windows.inc include kernel32.inc include masm32.inc include debug.inc includelib kernel32.lib includelib masm32.lib includelib debug.lib mSum macro v1, v2, v3 mov eax, v1 add eax, v2 add eax, v3 endm .code main proc mSum 11, 22, 33 PrintDec eax ;66 PrintLine mSum 11, 22, 33, 44, 55 ;多余的参数会被忽略 PrintDec eax ;66 PrintLine ret main endp end main
宏参数的默认值:
; Test34_3.asm .386 .model flat, stdcall include windows.inc include kernel32.inc include masm32.inc include debug.inc includelib kernel32.lib includelib masm32.lib includelib debug.lib ;参数 v1、v2 通过 REQ 标识说明是必备参数 ;参数 v3、v4 给出了默认值 mSum macro v1:req, v2:req, v3:=<33>, v4:=<44> mov eax, v1 add eax, v2 add eax, v3 add eax, v4 endm .code main proc mSum 11, 22 PrintDec eax ;110 PrintLine ret main endp end main
EXITM: 退出宏
; Test34_4.asm .386 .model flat, stdcall include windows.inc include kernel32.inc include masm32.inc include debug.inc includelib kernel32.lib includelib masm32.lib includelib debug.lib mPrint macro PrintText '第一行' PrintText '第二行' exitm PrintText '第三行' endm .code main proc mPrint ;只会输出前两行 ret main endp end main
PURGE: 取消宏
; Test34_5.asm .386 .model flat, stdcall include windows.inc include kernel32.inc include masm32.inc include debug.inc includelib kernel32.lib includelib masm32.lib includelib debug.lib mPrint macro PrintText '第一行' PrintText '第二行' PrintText '第三行' PrintLine endm .code main proc mPrint mPrint purge mPrint ;可用逗号隔开取消多个宏 mPrint ;这个宏不会展开了 ret main endp end main
宏中 local 的使用:
; Test34_6.asm .386 .model flat, stdcall include windows.inc include kernel32.inc include masm32.inc include debug.inc includelib kernel32.lib includelib masm32.lib includelib debug.lib ;从三个数中求最大数的宏 mMax macro v1, v2, v3 LOCAL L1, L2 ;;如没有这句, 宏在多次展开时会让 L1、L2 重名, 这样宏会把标号名称协调好 mov eax, v1 cmp eax, v2 jge L1 mov eax, v2 L1: cmp eax, v3 jge L2 mov eax, v3 L2: endm .code main proc mMax 11, 22, 33 PrintDec eax ;33 ret main endp end main
灵活的参数, 用到 & 操作符:
; Test34_7.asm .386 .model flat, stdcall include windows.inc include kernel32.inc include masm32.inc include debug.inc includelib kernel32.lib includelib masm32.lib includelib debug.lib ;求最数中的最大值: mMax macro v1, v2 LOCAL L1 mov eax, v1 cmp eax, v2 jge L1 mov eax, v2 L1: endm ;求最数中的最小值: mMin macro v1, v2 LOCAL L1 mov eax, v1 cmp eax, v2 jle L1 mov eax, v2 L1: endm ;能把 JGE 或 JLE 做参数: mCom1 macro XX, v1, v2 LOCAL L1 mov eax, v1 cmp eax, v2 XX L1 mov eax, v2 L1: endm ;能通过参数让 J*E 变为 JGE 或 JLE: mCom2 macro X, v1, v2 LOCAL L1 mov eax, v1 cmp eax, v2 J&X&E L1 ;;这里用到特殊操作符 & mov eax, v2 L1: endm .code main proc mMax 11, 22 PrintDec eax ;22 mMin 11, 22 PrintDec eax ;11 mCom1 JGE, 11, 22 PrintDec eax ;22 mCom1 JLE, 11, 22 PrintDec eax ;11 mCom2 G, 11, 22 PrintDec eax ;22 mCom2 L, 11, 22 PrintDec eax ;11 ret main endp end main
特殊操作符: &、<>、%、!
& ;替换操作符 <> ;字符串传递操作符 % ;表达式操作符, 也用于得到一个变量或常量的值 ! ;转义操作符
; Test34_8.asm .386 .model flat, stdcall include windows.inc include kernel32.inc include masm32.inc include debug.inc includelib kernel32.lib includelib masm32.lib includelib debug.lib ;自定义的宏 mPrint macro Text PrintText '* &Text& *' endm .code main proc ;该宏会把参数直接替换过去 mPrint 1234 ;* 1234 * ;要保证参数的完整应该使用 <> mPrint 12,34 ;* 12 * mPrint <12,34> ;* 12,34 * ;需要计算结果应该使用 %() mPrint 34+12 ;* 34+12 * mPrint %(34+12) ;* 46 * ;用到 &、<、>、%、! 应该使用 ! 转义 mPrint 10 !% 2 = %(10/2)!! ;* 10 % 2 = 5! * ret main endp end main
发表评论
-
学 Win32 汇编[33] - 探讨 Win32 汇编的模块化编程
2011-12-22 13:23 550我觉得所谓的模块化有两种: "假模块化" ... -
学 Win32 汇编[32] - 子程序进阶
2011-12-20 09:49 657接: 学 Win32 汇编[9]: 子过程中的变量声明 ... -
学 Win32 汇编[31] - 结构与联合
2011-12-20 09:48 514结构和联合分别用 struct、union 定义, 都是 en ... -
学 Win32 汇编[30] - 条件及循环伪指令: .IF、.WHILE、.REPEAT 等
2011-12-20 09:48 2077.IF、.ELSEIF、.ELSE、.ENDIF: 条件伪指令 ... -
学 Win32 汇编[29] - 串指令: MOVS*、CMPS*、SCAS*、LODS*、REP、REPE、REPNE 等
2011-12-20 09:47 1875这里的 "串" 并不单指字符串, 包括所有 ... -
学 Win32 汇编[28] - 跳转指令: JMP、JECXZ、JA、JB、JG、JL、JE、JZ、JS、JC、JO、JP 等
2011-12-20 09:46 1404跳转指令分三类:一、无条件跳转: JMP;二、根据 CX、EC ... -
学 Win32 汇编[27] - 乘除指令: MUL、IMUL、DIV、IDIV
2011-12-19 09:03 1335MUL: 无符号乘 ;影响 OF、CF 标志位 ;指 ... -
学 Win32 汇编[26] - 加减指令: INC、DEC、NEG、ADD、ADC、SUB、SBB、CMP
2011-12-19 09:02 1392;INC(Increment): 加一;DEC(Decreme ... -
学 Win32 汇编[25] - 符号扩展指令: CBW、CWDE、CDQ、CWD
2011-12-19 09:01 1559CBW、CWDE、CDQ、CWD: 扩展指令 ;CBW ... -
学 Win32 汇编[24] - 移位: SHL、SHR、SAL、SAR、ROL、ROR、RCL、RCR、SHLD、SHRD
2011-12-19 09:01 1383SHL、SHR、SAL、SAR: 移位指令 ;SHL( ... -
学 Win32 汇编[23] - 位测试与位扫描指令: BT、BTC、BTR、BTS、BSF、BSR
2011-12-19 09:00 2089BT、BTS、BTR、BTC: 位测试指令 ;BT(B ... -
学 Win32 汇编[22] - 逻辑运算指令: AND、OR、XOR、NOT、TEST
2011-12-14 13:23 1237AND: 逻辑与 ;该指令会置 CF=OF=0; 其结 ... -
学 Win32 汇编[21] - 传送指令: MOV、LEA、XCHG、XLATB、XLAT、MOVZX、MOVSX
2011-12-14 13:22 1047汇编指令的一般性要求: 1、两个操作数的尺寸必须一致; 2、操 ... -
学 Win32 汇编[20]: 洞察标志寄存器
2011-12-14 13:21 61115 14 13 12 11 10 9 8 7 6 ... -
学 Win32 汇编[19]: 查看二进制等相关函数
2011-12-14 13:20 546在 masm32.inc 中有这样几个函数的声明: by ... -
学 Win32 汇编[18]: 关于压栈(PUSH)与出栈(POP) 之二
2011-12-13 14:28 963由于 "栈" 是由高到低使用的, 所以新压 ... -
学 Win32 汇编[17]: 关于压栈(PUSH)与出栈(POP) 之一
2011-12-13 14:27 1016记得刚学多线程的时候, 碰到一个结构: //Delphi ... -
学 Win32 汇编[16]: 常用寄存器的常规功能
2011-12-13 14:26 725通用寄存器 EAX ... -
学 Win32 汇编[15]: LOOP 与标号
2011-12-13 14:25 782Loop 是反复执行;从哪反复? 这要用到 "标号& ... -
学 Win32 汇编[14]: 使用中括号 []
2011-12-12 13:24 705[地址] 是取地址指向的内容: ; Test14_1.as ...
相关推荐
本书主要内容包括:80x86指令系统、寻址方式、宏指令与伪指令、汇编语言格式与程序结构、分支程序设计、循环程序设计、子程序设计、宏汇编技术、系统功能调用与使用方法、I/O程序设计方法与中断程序设计。...
简单的汇编驱动框架,用RADASM编写。
现在大多数机器均为64位机器,网上很难找到相应的汇编工具(Masm611只能支持32位机器);我推荐的这个软件,就能完美结局这个问题,自测,win7,i5-2400可用。
前言 ...本书主要的内容将放在32位宏汇编对比DOS汇编所不同的部分,以及Win32应用程序的汇编实现上。不求全面,只求精也!(说句老实话,也不敢对自己不精通的地方妄加评论,以免破坏自己的良好形象。
MASM5.0是DOS下的汇编开发程序,在win7 64位系统中不能兼容。本资源提供了win7 64位系统下使用MASM的方法,内含详细的图文说明。 汇编工具包包含MASM、LINK、EDIT、DEBUG、DEBUG32等程序。
386|ASM Reference Manual (386|ASM 宏汇编参考工具) Phar Lap 的宏汇编语言的 x86 系列微处理器的技术参考书。 ---------------------------------------------------------- 欢迎使用 TNT DOS-Extender 和 TNT ...
1、简明x86汇编语言教程(1)-汇编语言简介 2、简明x86汇编语言教程(2)-认识处理器 3、简明x86汇编语言教程(3)-使用寄存器 4、简明x86汇编语言教程(4)-操作内存 5、简明x86汇编语言教程(5)-串操作 6、简明x86汇编...
Atmel(爱特梅尔)提供的51单片机的宏汇编器工具包,含win版和linux版,及Atmel(爱特梅尔)51单片机的数据手册和汇编器的用户手册。
熟悉宏汇编语言中 INVOKE、结构变量、简化段定义等功能; 进一步理解机器语言、汇编语言、高级语言之间以及实方式、保护方式之间的一些关系。 详细介绍参考:https://blog.csdn.net/newlw/article/details/134087197
DOS汇编语言编译器终极版本,微软原始版本,文件日期也是原样。 转档请注明:2010年圣诞平安夜CSDN首发,...MASM.EXE 111,396 1992-1-5 0:52:52 LINK.EXE 69,133 1988-9-7 16:27:56 文件时间为中国时区时间(GMT+8)
3.1 宏汇编语言中的表达式 3.1.1 常量与数值表达式 3.1.2 变量、标号与地址表达式 3.2 常用的机器指令语句 3.2.1 数据传送指令 3.2.2 算术运算指令 3.2.3 位操作指令 3.3 伪指令语句 3.3.1 处理器选择伪指令...
·随书附带的CD-ROM中包含了Microsoft MASM 6.15汇编编译器、程序编辑器、一个宏库和本书的源代码 第四版的新增内容: ·Win32程序设计,包含控制台API和图形应用程序 ·对过程、递归、堆栈参数、结构和联合进行...
3.1 宏汇编语言中的表达式 3.1.1 常量与数值表达式 3.1.2 变量、标号与地址表达式 3.2 常用的机器指令语句 3.2.1 数据传送指令 3.2.2 算术运算指令 3.2.3 位操作指令 3.3 伪指令语句 3.3.1 处理器选择伪...
汇编 统计输入字符中的各字母的个数 该程序在win7系统下MASM6.0下成功运行
Keil则为其提供了包括C编译器、宏汇编、连接器、库管理和一个功能强大的仿真调试器等在内的完整开发方案,通过一个集成开发环境(uVision)将这些部分组合在一起。运行Keil软件需要WIN98、NT、WIN2000、WINXP等操作...
win32 汇编语言 播放歌曲的小程序 完整 STACK SEGMENT DB 200 DUP ( STACK ) STACK ENDS CODE SEGMENT ASSUME DS:DATA,SS:STACK,CS:CODE START: MOV AX,DATA MOV DS,AX MOV aH, 0 MOV AL,00 INT 10H *...
NASM支持大量的文件格式,包括Linux,*BSD,a.out,ELF,COFF,Mach−O,Microsoft 16−bit OBJ,Win32以及Win64,同时也支持简单的二进制文件生成。它的语法被设计的简单易懂,相较Intel的语法更为简单,支持目前...
·随书附带的CD-ROM中包含了Microsoft MASM 6.15汇编编译器、程序编辑器、一个宏库和本书的源代码 第四版的新增内容: ·Win32程序设计,包含控制台API和图形应用程序 ·对过程、递归、堆栈参数、结构和联合进行...
386|ASM Reference Manual (386|ASM 宏汇编参考工具) A technical reference for Phar Lap’s assembler for Intel 8086 and later microprocessors. TNT Pharlap DOS Extenter 扩展器 This booklet describes ...