insertionsort.asm
来自「一个演示了用汇编语言编写的数据排序算法,源代码非常详细」· 汇编 代码 · 共 155 行
ASM
155 行
; Date: 11.03.2004
; last modification: 04.04.2004
.code
IFNDEF PURE_ALGORITHM
InsertionSort PROTO :DWORD, :DWORD
InsertionSort PROC Arr:DWORD, count:DWORD
mov ecx, Arr
mov edi, count
dec edi
shl edi, 2
add edi, ecx
mov ebx, ecx
@Loop1:
add ebx, 4
cmp ebx, edi
ja @Return
;-------------------------------------------------------------------------------
DelayAfterPass
;-------------------------------------------------------------------------------
mov edx, DWORD PTR [ebx]
mov eax, ebx
sub eax, 4
@Loop2:
cmp eax, ecx
jb @Loop2a
;-------------------------------------------------------------------------------
IncCMPCounter
DelayAfterComparison eax, ebx
;-------------------------------------------------------------------------------
cmp edx, DWORD PTR [eax]
jnb @Loop2a
mov esi, DWORD PTR [eax]
mov DWORD PTR [eax + 4], esi
;-------------------------------------------------------------------------------
IncMOVCounter
push eax
add eax, 4
RefreshElement eax
pop eax
DelayAfterExchange
;-------------------------------------------------------------------------------
sub eax, 4
jmp @Loop2
@Loop2a:
mov DWORD PTR [eax + 4], edx
;-------------------------------------------------------------------------------
IncMOVCounter
push eax
add eax, 4
RefreshElement eax
pop eax
DelayAfterExchange
;-------------------------------------------------------------------------------
jmp @Loop1
@Return:
ret
InsertionSort ENDP
ELSE
InsertionSort_PURE PROTO :DWORD, :DWORD
InsertionSort_PURE PROC Arr:DWORD, count:DWORD
mov ecx, Arr
mov edi, count
dec edi
shl edi, 2
add edi, ecx
mov ebx, ecx
@Loop1:
add ebx, 4
cmp ebx, edi
ja @Return
mov edx, DWORD PTR [ebx]
mov eax, ebx
sub eax, 4
@Loop2:
cmp eax, ecx
jb @Loop2a
;-------------------------------------------------------------------------------
IncCMPCounter
;-------------------------------------------------------------------------------
cmp edx, DWORD PTR [eax]
jnb @Loop2a
mov esi, DWORD PTR [eax]
mov DWORD PTR [eax + 4], esi
;-------------------------------------------------------------------------------
IncMOVCounter
;-------------------------------------------------------------------------------
sub eax, 4
jmp @Loop2
@Loop2a:
mov DWORD PTR [eax + 4], edx
;-------------------------------------------------------------------------------
IncMOVCounter
;-------------------------------------------------------------------------------
jmp @Loop1
@Return:
ret
InsertionSort_PURE ENDP
ENDIF
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?