|
发表于 2014-6-4 23:14:31
|
显示全部楼层
本帖最后由 kikiatw 于 2014-6-4 23:38 编辑
寫好久的...
ASSUME CS:CODE, DS:DATA, SS:STACK
DATA SEGMENT
DB '1975','1976','1977','1978','1979','1980','1981' ;0
DB '1982','1983','1984','1985','1986','1987','1988'
DB '1989','1990','1991','1992','1993','1994','1995'
DD 16,22,382,1356,2390,8000,16000,24486 ;84
DD 50065,97479,140417,197514,345980,590827,803530
DD 1183000,1843000,2759000,3753000,4649000,5937000
DW 3,7,9,13,28,38,130 ;168
DW 220,476,778,1001,1442,2258,2793
DW 4037,5635,8226,11542,14430,15257,17800
DATA ENDS
TABLE SEGMENT
DB 21 DUP ('YYYY EARN EP AV ')
TABLE ENDS
STACK SEGMENT
DW 50H DUP (0)
STACK ENDS
CODE SEGMENT
MAIN:
MOV AX,STACK ;initial stack segment
MOV SS,AX
MOV SP,50H
MOV AX,DATA ;initial data into table segment
MOV DS,AX
MOV AX,TABLE
MOV ES,AX
CALL SORT
MOV AX,TABLE ;initial print data
MOV DS,AX
MOV AX,0B800H
MOV ES,AX
MOV BX,0
MOV SI,0
MOV DI,0
MOV CX,21
M1: PUSH CX
MOV AX,[SI] ;print character
MOV ES:[DI],AL
MOV ES:[DI+2],AH
MOV AX,[SI+2]
MOV ES:[DI+4],AL
MOV ES:[DI+6],AH
MOV AX,[SI+7] ;print DEC number to string
MOV DX,[SI+5]
MOV CX,DI
ADD CX,20H
CALL DTOC32
MOV AX,0 ;print DEC number to string
MOV DX,[SI+10]
MOV CX,DI
ADD CX,40H
CALL DTOC32
MOV AX,0 ;print DEC number to string
MOV DX,[SI+13]
MOV CX,DI
ADD CX,60H
CALL DTOC32
ADD SI,10H
ADD DI,0A0H
POP CX
LOOP M1
MOV AX, 4C00H
INT 21H
SORT: MOV CX,21
MOV BX,0
MOV SI,0
MOV DI,0
S1: PUSH CX
MOV AX,[SI]
MOV ES:[DI],AX
MOV AX,[SI+2]
MOV ES:[DI+2],AX
MOV AX,84[SI]
MOV ES:[DI+5],AX
MOV DX,86[SI]
MOV ES:[DI+7],DX
MOV CX,168[BX]
MOV ES:[DI+10],CX
DIV CX
MOV ES:[DI+13],AX
ADD DI,10H
ADD SI,04H
ADD BX,02H
POP CX
LOOP S1
RET
;DTOC32 show the double word DEC on the screen
;AX:H word
;DX:L word
;CX:Location offset at B800H Segment
DTOC32: PUSH DI
PUSH SI
MOV DI,CX ;DI location pointer
MOV SI,DX ;SI to save low word
MOV BX,0 ;BX to be byte count
DT1: MOV DX,0
MOV CX,10
DIV CX
MOV CX,AX
MOV AX,SI
MOV SI,CX
MOV CX,10
DIV CX
PUSH DX
INC BX
MOV CX,AX
JCXZ DT2
MOV AX,SI
MOV SI,CX
JMP DT1
DT2: MOV CX,BX
DT3: POP DX
ADD DL,30H
MOV ES:[DI],DL
ADD DI,2
LOOP DT3
POP SI
POP DI
RET
CODE ENDS
END MAIN
|
|