注册 登录
编程论坛 汇编论坛

有偿征求排序函数的Delphi内嵌汇编(basm)代码

杜鹃 发布于 2007-06-23 19:01, 1568 次点击

有偿征求排序函数的Delphi内嵌汇编(basm)代码

{====================================================================
3数排序(冒泡排序)
=====================================================================}
function GetThreeSort(bsg:array of integer): string;
var
i, j, n: integer;
begin
for i:=2 downto 0 do begin
for j:= 0 to i-1 do begin
if bsg[j]>bsg[j+1]then begin
n:=bsg[j];
bsg[j]:=bsg[j+1];
bsg[j+1]:=n;
end;
end;
end;
result:=IntToStr(bsg[0])+IntToStr(bsg[1])+IntToStr(bsg[2]);
end;


本人愿为提供代码(须能在D7中编译通过并返回正确的值)的大侠支付酬劳50元。绝不食言。
代码请发到:du_juan1980@tom.com

[此贴子已经被作者于2007-6-24 9:08:03编辑过]

14 回复
#2
菜鸟上路2007-06-23 20:51
function GetThreeSort(bsg:array of integer): string;
var
i, j, n: integer;
begin
for i:=2 downto 0 do begin
for j:= 0 to i-1 do begin
if bsg[j]>bsg[j+1]then begin
asm
mov eax, bsg[j]
xchg bsg[j+1], eax
mov bsg[j], eax
end;
end;
end;
end;
result:=IntToStr(bsg[0])+IntToStr(bsg[1])+IntToStr(bsg[2]);
end;
这算吗?呵呵
#3
杜鹃2007-06-24 08:38

嘻嘻!谢谢您!可能是我没写清楚。我要的是整个函数的汇编代码。不仅仅是交换这1句。谢谢,请把循环、比较的部分补充一下。请发到我的邮箱并附上收款帐号。

#4
杜鹃2007-06-24 08:43
我就是数组和循环这部分不会用汇编写。

[此贴子已经被作者于2007-6-24 8:51:50编辑过]


#5
菜鸟上路2007-06-27 09:32

function GetThreeSort(bsg:array of Integer): String;
var
i, j, n: Integer;
asm
push edi
push esi

mov ebx, -1
mov i, ebx
mov j, ebx
mov n, ebx
@loop1:
inc i
mov j, ebx
@loop2:
inc j
mov eax, bsg[j]
cmp eax, bsg[j+1]
jbe @loop2
mov eax, bsg[j]
xchg bsg[j+1], eax
mov bsg[j], eax
cmp j, 20
jbe @loop2
cmp i, 20
jbe @loop1
pop esi
pop edi
end;
没装DELPHI,不知道对不

#6
herbert_19872007-06-27 13:47
以下是引用菜鸟上路在2007-6-27 9:32:02的发言:

function GetThreeSort(bsg:array of Integer): String;
var
i, j, n: Integer;
asm
push edi
push esi

mov ebx, -1
mov i, ebx
mov j, ebx
mov n, ebx
@loop1:
inc i
mov j, ebx
@loop2:
inc j
mov eax, bsg[j]
cmp eax, bsg[j+1]
jbe @loop2
mov eax, bsg[j]
xchg bsg[j+1], eax
mov bsg[j], eax
cmp j, 20
jbe @loop2
cmp i, 20
jbe @loop1
pop esi
pop edi
end;
没装DELPHI,不知道对不

那么简单就有50块...

#7
菜鸟上路2007-06-27 14:33

我都不打算收钱

#8
herbert_19872007-06-27 14:35
以下是引用菜鸟上路在2007-6-27 14:33:40的发言:

我都不打算收钱

^_^ 看得出, 否则你也不会把它发到论坛上了.

#9
杜鹃2007-06-27 23:00

谢谢。等了两天,都快失去希望了。

#10
杜鹃2007-06-27 23:18
function GetThreeSort(bsg:array of Integer): String;
var
i, j, n: Integer;
asm
push edi
push esi

mov ebx, -1
mov i, ebx
mov j, ebx
mov n, ebx
@loop1:
inc i
mov j, ebx
@loop2:
inc j
mov eax, bsg[j] // 在这报错:Access violation at address 0045210B in module
// 'Project1.exe'.Read of address 0025EC20
cmp eax, bsg[j+1]
jbe @loop2
mov eax, bsg[j]
xchg bsg[j+1], eax
mov bsg[j], eax
cmp j, 20
jbe @loop2
cmp i, 20
jbe @loop1
pop esi
pop edi
end;

咋回事呢?

[此贴子已经被作者于2007-6-27 23:37:52编辑过]

#11
杜鹃2007-06-28 00:32
{====================================================================
3数排序
=====================================================================}
function ThreeNumSort(b, s, g: integer): string;
var
x, y, z: integer;
begin
asm
mov eax, b
mov edx, s
mov ecx, g
cmp eax, edx
jb @Else1
xchg eax, edx
jmp @Else1
@Else1:
cmp eax, ecx
jb @Else2
xchg eax, ecx
@Else2:
cmp edx, ecx
jb @ElseEnd
xchg edx, ecx
@ElseEnd:
mov x, eax
mov y, edx
mov z, ecx
end;
result:=IntToStr(x)+IntToStr(y)+IntToStr(z);
end;

我这样写就能通过,为啥用数组做参数就不行呢?
#12
菜鸟上路2007-06-28 10:02
我也不太懂,看看改成引用成不?
function GetThreeSort(var bsg:array of Integer): String;
#13
杜鹃2007-06-28 11:01

不行,mov eax, bsg[j] 通不过。

#14
菜鸟上路2007-06-28 11:34
哎,那就不知道了
#15
杜鹃2007-06-28 13:09

那也非常感谢。

1