摘要:
//可以用 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
万一
阅读(6145)
评论(5)
推荐(0)
摘要:
王爽老师书上说, CPU 内部主要就是寄存器. 现在我们在 32 位的系统下工作, 当然主要使用的是 32 位寄存器; 那它和 8 位、16 位的寄存器又有什么关系呢? 从网上找到一个简洁明了的图片: EAX 是 32 位的, 也就是 4 个字节大小; 它的低两位就是 AX; AX 是 16 位的, 又分 2 个字节; 它的高字节是 AH、低字节是 AL; AH 与 AL 是 8 位的. ... 阅读全文
posted @ 2008-01-24 17:37
万一
阅读(4916)
评论(3)
推荐(0)
摘要:
//在汇编中使用常量 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
万一
阅读(4179)
评论(5)
推荐(0)
摘要:
//在汇编中访问 Delphi 的变量可以使用 & 操作符 procedure Proc(str1,str2: string); var s1,s2: string; begin asm mov ecx, &str1 {} mov edx, &str2 mov &s1, ecx {} mov &s2, edx end; ShowMessa... 阅读全文
posted @ 2008-01-24 16:04
万一
阅读(5077)
评论(21)
推荐(0)
摘要:
//测试寄存器: 如果只有两个参数, 看看 ECX EDX 谁来接受第二个参数 procedure Proc(x,y: Integer); var a,b: Integer; begin asm MOV a,ECX MOV b,EDX end; ShowMessage(IntToStr(a) + #44 + IntToStr(b)); end; //测试 p... 阅读全文
posted @ 2008-01-24 15:38
万一
阅读(4918)
评论(14)
推荐(0)
摘要:
CPU 提供了诸多寄存器, 但在 Delphi 的过程和函数中, 只有 EAX ECX EDX 三个寄存器可以自由使用; 如果改变了其他寄存器, 在过程和函数结束前要给恢复. 记得前面学习过 Delphi 的过程和函数默认的调用约定是 Register , 前三个参数通过寄存器传递, 其他参数存与栈. 它所指的三个寄存器就应该是 EAX ECX EDX 了. 看资料介绍应该是: EAX 先接受第... 阅读全文
posted @ 2008-01-24 11:50
万一
阅读(6437)
评论(25)
推荐(0)
浙公网安备 33010602011771号