我试着写在86(MASM32)冒泡排序。 排序不起作用。 我测试过的一些代码,它出现在比较和交换的部分被搞砸了。 出于某种原因,比较函数总是指派2至EAX。 如果我能找出原因,我可以得到程序的工作。
感谢您的帮助提前。
.data
aa DWORD 10 DUP(5, 7, 6, 1, 4, 3, 9, 2, 10, 8)
count DWORD 0
; DB 8-bits, DW 16-bit, DWORD 32, WORD 16 BYTE 8
.code ; Tell MASM where the code starts
; «««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««
start: ; The CODE entry point to the program
mov esi, count ;loop count
outer:
inc esi
mov edi, count
cmp esi, 9
je end_loop
inner: ;this loop represents a full pass on the entire array
inc edi
cmp edi, 9 ;after 9 passes goes to outer loop
je outer
compare:
mov eax, [aa + edi * 4h] ;higher indexed one
mov ebx, [aa + edi * 4h - 4h]
;testing print chr$(13,10)
;testing print str$(eax)
;testing print chr$(13, 10)
;testing print str$(ebx)
;testing print chr$(13, 10)
cmp ebx, eax
jg swap
swap:
mov [aa + edi * 4h], eax
mov [aa + edi * 4h + 4], ebx
jmp inner
end_loop:
;print out array elements
sub esi, esi
mov esi, [aa]
print str$(esi)
print chr$(" ")
sub esi, esi
mov esi, [aa + 4h]
print str$(esi)
print chr$(" ")
sub esi, esi
mov esi, [aa + 4h * 2]
print str$(esi)
print chr$(" ")
sub esi, esi
mov esi, [aa + 4h * 3]
print str$(esi)
print chr$(" ")
sub esi, esi
mov esi, [aa + 4h * 4]
print str$(esi)
print chr$(" ")
sub esi, esi
mov esi, [aa + 4h * 5]
print str$(esi)
print chr$(" ")
sub esi, esi
mov esi, [aa + 4h * 6]
print str$(esi)
print chr$(" ")
sub esi, esi
mov esi, [aa + 4h * 7]
print str$(esi)
print chr$(" ")
sub esi, esi
mov esi, [aa + 4h * 8]
print str$(esi)
print chr$(" ")
sub esi, esi
mov esi, [aa + 4h * 9]
print str$(esi)
print chr$(" ")
sub esi, esi
exit
; «««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««
end start ; Tell MASM where the program ends