Я пытаюсь создать пузырьковую сортировку, которая следует этому алгоритму:
iterate = 0 ; reset outer loop condition
for i = 0 to N-2
if X[i] > X[i+1] then
swap X[i], X[i+1]
iterate = 1 ; this pass did at least 1 swap: not done
Until iterate = 0
Я получил этот код, но мой массив для X создает ошибку A2042 для больших значений (которые необходимы в этом случае ) и поэтому не может заглянуть в отладчик.
TITLE DISPLAY
.MODEL SMALL
.386
.STACK
.DATA
X SWORD 4, 16, 28, 88, 100, 32766, -16374, -19650, -22926, -56, -44, -32, -20, 3282,
-6546, -9822, -13098, 22938, -116, -68, -104, -92, 40, 16, -3270, 26214, 6558,
16386, 29490, 13110, 9834, 52, -128, -80, -8, 19662, -26202, -29478, 64, 76
count EQU (LENGTHOF X) ;two less than X
.code
.startup
;Program
MOV DX, count
L0:
MOV CX, DX
SUB CX, 2
LEA SI, X
L1:
MOV AX, WORD PTR [SI]
MOV BX, WORD PTR [SI+2]
CMP AX, BX
JLE common ; If AX <= BX, skip the below two lines
MOV WORD PTR [SI+2], AX ; Switch values: former BX to AX
MOV WORD PTR [SI], BX ; Switch values: former AX to BX
common:
ADD SI, 2
LOOP L1
DEC DX
JNZ L0
.exit
end