随笔分类 -  Delphi 与汇编入门

上一页 1 2 3 4 下一页
学 Win32 汇编[14]: 使用中括号 []
摘要:[地址] 是取地址指向的内容:地址指向的是什么数据?[] 一般用于数组:当然也可以写入数组:好像 [] 不能直接是变量或常数(变量后面跟的 [] 除外). 阅读全文
posted @ 2010-04-08 15:52 万一 阅读(3845) 评论(1) 推荐(0) 编辑
学 Win32 汇编[13]: 定义符号常量(=、EQU、TEXTEQU)
摘要:=、EQU、TEXTEQU 功能差不多, 它们定义的符号都将在编译前辈替换成它们指定的常量值.相比之下 EQU 更好用些.= 举例EQU 例一EQU 例二用 TEXTEQU 重做上一个例子, 完全可行:用 TEXTEQU 重做 EQU 的第一个例子(Test13_2.asm), 有区别: 阅读全文
posted @ 2010-04-07 17:24 万一 阅读(5661) 评论(0) 推荐(0) 编辑
学 Win32 汇编[12]: PTR、OFFSET、ADDR、THIS
摘要:PTR: 指定要操作的数据尺寸OFFSET: 获取全局变量或标号的偏移地址ADDR: 类似 offset 也是获取变量的地址...获取局部变量的地址只能使用 ADDR:OFFSET 和 ADDR 的异同:1、offset 不能获取局部变量的地址;2、addr 只能用于调用函数(invoke)时, 不能用于赋值操作;3、addr 面对局部变量时会转换为 lea 等指令, addr 面对全局变量时则直... 阅读全文
posted @ 2010-04-07 15:03 万一 阅读(5608) 评论(2) 推荐(0) 编辑
学 Win32 汇编[11]: 数据对齐相关的伪指令(ALIGN、EVEN、ORG)
摘要:32 位的寄存器容量是 4 字节, 如果内存中的数据都按 4*n 字节对齐, 肯定会加快吞吐速度;但事实并非如此, 不同大小的数据可能会让寄存器别别扭扭地去处理, 从而降低了运行速度!如果使用对齐, 就会浪费掉一些内存空间; 其实这是一个需要权衡 "速度" 与 "内存" 得失的问题.准备使用的测试文件:ALIGN: 指定对齐边界EVEN 是偶对齐, 相当于 ALIGN 2ORG 可以指定从当前位置... 阅读全文
posted @ 2010-04-06 22:45 万一 阅读(4531) 评论(0) 推荐(1) 编辑
学 Win32 汇编[10]: TYPE、$、LENGTHOF、SIZEOF、TYPEDEF
摘要:TYPE: 获取类型大小, 对数组是获取每个元素的大小$: 当前程序语句的地址LENGTHOF: 数组元素个数; SIZEOF: 总字节数TYPEDEF: 创建自定义类型 阅读全文
posted @ 2010-04-06 12:40 万一 阅读(5631) 评论(0) 推荐(0) 编辑
学 Win32 汇编[9]: 子过程中的变量声明
摘要:定义子过程的伪指令: PROC、ENDP模仿 C 语言的样子, 以后的程序结构应该这样:局部变量要用 local 声明, 和全局变量区别不小:调用子过程:一个求和函数的例子: 阅读全文
posted @ 2010-04-05 20:23 万一 阅读(3322) 评论(1) 推荐(0) 编辑
学 Win32 汇编[8]: 算术运算符、关系操作符、逻辑操作符、高低分离符和移位运算符
摘要:算术运算符名称优先级()圆括号1+,-正、负2*,/乘、除3MOD取模3+,-加、减4算术运算符示例:关系操作符(EQ、NE、LT、LE、GT、GE)示例:逻辑操作符(AND、OR、XOR、NOT)示例:高低分离符(HIGH、LOW、HIGHWORD、LOWWORD)示例:移位运算符(SHL、SHR)示例:以上运算符(或伪指令)有些和汇编(硬)指令重名, 区别在于它们只用于常数表达式, 并在编译期... 阅读全文
posted @ 2010-04-04 20:10 万一 阅读(4314) 评论(11) 推荐(0) 编辑
学 Win32 汇编[7]: 定义字符串
摘要:例一例二: 阅读全文
posted @ 2010-04-04 19:08 万一 阅读(4603) 评论(0) 推荐(2) 编辑
学 Win32 汇编[6]: 伪指令 DUP 与数组
摘要:声明数组实例:上面的例子也可以这样写:使用伪指令 DUP:现在可以区别未初始化的变量在 .data 段和 .data? 的区别:继续 dup 的例子:嵌套数组: 阅读全文
posted @ 2010-04-04 18:03 万一 阅读(7262) 评论(0) 推荐(0) 编辑
学 Win32 汇编[5]: 数据类型与声明
摘要:类型描述类型缩写位数字节数浮点数有效位数值范围字节BYTEDB81 0..255有符号字节SBYTEDB81 -128..127字WORDDW162 0..65535有符号字SWORDDW162 -32768..32767双字DWORDDD324 0..4294967295有符号双字SDWORDDD324 -2147483648..2147483647远字FWORDDF486 四字QWORDDQ6... 阅读全文
posted @ 2010-04-04 16:22 万一 阅读(4158) 评论(0) 推荐(0) 编辑
学 Win32 汇编[4]: 使用 Debug 输出测试结果
摘要:由于 Debug 输出是使用的标准的 Win32 窗口, 所以 include 和 includelib 的文件较多.这样建立工程时就不需要是控制台程序了, 工程建立方法:文件 - 新建工程 - 工程类型: Win32 App (no res) ...PrintString: 输出字符串变量PrintText: 直接输出字符串PrintStringByAddr: 根据字符串地址输出字符串Pri... 阅读全文
posted @ 2010-04-04 13:55 万一 阅读(5151) 评论(5) 推荐(2) 编辑
学 Win32 汇编[3]: 控制台下的几种输出方式
摘要:在熟悉指令、伪指令和汇编语法的过程中, 首先需要的是输出显示的手段.我刚开始学习时使用的是控制台输出, 最后发现既然是 Win32 汇编还是用 Debug 输出更好.下面是之前尝试出的控制台输出的几种办法:1、使用 MASM 提供的 StdOut 函数;2、使用系统 API: 3、使用微软 C 标准库 msvcrt.dll 中的 printf 函数.使用 MASM 的 StdOut 函数:使用系统... 阅读全文
posted @ 2010-04-03 14:25 万一 阅读(11788) 评论(1) 推荐(3) 编辑
学 Win32 汇编[2]: 最简单的 Win32 程序
摘要:建立过程:1、文件 - 新建工程 - 工程类型: Win32 App (no res)、工程名称: Test1 - 默认下去到完成.2、打开 Test1.asm 输入以上代码, 然后编译执行. 结果如下:程序注释:关于换行: 在实际操作中, 我没有使用换行符号 \ 也可以, 如: 阅读全文
posted @ 2010-04-03 11:05 万一 阅读(4962) 评论(1) 推荐(0) 编辑
学 Win32 汇编[1]: 选择编辑与编译工具
摘要:Win32 汇编工具主要有 MASM 和 TASM; 我选择前者, 理由是使用范围广, 便于交流.根据介绍, 我先下载了 MASM32(http://www.masm32.com/), 发现不错, 但不是我最想要的.后来找到了 RadASM(官方地址: http://www.oby.ro/rad_asm/index.html)我最终选择了 cao_cong 做的 RadASM 汉化集成包(http... 阅读全文
posted @ 2010-04-02 22:47 万一 阅读(5826) 评论(3) 推荐(2) 编辑
汇编指令速查
摘要:指令功能AAA调整加AAD调整除AAM调整乘AAS调整减ADC进位加ADD加AND与ARPL调整优先级BOUND检查数组BSF位右扫描BSR位左扫描BSWAP交换字节BT位测试BTC位测试求反BTR位测试清零BTS位测试置一CALL过程调用CBW转换字节CDQ转换双字CLC进位清零CLD方向清零CLI中断清零CLTS任务清除CMC进位求反CMOVA高于传送CMOVB低于传送CMOVE相等传送CMO... 阅读全文
posted @ 2010-03-16 22:02 万一 阅读(55990) 评论(2) 推荐(5) 编辑
检索用到汇编代码的单元
摘要:结果: 阅读全文
posted @ 2010-03-09 12:09 万一 阅读(2604) 评论(2) 推荐(0) 编辑
初学 Delphi 嵌入汇编[30] - 寄存器表
摘要:类型 名称 二进制码 寄存器说明 多功能寄存器 AL 0 累加寄存器低八位 AH 100 累加寄存器低八位 AX 0 16 位累加寄存器 EAX 0 32 位累加寄存器 BL 11 基址寄存器低八位 BH 111 基址寄存器低八位 BX 11 16 位基址寄存器 ... 阅读全文
posted @ 2008-01-31 13:53 万一 阅读(8439) 评论(15) 推荐(0) 编辑
初学 Delphi 嵌入汇编[29] - 寄存器所能接受的数值范围
摘要:譬如 EAX AX AH AL 四个储存器, 真实存在的其实只有一个 EAX, AX AH AL 不过是不同的访问方式. 11111111 11111111 11111111 11111111 : EAX 11111111 11111111 11111111 11111111 : AX 11111111 11111111 11111111 11111111 : AH 11111111 111111... 阅读全文
posted @ 2008-01-30 21:01 万一 阅读(3943) 评论(5) 推荐(0) 编辑
初学 Delphi 嵌入汇编[28] - 把 EAX 的值置为 0 的三种方法与效率
摘要://以下三个函数功能一样, 但效率不同 {Fun1 需要读取常数 0, 最慢} function Fun1: Integer; asm mov eax, 0 end; {Fun2 与 Fun3 只是操作 CPU 的寄存器, 比 Fun1 快} function Fun2: Integer; asm sub eax, eax end; {Fun3 最快} function Fun3:... 阅读全文
posted @ 2008-01-30 11:18 万一 阅读(4218) 评论(17) 推荐(0) 编辑
初学 Delphi 嵌入汇编[27] - XCHG 指令: 交换寄存器的内容
摘要://XCHG 指令: 交换寄存器的内容 var x,y: Integer; begin x := 1; y := 9; asm mov eax, x mov ecx, y xchg eax, ecx {xchg 的参数必须至少一个是寄存器, 不能有 xchg x,y 类似的操作} mov x, eax mov y, ecx end; ... 阅读全文
posted @ 2008-01-30 10:14 万一 阅读(3696) 评论(0) 推荐(0) 编辑

上一页 1 2 3 4 下一页