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