-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy path3.Conversion.arm
308 lines (244 loc) · 4.77 KB
/
3.Conversion.arm
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
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
DATAS SEGMENT
MESSAGE DB "PLEASE CHOOSE A FUNCTION:",0AH,0DH,'$'
MESSAGE2 DB "error!!!",0AH,0DH,'$'
MSG1 DB "1: Lowercase to Uppercase",0AH,0DH,'$'
MSG2 DB "2: Uppercase to lowercase",0AH,0DH,'$'
MSG3 DB "3: Binary to Hex ",0AH,0DH,'$'
MSG4 DB "4: Hex to Binary ",0AH,0DH,'$'
MSG5 DB "5: Hex to Decimal ",0AH,0DH,'$'
STR1 DB "PLEASE INPUTE A LETTER: ",0AH,0DH,'$'
STR2 DB "PLEASE INPUTE A NUMBER: ",0AH,0DH,'$'
STRRESULT DB "RESULT IS : ",0AH,0DH,'$'
RESULT DB ?
DATAS ENDS
STACKS SEGMENT
;此处输入堆栈段代码
STACKS ENDS
CODES SEGMENT
ASSUME CS:CODES,DS:DATAS,SS:STACKS
START:
MOV AX,DATAS
MOV DS,AX
MOV DX,OFFSET MESSAGE
MOV AH,09
INT 21H
MOV DX,OFFSET MSG1
MOV AH,09
INT 21H
MOV DX,OFFSET MSG2
MOV AH,09
INT 21H
MOV DX,OFFSET MSG3
MOV AH,09
INT 21H
MOV DX,OFFSET MSG4
MOV AH,09
INT 21H
MOV DX,OFFSET MSG5
MOV AH,09
INT 21H
MOV AH,01
INT 21H
CMP AL,'1'
JZ FLAG1
CMP AL,'2'
JZ FLAG2
CMP AL,'3'
JZ FLAG3
CMP AL,'4'
JZ FLAG4
CMP AL,'5'
JZ FLAG5
JMP ERROR ;输入其他报错
FLAG1:
INT 21H
MOV DX,OFFSET STR1
MOV AH,09
INT 21H
MOV AH,01
INT 21H
CMP AL,61H
JB ERROR
CMP AL,7AH
JA ERROR
SUB AL,20H
MOV RESULT,AL
CALL SHOW_RESULT
FLAG2:
INT 21H
MOV DX,OFFSET STR1
MOV AH,09
INT 21H
MOV AH,01
INT 21H
CMP AL,41H
JB ERROR
CMP AL,5AH
JA ERROR
ADD AL,20H
MOV RESULT,AL
CALL SHOW_RESULT
FLAG3:
INT 21H
MOV DX,OFFSET STR2
MOV AH,09
INT 21H
CALL BtoH
FLAG4:
INT 21H
MOV DX,OFFSET STR2
MOV AH,09
INT 21H
MOV AH,1
INT 21H
MOV RESULT,AL
INT 21H
CALL HtoB
FLAG5:
INT 21H
MOV DX,OFFSET STR2
MOV AH,09
INT 21H
MOV AH,1
INT 21H
MOV BL,AL
CALL HtoD
SHOW_RESULT PROC
INT 21H
MOV DX,OFFSET STRRESULT
MOV AH,09
INT 21H
MOV DL,RESULT
MOV AH,02
INT 21H
JMP EXIT
SHOW_RESULT ENDP
BtoH PROC
MOV DH,4
MOV BL,0
ACTI:
MOV AH,1
INT 21H
CMP AL,30H
JB ERROR
CMP AL,31H
JA ERROR
SUB AL,30H
SHL BL,1
ADD BL,AL
DEC DH
JZ CHANGE
JMP ACTI
CHANGE:
MOV DL,0AH ;回车
MOV AH,2
INT 21H
ADD BL,30H
CMP BL,39H
JA OTH
MOV DL,BL
MOV AH,2
INT 21H
JMP EXIT
OTH:
ADD BL,07H
MOV DL,BL
MOV AH,2
INT 21H
JMP EXIT
BtoH ENDP
HtoB PROC
MOV AL,RESULT
MOV CL,4 ;一次左移位数
MOV BX,0 ;记录左移之后的数字
MOV DH,4 ;输出4位二进制数字控制
INPUT:
CMP AL,30H
JB ERROR1 ;比0小则退出
CMP AL,39H
JA COMPARE ;比9大则判断与A的大小
JMP RESULT1 ;输入的是0-9之间的数字
COMPARE:
CMP AL,41H ;判断与A的大小
JB ERROR1 ;若小于A则退出
CMP AL,46H ;判断与F的大小
JA ERROR1 ;若比F大则退出
JMP RESULT2 ;进行到这一步则说明输入的是A-F,转换成二进制
RESULT1:
SUB AL,30H ;转换成0-9
OR BL,AL ; 进行或运算得到四位二进制
SHL BL,CL ;左移四位
JMP PRINT
RESULT2:
SUB AL,37H ;此时AL中是A-F,减去37H是0AH,0BH...0FH
OR BL,AL
SHL BL,CL
JMP PRINT
PRINT:
SHL BL,1
JNC JINWEI ;判断进位,如果是0 跳到JINWEI
MOV DL,'1' ;输出1
MOV AH,02H
INT 21H
DEC DH
JZ EXIT
JMP PRINT
JINWEI:
MOV DL,'0' ;输出0
MOV AH,02H
INT 21H
DEC DH
JZ EXIT
JMP PRINT
HtoB ENDP
HtoD PROC
CMP AL,30H
JB ERROR
CMP AL,39H
JA oth
MOV BL,AL
MOV DL,0AH ;回车
MOV AH,02H
INT 21H
MOV DL,BL
MOV AH,2
INT 21H
JMP EXIT
oth:
CMP AL,41H
CMP AL,46H
JA ERROR
MOV BL,10
DIV BL
MOV BL,AH
SUB BL,1
MOV BH,1
ADD BX,3030H
MOV DL,0AH ;回车
MOV AH,02H
INT 21H
MOV DL,BH
MOV AH,2
INT 21H
MOV Dl,BL
MOV AH,2
INT 21H
JMP EXIT
HtoD ENDP
ERROR:
INT 21H
MOV DX,OFFSET MESSAGE2 ;输入提示
MOV AH,09
INT 21H
JMP EXIT
ERROR1:
MOV DX,OFFSET MESSAGE2 ;输入提示
MOV AH,09
INT 21H
JMP EXIT
;此处输入代码段代码
EXIT:
MOV AH,4CH
INT 21H
CODES ENDS
END START