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

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

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

举例:

//使用应该保护的 ebx 寄存器

function Fun(x: Integer): Integer;

asm

  push ebx           {push 是入栈指令, 栈就是系统自动分配的内存}

  mov  ebx, x

  inc  ebx

  mov  @Result, ebx

  pop  ebx           {pop 是出栈指令, 也就是恢复 ebx 寄存器原来的值}

end;





//测试

procedure TForm1.Button1Click(Sender: TObject);

var

  i: Integer;

begin

  i := Fun(8);

  ShowMessage(IntToStr(i)); {9}

end;


 
   

你可能感兴趣的:(Delphi)