-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy path6.ASM
95 lines (84 loc) · 1.24 KB
/
6.ASM
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
;编写程序,将一个包含有20个数据的数组M 分成2个数组:正数数组P 和负数数 组N,并分别把这两个数组中数据的个数显示出来
S1 SEGMENT
M DW 20,-20,10,11,1,-1,2,-2,3,-3,4,-4,5,-5,6,-6,7,-7,8,-8
LEN EQU ($-M)/2
P DW 20H DUP(?)
N DW 20H DUP(?)
CRLF DB 0DH,0AH,24H
S1 ENDS
S2 SEGMENT STACK
DW 60H DUP(?)
TOS LABEL WORD
S2 ENDS
S3 SEGMENT
ASSUME DS:S1,SS:S2,CS:S3
MAIN PROC FAR
MOV AX,S1
MOV DS,AX
MOV AX,S2
MOV SS,AX
LEA SP,TOS
LEA SI,M
XOR BX,BX;P
XOR DI,DI;N
MOV CX,LEN;数组长度放入CX
L1: MOV AX,[SI]
CMP AX,0
JG CNT1;有符号数比较大于
JL CNT2;有符号数比较小于
JMP L2;等于
CNT1: MOV P[BX],AX
ADD BX,2
JMP L2
CNT2: MOV N[DI],AX
ADD DI,2
L2: ADD SI,2
LOOP L1
MOV AX,2;BX除以2
XOR DX,DX
XCHG AX,BX
DIV BX
XCHG AX,BX;AX结果送回BX
PUSH BX
XOR DX,DX;DI除以2
MOV AX,DI
MOV BX,2
DIV BX
MOV DI,AX;AX结果送回DI
POP BX
XOR CX,CX;十进制输出P的个数BX
MOV AX,BX
L3: XOR DX,DX
MOV BX,10
DIV BX
PUSH DX
INC CX
CMP AX,0
JNE L3
L4: POP DX
ADD DL,30H
MOV AH,02H
INT 21H
LOOP L4
LEA DX,CRLF
MOV AH,09H
INT 21H
XOR CX,CX;十进制输出N的个数DI
MOV AX,DI
L5: XOR DX,DX
MOV BX,10
DIV BX
PUSH DX
INC CX
CMP AX,0
JNE L5
L6: POP DX
ADD DL,30H
MOV AH,02H
INT 21H
LOOP L6
EXIT: MOV AH,4CH
INT 21H
MAIN ENDP
S3 ENDS
END MAIN