以16进制输入n个实验要求将ARY数组中的所有元素以10进制有符号输出

 

 
  
1 STA SEGMENT STACK
2 DW 40H DUP(?)
3 TOP LABEL WORD
4 STA ENDS
5
6 DATA SEGMENT
7
8 ARY DW 300 DUP(?)
9 CRLF DB 0DH,0AH,24H
10 DATA ENDS
11
12 CODE SEGMENT
13 ASSUME CS: CODE, SS: STA, DS: DATA
14
15 MAIN PROC FAR
16 MOV AX,STA
17 MOV SS,AX
18 LEA SP,TOP
19 MOV AX,DATA
20 MOV DS,AX
21
22
23
24 MOV BP, 0 ; BP计数输入了多少个16进制数
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
35
36 CMP AL,0DH
37 JE L35
38
39 CMP AL,30H ; 判断0~9之间的数
40   JB L22
41 CMP AL,39H
42 JBE L23 ; 若为数字,跳到L23行
43
44
45
46 CMP AL,41H ; 判断在A~F之间
47 JB L22
48 CMP AL,46H
49 JBE L24 ; 若为A~F范围数跳到24行
50
51
52
53 CMP AL,61H ; 判断a~f范围数
54 JB L22
55 CMP AL,66H
56 JA L22
57
58 SUB AL,20H ; 若为小写字母,则先减20跳到大写字母处
59
60 L24: SUB AL, 7 ; 大写,减7得到对应的数字代表
61
62 L23: SUB AL,30H
63 PUSH CX ; 先把计数的CX进栈,因为后面要用到
64 MOV CL, 4
65 SHL BX,CL
66 ADD BL,AL
67 POP CX
68 LOOP L22
69
70 L34: MOV ARY[SI],BX ; 输入的数存入内存中
71 ADD SI, 2
72 INC BP
73 JMP L33
74
75
76 L35:
77
78 MOV ARY[SI],BX ; 因为判断回车那里没把回车前的数存入内存,这里补回
79
80 INC BP
81
82
83 MOV AH, 9
84 LEA DX,CRLF
85 INT 21H
86
87
88
89
90 MOV SI, 0
91
92 L1:
93 MOV BX,ARY[SI]
94 OR BX,BX
95 JNS L20 ; 若sp为0时转移
96
97
98
99 MOV DL, ' - '
100 MOV AH, 2
101 INT 21H
102 NEG BX
103
104
105
106 L20:
107
108 MOV AX,BX
109 MOV CX, 0
110
111 L30: XOR DX,DX
112 MOV BX, 10
113 DIV BX
114 PUSH DX
115 INC CX
116 CMP AX, 0
117 JNE L30 ; 得出的十进制数进栈
118
119
120 L4: POP DX
121 ADD DL,30H
122 MOV AH, 2
123 INT 21H
124 LOOP L4
125
126 MOV DL, ' '
127 MOV AH, 2
128 INT 21H
129 ADD SI, 2
130 DEC BP
131 JNE L1
132
133
134
135 MOV AH,4CH
136 INT 21H
137 MAIN ENDP
138 CODE ENDS
139 END MAIN
140

 

 

 

这里写得比较乱,我也没办法,跳来跳去,郁闷,要改进呀!

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值