以下是我写的一个排名次的算法,问题见代码中注释
NUM = 3
I = 1
J = 1
DATAS SEGMENT
GRADE DW 1,2,3
RANK DW NUM DUP(?)
DATAS ENDS
CODES SEGMENT
ASSUME CS:CODES,DS:DATAS
START:
MOV AX,DATAS
MOV DS,AX
MOV RANK[0],1
LPI:
MOV RANK[2*I],I+1 ;无论是第几次运行到这里,I的植总是1
MOV AX,GRADE[2*I]
J=I
LPJ:
J=J-1
CMP AX,GRADE[2*J]
JL TRYJ
JE EQUAL
DEC RANK[2*I]
INC RANK[2*J]
JMP TRYJ
EQUAL:
MOV AX,RANK[2*J]
MOV RANK[2*I],AX
TRYJ:
MOV AX,J
CMP AX,0
JNZ LPJ
TRYI:
I=I+1
MOV AX,I ;
CMP AX,NUM
JBE LPI
MOV AH,4CH
INT 21H
CODES ENDS
END START
------解决方案--------------------------------------------------------
I, J 应该定义成变量吧. 作为常量定义时, 它们值的改变是以编译时扫描到的顺序来决定的, 不是以执行次序来的.