アセンブリ言語問題3
3759 ワード
変数BUF 3には10個の符号付きバイトデータが格納されており、プログラミングはこの10個の数を小さいものから大きいものに並べ替える.特に、負数出力の問題は解決されず、出力は依然として補符号である
DATAS SEGMENT
BUF3 DW 10,-1,2,3,5,4,6,0,8,9
DATA4 DB',$'
DATA5 DB'-$'
DATAS ENDS
STACKS SEGMENT
DW 256 DUP(?)
STACKS ENDS
CODES SEGMENT
ASSUME CS:CODES,DS:DATAS,SS:STACKS
START:
MOV AX,DATAS
MOV DS,AX
;
MOV SI,0
MOV CX,9
MOV DI,0
LOOP0:
CALL SORT
ADD DI,2
LOOP LOOP0
MOV CX,10
MOV DI,0
AGAIN0:
CALL PRINT
CALL SPACE
ADD DI,2
LOOP AGAIN0
;
EXIT:
MOV AH,4CH
INT 21H
;
SPACE PROC NEAR
PUSH AX
PUSH DX
MOV DX,OFFSET DATA4
MOV AH,9
INT 21H
POP DX
POP AX
RET
SPACE ENDP
;
SORT PROC NEAR
PUSH BX
PUSH DX
MOV SI,DI
LOOP1:
ADD SI,2
MOV BX, BUF3 [DI]
CMP BX, BUF3 [SI]
JG CHANGE
JMP NEXT
CHANGE:
MOV DX, BUF3 [SI]
MOV BUF3 [DI],DX
MOV BUF3 [SI],BX
NEXT:
CMP SI,18
JL LOOP1
POP DX
POP BX
RET
SORT ENDP
;
PRINT PROC NEAR
PUSH AX
PUSH BX
PUSH CX
PUSH DX
MOV CX,0
MOV BX,10
MOV AX, BUF3 [DI]
LAST:
MOV DX,0
DIV BX
PUSH DX
INC CX
CMP AX,0
JNZ LAST
AGE:
POP DX
OR DX,30H
MOV AH,2
INT 21H
LOOP AGE
POP DX
POP CX
POP BX
POP AX
RET
PRINT ENDP
CODES ENDS
END START