今天用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 指令。但是是不是适用与所有编译器需要进一步考察。谢谢!