📄 ripplesort.asm
字号:
; Date: 11.03.2004
; last modification: 27.03.2004
.code
IFNDEF PURE_ALGORITHM
RippleSort PROTO :DWORD, :DWORD
RippleSort PROC Arr:DWORD, count:DWORD
mov ebx, Arr
sub ebx, 4
mov ecx, count
shl ecx, 2
add ecx, ebx
@Loop1:
add ebx, 4
cmp ebx, ecx
jae @Return
;-------------------------------------------------------------------------------
DelayAfterPass
;-------------------------------------------------------------------------------
mov eax, ebx
@Loop2:
add eax, 4
cmp eax, ecx
ja @Loop1
;-------------------------------------------------------------------------------
IncCMPCounter
DelayAfterComparison eax, ebx
;-------------------------------------------------------------------------------
mov edx, DWORD PTR [eax]
cmp DWORD PTR [ebx], edx
jna @Loop2
mov edi, DWORD PTR [ebx]
mov DWORD PTR [ebx], edx
mov DWORD PTR [eax], edi
;-------------------------------------------------------------------------------
IncMOVCounter
RefreshElement ebx
RefreshElement eax
DelayAfterExchange
;-------------------------------------------------------------------------------
jmp @Loop2
@Return:
ret
RippleSort ENDP
ELSE
RippleSort_PURE PROTO :DWORD, :DWORD
RippleSort_PURE PROC Arr:DWORD, count:DWORD
mov ebx, Arr
sub ebx, 4
mov ecx, count
shl ecx, 2
add ecx, ebx
@Loop1:
add ebx, 4
cmp ebx, ecx
jae @Return
mov eax, ebx
@Loop2:
add eax, 4
cmp eax, ecx
ja @Loop1
;-------------------------------------------------------------------------------
IncCMPCounter
;-------------------------------------------------------------------------------
mov edx, DWORD PTR [eax]
cmp DWORD PTR [ebx], edx
jna @Loop2
mov edi, DWORD PTR [ebx]
mov DWORD PTR [ebx], edx
mov DWORD PTR [eax], edi
;-------------------------------------------------------------------------------
IncMOVCounter
;-------------------------------------------------------------------------------
jmp @Loop2
@Return:
ret
RippleSort_PURE ENDP
ENDIF
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -