アセンブリ言語問題3


変数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