Сортировка массива на asm
Пользователи, просматривающие топик: none
|
Зашли как: Guest
|
Имя |
Сообщение |
<< Старые топики Новые топики >> |
|
|
Сортировка массива на asm - 2007-05-20 15:47:10.360000
|
|
|
kb33
Сообщений: 46
Оценки: 0
Присоединился: 2007-04-03 10:06:11.443333
|
Необходимо написать программу на asm - сортировка пузырьком. У меня получилась такая программа, но она работает с ошибками, иногда выдаёт верный результат, а иногда нет. Написана на встроенном ассемблере. Почему она выдаёт ошибки? type arr=array[1..10] of byte; Var Intarr:arr; i:integer; begin Randomize; for i:=1 to 10 do Intarr<i>:=Random(i); asm PUSHAD xor esi,esi xor edi,edi xor ebx,ebx xor al,al Lea ebx,[Intarr] mov edi,ebx add ebx,9 mov eax,[ebx] @@0: mov esi,edi @@1: Inc esi mov al,[edi] cmp [esi],al jge @@2 XCHG al,[esi] mov [edi],al @@2: inc esi cmp esi,ebx jL @@1 inc edi cmp edi,ebx jb @@0 POPAD end; for i:=1 to 10 do Writeln(Intarr<i>); Readln; end.
|
|
|
RE: Сортировка массива на asm - 2007-05-21 10:43:15.896666
|
|
|
Andrey1.1
Сообщений: 86
Оценки: 0
Присоединился: 2004-12-01 18:42:36
|
Не знаю почему у тебя глючит, но я попробовал написать ту же сортировку. Вот кусок кода: asm
{ saving all registers }
PUSHAD
{ register clearing }
xor esi, esi
xor edi, edi
xor ebx, ebx
xor ecx, ecx
{ initializing main loop }
mov ecx, 9d
{ define 'sorting length' loop (9 downto 1) }
@1: push ecx
mov edx, ecx
lea esi, [intarr]
lea edi, [intarr]
inc edi
{ sort from 1 to 'sorting length' }
@2: mov bx, word prt [edi]
cmp {byte ptr} [esi], bx { i'm not sure -- i commented it }
jbe @3
xchg {byte ptr} [esi], bx { i'm not sure -- i commented it }
mov {byte ptr} [edi], bx { i'm not sure -- i commented it }
@3: inc edi
inc esi
inc edx { if }
cmp ecx, edx { not end }
jnz @2 { do again }
pop ecx
dec ecx { if }
cmp ecx, 1 { not end }
jnz @1 { do again }
{ restoring all registers }
POPAD
end; И ещё: всегда пиши комменты - всегда помогут
|
|
|
|
|