急求帮助 16位MS-DOS子系统遇到无效指令
这是我编的一个汇编语言的排序,要求输入20个有符号数,排序后在屏幕上输出
代码:
DATAS SEGMENT
BUFF DB 150
DB ?
DB 150 DUP(?) ;存储字符串
ARY DB 60 DUP(0) ;存放转换后的BCD码
P1 DB 'Input the number : (-9999~9999)','$'
P2 DB 'The result is :','$'
CR DB 0DH,0AH,'$'
P3 DB '-','$'
P4 DB 'SP','$'
DATAS ENDS
STACKS SEGMENT
ST1 DB 100 DUP(?)
TOP LABEL WORD
STACKS ENDS
CODES SEGMENT
ASSUME CS:CODES,DS:DATAS,SS:STACKS
MAIN PROC FAR
START: MOV AX,STACKS
MOV SS,AX
MOV SP,OFFSET TOP
;;输入字符串
MOV AX,DATAS
MOV DS,AX
MOV AH,09
LEA DX,P1
INT 21H
LEA DX,CR
INT 21H
MOV DX,OFFSET BUFF
MOV AH,0AH
INT 21H
MOV AH,09
LEA DX,CR
INT 21H
MOV DX,OFFSET BUFF
MOV BX,DX
MOV CX,[BX+1]
ADD DX,2
LEA BX,ARY
;;转换成压缩型BCD码,存入数组ARY中
MOV SI,DX
ASC2BCD: SUB DX,DX
MOV AL,[SI]
CMP AL,' '
JNZ ZF
INC SI
DEC CX
CMP CX,0
JZ PAIXU
JMP ASC2BCD
ZF: CMP AL,'-'
JNZ CHK
MOV [BX],1
INC SI
DEC CX
MOV AL,[SI]
JMP NEXT
CHK: CMP AL,'+'
JNZ NEXT
INC SI
DEC CX
MOV AL,[SI]
NEXT: PUSH CX
MOV CL,4
SHL DX,CL
POP CX
CMP AL,'0'
JB ERR
CMP AL,'9'
JA ERR
AND AX,000FH
ADD DX,AX
JC ERR
INC SI
DEC CX
MOV AL,[SI]
CMP AL,' '
JNZ NEXT
MOV [BX+1],DH
MOV [BX+2],DL
ADD BX,3
INC SI
LOOP ASC2BCD
LEA BX,ARY
;;排序
PAIXU: MOV CX,19
L1: MOV DX,CX
L2: MOV AX,[BX]
CMP AX,[BX+3]
JB JIAOHUAN
JA JIAOHUANH
CMP AX,0
JNZ FUSHU
MOV AX,[BX+1]
CMP AX,[BX+4]
JA JIAOHUAN
JB JIAOHUANH
MOV AX,[BX+2]
CMP AX,[BX+5]
JA JIAOHUAN
JMP JIAOHUANH
FUSHU: MOV AX,[BX+1]
CMP AX,[BX+4]
JB JIAOHUAN
JA JIAOHUANH
MOV AX,[BX+2]
CMP AX,[BX+5]
JB JIAOHUAN
JMP JIAOHUANH
JIAOHUAN: XCHG AX,[BX+3]
MOV [BX],AX ;;;;;;;;;??????
MOV AX,[BX+1]
XCHG AX,[BX+4]
MOV [BX+1],AX
MOV AX,[BX+2]
XCHG AX,[BX+5]
MOV [BX+2],AX
JIAOHUANH: ADD BX,3
LOOP L2
MOV CX,DX
LEA BX,ARY
LOOP L1
;;输出
MOV AH,09
LEA DX,P2
INT 21H
LEA DX,CR
INT 21H
MOV CX,20
SHUCHU: PUSH CX
MOV CH,4
MOV CL,4
MOV AX,[BX]
CMP AX,0
JZ NEXT1
MOV AH,09
LEA DX,P3
INT 21H
NEXT1: MOV AH,[BX+1]
MOV AL,[BX+2]
LZ: ROL AX,CL
MOV DL,BL
AND DL,0FH
CMP DL,0
JNZ LNZ
DEC CH
JNZ LZ
LL: ROL BX,CL
MOV DL,BL
AND DL,0FH
LNZ: ADD DL,30H
MOV AH,2
INT 21H
DEC CH
JNZ LL
MOV AH,09
LEA DX,P4
INT 21H
POP CX
LOOP SHUCHU
ERR: RET
MAIN ENDP
CODES ENDS
END START