📄 排序.lst
字号:
Turbo Assembler Version 4.1 08/05/20 13:22:44 Page 1
C:\DOCUME~1\ADMINI~1\MYDOCU~1\汇编程序\排序.ASM
1 0000 DSEG SEGMENT ;数据段:在此处添加程序所需的数据
2 0000 14*(????) NUMBER DW 20 DUP (?)
3 0028 ???? COUNT DW ?
4 002A DSEG ENDS
5 0000 CSEG SEGMENT
6 ASSUME CS:CSEG, DS:DSEG
7 0000 MAIN PROC FAR ;主程序入口
8 0000 B8 0000s MOV AX, DSEG
9 0003 8E D8 MOV DS, AX
10 0005 E8 000F CALL INPUT ;从键盘输入一组十进制数(每个数不超过3个字符), +
11 存于数组number中
12 0008 E8 0040 CALL SORT ;将该组数按升序排序
13 000B E8 0063 CALL DISP ;将结果送显示器显示,按任意键退出
14 000E B4 01 MOV AH,1
15 0010 CD 21 INT 21H ;程序结束,返回到操作系统系统
16 0012 B8 4C00 MOV AX, 4C00H
17 0015 CD 21 INT 21H
18 0017 MAIN ENDP
19 0017 INPUT PROC
20 0017 BE 0000r LEA SI,NUMBER
21 001A BB 0000 NEXT: MOV BX, 0
22 001D B9 0003 MOV CX,3
23 0020 B4 01 NEWCHAR: MOV AH, 1 ;键盘输入,每个数据以回车结束
24 0022 CD 21 INT 21H
25 0024 3C 20 CMP AL,20H ;全部数据以空格结束
26 0026 74 22 JZ TJ
27 0028 2C 30 SUB AL, 30H
28 002A 7C 10 JL EXIT ; <0退出
29 002C 3C 09 CMP AL, 9
30 002E 7F 0C JG EXIT ; >9退出
31 0030 98 CBW
32 0031 93 XCHG AX, BX
33 0032 B9 000A MOV CX, 10
34 0035 F7 E1 MUL CX
35 0037 93 XCHG AX, BX
36 0038 03 D8 ADD BX, AX
37 003A E2 E4 LOOP NEWCHAR
38 003C EXIT:
39 003C E8 0069 CALL CRLF
40 003F FF 06 0028r INC COUNT
41 0043 89 1C MOV [SI],BX
42 0045 83 C6 02 ADD SI,2
43 0048 EB D0 JMP NEXT
44 004A C3 TJ: RET
45 004B INPUT ENDP
46
47 004B SORT PROC
48 004B 8B 0E 0028r MOV CX,COUNT
49 004F 49 DEC CX
50 0050 8B F9 LOOP1: MOV DI,CX
51 0052 BB 0000 MOV BX,0
52 0055 8B 87 0000r LOOP2: MOV AX,NUMBER[BX]
53 0059 3B 87 0002r CMP AX,NUMBER[BX+2]
54 005D 7E 08 JLE CONTINUE
55 005F 87 87 0002r XCHG AX,NUMBER[BX+2]
56 0063 89 87 0000r MOV NUMBER[BX],AX
57 0067 83 C3 02 CONTINUE: ADD BX,2
Turbo Assembler Version 4.1 08/05/20 13:22:44 Page 2
C:\DOCUME~1\ADMINI~1\MYDOCU~1\汇编程序\排序.ASM
58 006A E2 E9 LOOP LOOP2
59 006C 8B CF MOV CX,DI
60 006E E2 E0 LOOP LOOP1
61 0070 C3 RET
62 0071 SORT ENDP
63
64 0071 DISP PROC
65 0071 8B 0E 0028r MOV CX,COUNT
66 0075 BE 0000r LEA SI,NUMBER
67 0078 REPEAT1:
68 0078 8B 1C MOV BX,[SI]
69 007A BF 0064 MOV DI,100D
70 007D E8 0015 CALL DEC_DIV
71 0080 BF 000A MOV DI,10D
72 0083 E8 000F CALL DEC_DIV
73 0086 BF 0001 MOV DI,1D
74 0089 E8 0009 CALL DEC_DIV
75 008C E8 0019 CALL CRLF
76 008F 83 C6 02 ADD SI,2
77 0092 E2 E4 LOOP REPEAT1
78 0094 C3 RET
79 0095 DISP ENDP
80 0095 DEC_DIV PROC NEAR
81 0095 8B C3 MOV AX,BX
82 0097 BA 0000 MOV DX,0
83 009A F7 F7 DIV DI
84 009C 8B DA MOV BX,DX
85 009E 8A D0 MOV DL,AL
86 00A0 80 C2 30 ADD DL,30H
87 00A3 B4 02 MOV AH,2
88 00A5 CD 21 INT 21H
89 00A7 C3 RET
90 00A8 DEC_DIV ENDP
91
92 00A8 CRLF PROC NEAR
93 00A8 B2 0A MOV DL,0AH
94 00AA B4 02 MOV AH,2
95 00AC CD 21 INT 21H
96 00AE B2 0D MOV DL,0DH
97 00B0 B4 02 MOV AH,2
98 00B2 CD 21 INT 21H
99 00B4 C3 RET
100 00B5 CRLF ENDP
101 00B5 CSEG ENDS
102 END MAIN
Turbo Assembler Version 4.1 08/05/20 13:22:44 Page 3
Symbol Table
Symbol Name Type Value Cref (defined at #)
??DATE Text "08/05/20"
??FILENAME Text "排序 "
??TIME Text "13:22:44"
??VERSION Number 040A
@CPU Text 0101H
@CURSEG Text CSEG #1 #5
@FILENAME Text 排序
@WORDSIZE Text 2 #1 #5
CONTINUE Near CSEG:0067 54 #57
COUNT Word DSEG:0028 #3 40 48 65
CRLF Near CSEG:00A8 39 75 #92
DEC_DIV Near CSEG:0095 70 72 74 #80
DISP Near CSEG:0071 13 #64
EXIT Near CSEG:003C 28 30 #38
INPUT Near CSEG:0017 10 #19
LOOP1 Near CSEG:0050 #50 60
LOOP2 Near CSEG:0055 #52 58
MAIN Far CSEG:0000 #7 102
NEWCHAR Near CSEG:0020 #23 37
NEXT Near CSEG:001A #21 43
NUMBER Word DSEG:0000 #2 20 52 53 55 56 66
REPEAT1 Near CSEG:0078 #67 77
SORT Near CSEG:004B 12 #47
TJ Near CSEG:004A 26 #44
Groups & Segments Bit Size Align Combine Class Cref (defined at #)
CSEG 16 00B5 Para none #5 6
DSEG 16 002A Para none #1 6 8
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -