アセンブリ言語で QUICK SORT を実装しようとしていました。エミュレーターでコードを実行すると、配列 'ARR' にはゼロのみが含まれ、値は読み込まれません。何が間違っているのかわかりません。(ARR はコードの最後に定義されています。)
CODE SEGMENT
ASSUME CS:CODE,DS:CODE
ORG 1000H
MOV DI,05H ; LAST INDEX (6-1)
XOR SI,SI; INNITAL INDEX
XOR BX,BX; PIVOT INDEX
XOR BP,BP;
CALL QSORT
HLT
QSORT:
PUSH BP
PUSH DI
PUSH SI
CALL PARTITION
MOV SI,BP;
INC SI ; PIVOT INDEX +1 = INITIA IDEX
CMP SI,DI
JNL SKIP_CALL
CALL QSORT
SKIP_CALL:
POP SI;
PUSH SI;
MOV DI,BP;
DEC DI;
CMP SI,DI;
JNL SKIP_AGAIN
CALL QSORT
SKIP_AGAIN:
POP SI;
POP DI;
POP BP;
RET
PARTITION:
PUSH SI
PUSH DI
MOV BP,SI ;PIVOT INDEX
DEC SI; // TO INVALIDATE FIRST INCREMENT
FOR_1:
INC SI
CMP SI,DI
JGE END_FOR_1
MOV AL,ARR[SI]
CMP AL,ARR[DI]; COMPAREING TWO INDEXVAL
JL NO_SWAP
;SWAP OPERATION
PUSH AX;
XOR AX,AX; ENSURING ZEROS IN AH
MOV AL,ARR[BP]; SAVING ARR[SI] CONTENT
MOV ARR[SI],AL;
POP AX;
MOV ARR[BP],AL; SAVING BP'S CONTENT IN SI :P
INC BP;
NO_SWAP:
JMP FOR_1;
END_FOR_1:
MOV AL,ARR[DI];
MOV AH,ARR[BP];
MOV ARR[DI],AH;
MOV ARR[BP],AL;
POP DI;
POP SI;
RET
ORG 1500H
ARR DB 01H,02H,0AH,03H,00H,0CH; RANDOM ARRAY
NAME DW 'ANKLON'
ENDS
をテストするために、変数ウィンドウにも表示されていない別の文字列配列をその後に追加します。
誰が私の間違いがどこにあるかを示すことができますか?