删除内存中的负数元素,要求以16进制输入一串数,执行后以10进制形式输出

 

 
  
1 STA SEGMENT STACK
2 DW 40H DUP(?)
3 TOP LABEL WORD
4 STA ENDS
5
6 DATA SEGMENT
7 LIST DW 300 DUP(?)
8 CRLF DB 0DH,0AH,24H
9 DATA ENDS
10
11 CODE SEGMENT
12 ASSUME CS: CODE, DS: DATA, SS: STA, ES: DATA
13 MAIN PROC FAR
14 MOV AX,STA
15 MOV SS,AX
16 LEA SP,TOP
17 MOV AX,DATA
18 MOV DS,AX
19 MOV AX,DATA
20 MOV ES,AX
21
22   ; ---------------------------------------------------------------------------------------
23  
24 MOV BP, 0
25 MOV SI, 0
26 L33: MOV CX, 5
27
28 XOR BX,BX
29 L22: MOV AH, 1
30 INT 21H
31
32 CMP AL, ' '
33 JE L34
34 CMP AL,0DH
35 JE L35
36
37 CMP AL,30H ; 判断0~9之间的数
38 JB L22
39 CMP AL,39H
40 JBE L23 ; 若为数字,跳到L23行
41
42 CMP AL,41H ; 判断在A~F之间
43 JB L22
44 CMP AL,46H
45 JBE L24 ; 若为A~F范围数跳到24行
46
47 CMP AL,61H ; 判断a~f范围数
48 JB L22
49 CMP AL,66H
50 JA L22
51
52 SUB AL,20H ; 若为小写字母,则先减20跳到大写字母处
53
54 L24: SUB AL, 7
55
56 L23: SUB AL,30H
57 PUSH CX
58 MOV CL, 4
59 SHL BX,CL
60 ADD BL,AL
61 POP CX
62 LOOP L22
63
64 L34: MOV LIST[SI],BX
65 ADD SI, 2
66 INC BP
67 JMP L33
68
69
70 L35:
71 MOV LIST[SI],BX
72 INC BP
73
74 MOV AH, 9
75 LEA DX,CRLF
76 INT 21H
77
78 LEA SI,LIST
79
80 ; --------------------------------------------------------------------------------------
81
82
83
84 MOV CX,BP
85 MOV DI,SI
86 CLD
87 XOR BP,BP
88 L1: LODSW
89 TEST AX,8000H
90 JNZ L2
91 STOSW
92 INC BP
93 L2: LOOP L1
94
95 ; --------------------------------------------------------------------------------开始处理
96
97 MOV SI, 0
98 L111:
99 MOV BX,LIST[SI]
100 OR BX,BX
101 JNS L20 ; 若sp为0时转移
102
103 MOV DL, ' - '
104 MOV AH, 2
105 INT 21H
106 NEG BX
107
108 ; --------------------------------------------------------------------------------------------此步多余,可删
109
110 L20:
111
112 MOV AX,BX
113 MOV CX, 0
114
115 L30: XOR DX,DX
116 MOV BX, 10
117 DIV BX
118 PUSH DX
119 INC CX
120 CMP AX, 0
121 JNE L30
122
123 ; --------------------------------------------------------------------得出的十进制数进栈
124
125
126 L40:
127
128 POP DX
129 ADD DL,30H
130 MOV AH, 2
131 INT 21H
132 LOOP L40
133
134 MOV DL, ' '
135 MOV AH, 2
136 INT 21H
137 ADD SI, 2
138 DEC BP
139 JNE L111
140
141 ; ---------------------------------------------------------------------
142
143 MOV AH,4CH
144 INT 21H
145 MAIN ENDP
146 CODE ENDS
147 END MAIN
148

 

转载于:https://www.cnblogs.com/SCAU_que/articles/1723321.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值