初学 Delphi 嵌入汇编[26] - 大小写字母转换
摘要://小写字母转大写字母 function Fun1(C: Char): Char; asm sub C, 32 //sub C, 'a'-'A' {竟也可以这样写} end; //大写字母转小写字母 function Fun2(C: Char): Char; asm add C, 32 end; //测试 procedure TForm1.Button1Click(Sende...
阅读全文
posted @
2008-01-30 00:08
万一
阅读(5238)
推荐(0) 编辑
初学 Delphi 嵌入汇编[25] - 在汇编中调用函数
摘要://准备一个在汇编中要调用的函数 function DelphiFun(x,y: Integer): Integer; begin Result := x + y; end; //汇编函数 function AsmFun: Integer; asm mov eax, 1 {eax 对应函数的第一个参数, 这里给第一个参数赋值为 1} mov edx, 2 {e...
阅读全文
posted @
2008-01-29 21:24
万一
阅读(4278)
推荐(0) 编辑
初学 Delphi 嵌入汇编[24] - 汇编语言的简单数据类型
摘要:类型 助记符 助记符简写 所占字节数 数值范围 字节 BYTE DB 1 0..255 字 WORD DW 2 0..65535 双字 DWORD DD 4 0..4294967295 远字 FWORD DF 6 四字 QWORD DQ 8 十字节 TBYTE DT 10 有符号字节 SBYTE 1 -128..127 有符号字 S...
阅读全文
posted @
2008-01-29 17:26
万一
阅读(3450)
推荐(0) 编辑
初学 Delphi 嵌入汇编[23] - LOOP 循环
摘要://计算 x 的 n 次方的函数 function Fun(x,n: Integer): Integer; asm //mov eax, x {因为 eax 会先获取第一个参数, 这句可以省略} mov ecx, n {ecx 是个计数寄存器, 会记录循环的次数, 每循环一次 ecx 的值就会减1} sub ecx, 1 @Lable1...
阅读全文
posted @
2008-01-29 17:05
万一
阅读(5523)
推荐(0) 编辑
初学 Delphi 嵌入汇编[22] - 在汇编代码中使用记录
摘要://自定义记录用于测试 Type TMyRec = record i: Integer; c: Char; end; //在汇编中使用记录的过程 procedure GetRec(Rec: TMyRec); asm mov eax.TMyRec.i, 100 {eax 会接受第一个参数} mov eax.TMyRec.c, 'M' end; //测试 pr...
阅读全文
posted @
2008-01-29 16:05
万一
阅读(3459)
推荐(0) 编辑
初学 Delphi 嵌入汇编[21] - Delphi 的其他整数类型
摘要:除了 Byte、Word、Cardinal、Integer 外, Delphi 的整数类型还有: Longint、Longword、Shortint、Smallint、Int64 其中 Longint 相当于 Integer; Longword 相当于 Cardinal. 这样还有三种类型: Shortint、Smallint、Int64 //Shortint 是1字节(8位)有符号整数 va...
阅读全文
posted @
2008-01-29 12:49
万一
阅读(3493)
推荐(0) 编辑
初学 Delphi 嵌入汇编[20] - Delphi 的 Integer 类型
摘要:var I: Integer; begin //Integer 类型是4字节(32位)有符号整数, 最高位是符号位, 如果是正数, 符号位是 0、负数的符号位是1 //所以 Integer 的最大值是: 01111111 11111111 11111111 111111112 asm mov I, 01111111111111111111111111111111B; ...
阅读全文
posted @
2008-01-29 11:59
万一
阅读(6807)
推荐(0) 编辑
初学 Delphi 嵌入汇编[19] - Delphi 的无符号整数类型
摘要:var B: Byte; W: Word; C: Cardinal; begin {Byte 是1字节(8位)无符号整型, 其最大值是 111111112} asm mov B, 11111111B; end; ShowMessage(IntToStr(B)); {255} {Word 是2字节(16位)无符号整型, 其最大值是 11111111 11...
阅读全文
posted @
2008-01-29 11:24
万一
阅读(6226)
推荐(0) 编辑
初学 Delphi 嵌入汇编[18] - SHL 与 SHR
摘要:汇编中的SHL(左移)、SHR(右移)命令也是和 Delphi 一样的. var ByteNum: Byte; begin //右移 shr asm mov al, 10000000B {128} shr al, 1 {shr 10000000 一次会得到 01000000} mov ByteNum, al end; ShowMessa...
阅读全文
posted @
2008-01-28 10:51
万一
阅读(6930)
推荐(0) 编辑
初学 Delphi 嵌入汇编[17] - 逻辑运算
摘要:AND: 逻辑与指令 OR : 逻辑或指令 XOR: 逻辑异或指令 NOT: 逻辑非指令 这和 Delphi 的逻辑命令完全一致. //逻辑非 Not: { not 1 = 0; not 0 = 1; } var ByteNum: Byte; begin //赋值 11111111B (255) 取反: asm mov al, 11111111B {eax ...
阅读全文
posted @
2008-01-28 10:04
万一
阅读(5338)
推荐(0) 编辑
初学 Delphi 嵌入汇编[16] - 进制的表示方法
摘要:关于进制: 生活中有 7进制(星期)、60进制(小时)、10进制(算术)等等. 计算机要用到 10进制、16进制、2进制和 8进制. 8进制用得少了, 但也有, 譬如 Unix 服务器上的文件属性. 2进制是计算机容易识别的; 10进制是人容易识别的, 据说 10进制源自于人有十个手指. 计算机为什么会使用 8进制和 16进制呢? 因为: 23=8; 24=16; 这样比较容易和 2进制换算...
阅读全文
posted @
2008-01-25 21:44
万一
阅读(6216)
推荐(0) 编辑
初学 Delphi 嵌入汇编[15] - 需要保护的寄存器
摘要:前面提到 32 位的寄存器有: EAX EBX ECX EDX ESP EBP ESI EDI; 其中, EAX ECX EDX 是自由使用的. 那么剩下的 EBX ESP EBP ESI EDI 五个寄存器就是应该保护的! 所谓保护, 并不是不可以使用, 而是在使用前先把其中的值寄存在另外一个地方, 用完后再恢复其值. 如果不这样做, 有可能会发生意想不到的错误. 举例: //使用应该保护...
阅读全文
posted @
2008-01-25 17:19
万一
阅读(3638)
推荐(0) 编辑
初学 Delphi 嵌入汇编[14] - 常量与变量在汇编中的一个区别
摘要://常量可以在汇编语句中运算 function Fun: Integer; const a = 11; b = 5; asm mov eax, a-b end; //测试 procedure TForm1.Button1Click(Sender: TObject); var i: Integer; begin i := Fun; ShowMessage(IntToSt...
阅读全文
posted @
2008-01-25 17:16
万一
阅读(3698)
推荐(0) 编辑
初学 Delphi 嵌入汇编[13] - 地址参数用 [] 取值
摘要://关于地址参数(var/out) function Fun(var x,y: Integer): Integer; asm mov eax, x {现在 eax 中只是 x 的地址} mov eax, [eax] { [eax] 是取值, 是不是类似于 P^ ? } mov edx, y add eax, [edx] //mov @Result, e...
阅读全文
posted @
2008-01-25 09:25
万一
阅读(4227)
推荐(0) 编辑
初学 Delphi 嵌入汇编[12] - 在汇编代码中可以直接使用 Result
摘要://在汇编代码中使用 Result function Fun(x: Integer): Integer; asm mov ecx, &x dec ecx {汇编中的 dec 是减 1 指令, 和 Delphi 是一样的} mov @Result, ecx {在本例中去掉 @ 也可以, 暂时不知怎么回事} end; //测试 procedure TForm1....
阅读全文
posted @
2008-01-25 00:06
万一
阅读(4214)
推荐(1) 编辑
初学 Delphi 嵌入汇编[11] - 用汇编重写一个 Delphi 函数
摘要://Delphi 函数 function DelphiFun(x: Integer): Integer; begin Result := x * 2; end; //汇编函数, 和上面的函数是同样的功能 function AsmFun(x: Integer): Integer; asm add eax, eax {eax 可以获取第一个参数, 同时又是函数的返回值, 所以可以如此简...
阅读全文
posted @
2008-01-24 23:34
万一
阅读(4357)
推荐(0) 编辑
初学 Delphi 嵌入汇编[10] - 函数返回值与寄存器
摘要:返回类型 寄存位置 Char、Byte AL 寄存器 SmallInt、Word AX 寄存器 Integer、LongWord、AnsiString、Pointer、Class EAX 寄存器 Real48 EAX 寄存器中是栈内返回值的指针 Int64 EDX、EAX 寄存器对 Single、Double、Extended、Comp 栈首寄存器 ST(0) ...
阅读全文
posted @
2008-01-24 20:36
万一
阅读(4587)
推荐(0) 编辑
初学 Delphi 嵌入汇编[9] - asm 可以代替 begin
摘要://可以用 asm 代替 begin function Fun(x: Integer): Integer; asm mov eax, x inc eax end; { 汇编中的 inc 指令和 Delphi 中的 inc 是一样的; 本例也同时证明 eax 寄存器确实保存着函数的返回值. } procedure TForm1.Button1Click(Sender: TObje...
阅读全文
posted @
2008-01-24 20:04
万一
阅读(6116)
推荐(0) 编辑
初学 Delphi 嵌入汇编[8] - 8 位寄存器、16 位寄存器与 32 位寄存器
摘要:王爽老师书上说, CPU 内部主要就是寄存器. 现在我们在 32 位的系统下工作, 当然主要使用的是 32 位寄存器; 那它和 8 位、16 位的寄存器又有什么关系呢? 从网上找到一个简洁明了的图片: EAX 是 32 位的, 也就是 4 个字节大小; 它的低两位就是 AX; AX 是 16 位的, 又分 2 个字节; 它的高字节是 AH、低字节是 AL; AH 与 AL 是 8 位的. ...
阅读全文
posted @
2008-01-24 17:37
万一
阅读(4873)
推荐(0) 编辑
初学 Delphi 嵌入汇编[7] - 使用常量
摘要://在汇编中使用常量 var a: Integer; const n = $10; begin asm mov ecx, 10 {使用十进制常数} mov a, ecx end; ShowMessage(IntToStr(a)); {10} asm mov ecx, $10 {使用十六进制常数} ...
阅读全文
posted @
2008-01-24 16:13
万一
阅读(4149)
推荐(0) 编辑