delphi中嵌套一个ASM的总结

今天用BASM实现了一个ADD的方法代码,实现的过程中我最初写下了如下的代码:

function Add(const a,b:integer):integer;
asm
   Mov  EAX,DWORD ptr[a];
  Mov   EBX,DWORD ptr[b];
  ADD  EAX,EBX;
  Mov    Result  ,EAX;
  DB     $F3;
  RET;

end; 

上边的代码实现了一个a+B的功能,这个功能是实现了,于是我思考,但是有没有更加简洁的方法来实现呢,A,B作为函数的参数,还需要移动他吗?于是我对程序进行了调试,调试时我发现函数的参数在进行付值的时候,A的内容存放在[eax],B的内容却放在了[EBX],这个时候我有想如果有第三个参数,这第三个参数中放在什么地方呢?于是我写了一个函数FUNCTION ADD(a,b,c,d,e:integer):integer;这个时候我发现 A-->[EAX],B-->[EDX],C-->[ECX],D-->[EBP+$0C],E-->[EBP+$08],RESULT-->[ESP-$04],这样我们可以写出更加简洁的ADD函数

function  Add(a,b:integer):integer
begin

  mov  eax,[eax];
  Add eax,[edx];
  mov [esp-$04],eax;
 db    $F3;
 RET;
end;

这样我们是写了5个数的相加得到了结果你可以调试一下,包好。我们省去了1个MOV 指令。但是是不是适用与所有编译器需要进一步考察。谢谢!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值