53魔力发布网,提供最好最新的开机信息

查看完整版本: 初学 Delphi 嵌入汇编[15] - 需要保护的寄存器

妖哥 2008-4-8 20:49

初学 Delphi 嵌入汇编[15] - 需要保护的寄存器

前面提到 32 位的寄存器有: EAX EBX ECX EDX ESP EBP ESI EDI; 其中, EAX ECX EDX 是自由使用的.

那么剩下的 EBX ESP EBP ESI EDI 五个寄存器就是应该保护的!
所谓保护, 并不是不可以使用, 而是在使用前先把其中的值寄存在另外一个地方, 用完后再恢复其值.
如果不这样做, 有可能会发生意想不到的错误.

举例:

[color=#008000]//使用应该保护的 ebx 寄存器
[/color][b][color=#000080]function[/color][/b] Fun(x: Integer): Integer;
[b][color=#000080]asm[/color][/b]
  push ebx           [color=#008000]{push 是入栈指令, 栈就是系统自动分配的内存}[/color]
  mov  ebx, x
  inc  ebx
  mov  @Result, ebx
  pop  ebx           [color=#008000]{pop 是出栈指令, 也就是恢复 ebx 寄存器原来的值}[/color]
[b][color=#000080]end[/color][/b];


[color=#008000]//测试
[/color][b][color=#000080]procedure[/color][/b] TForm1[color=#0000ff].[/color]Button1Click(Sender: TObject);
[b][color=#000080]var[/color][/b]
  i: Integer;
[b][color=#000080]begin[/color][/b]
  i := Fun([color=#0000ff]8[/color]);
  ShowMessage(IntToStr(i)); [color=#008000]{9}[/color]
[b][color=#000080]end[/color][/b];
页: [1]
查看完整版本: 初学 Delphi 嵌入汇编[15] - 需要保护的寄存器
妖城魔力欢迎您