| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2831 人关注过本帖
标题:一个把输入的16制数转换成二进制数,并输出的问题
取消只看楼主 加入收藏
cabin0120
Rank: 1
等 级:新手上路
帖 子:47
专家分:0
注 册:2006-9-6
结帖率:0
收藏
 问题点数:0 回复次数:3 
一个把输入的16制数转换成二进制数,并输出的问题

DATAS SEGMENT
DATA1 db 'inputerorr','$'
DATA2 DB 16 dup(?),'$'
DATAS ENDS

STACKS SEGMENT
;此处输入堆栈段代码
STACKS ENDS

CODES SEGMENT
ASSUME CS:CODES,DS:DATAS,SS:STACKS
START:
MOV AX,DATAS
MOV DS,AX
LEA DI,DATA2
MOV CX,4
MOV BL,00H
L1:MOV AH,01
INT 21H
CMP AL,30H
JA L2
JMP L
L2:CMP AL,39H
JNA L4
CMP AL,41H
JA L3
JMP L
L3:CMP AL,46
JNA2 L5
L:LEA DX,DATA1
MOV AH,9
INT 21H
L4:SUB AL,30H
JMP L6
L5:SUB AL,37H
L6:PUSH CX
MOV CL,4
SHL AL,CL
MOV CX,4
SHL AL,1
ADC BL,30H
MOV [DI],BL
INC DI
LOOP L6
POP CX
LOOP L1
LEA DX,DATA2
MOV AH,9
INT 21H
MOV AH,4CH
INT 21H
CODES ENDS
END START
程序执行后一输入字符,DOS界面就退出了,路过次地的高手帮小弟一把,谢谢了

搜索更多相关主题的帖子: 二进制数 CMP 堆栈 STACKS SEGMENT 
2007-11-11 20:56
cabin0120
Rank: 1
等 级:新手上路
帖 子:47
专家分:0
注 册:2006-9-6
收藏
得分:0 
非常感谢....
不过还有一点不明白,如果我输入的是正确的16进制数的话,程序根本不会经过L,而且就算L不退出我也实在看不出为什么要死循环?????

[此贴子已经被作者于2007-11-16 17:58:41编辑过]

2007-11-16 17:42
cabin0120
Rank: 1
等 级:新手上路
帖 子:47
专家分:0
注 册:2006-9-6
收藏
得分:0 

您在开头加的 push ds
sub ax,ax
push ax
不懂是什么意思>>>>

2007-11-16 18:08
cabin0120
Rank: 1
等 级:新手上路
帖 子:47
专家分:0
注 册:2006-9-6
收藏
得分:0 

还是这个程序,我稍微改了一下,能调试出来,
第一个程序在第二程序的基础上加了红色部分,目的是想连续输入几个16进制数,但是在输入第二数时就出现了乱码,请教一下斑竹这是为什么???


一...................
DATAS SEGMENT
DATA1 db 'inputerorr','$' ;此处输入数据段代码 ]
DATA2 DB 16 dup(?),'$'
DATAS ENDS

STACKS SEGMENT
;此处输入堆栈段代码
STACKS ENDS

CODES SEGMENT
ASSUME CS:CODES,DS:DATAS,SS:STACKS
START:
MOV AX,DATAS
MOV DS,AX
LEA DI,DATA2 ;此处输入代码段代码

MOV BL,4
L8:MOV CX,4
L1:MOV AH,01
INT 21H
CMP AL,30H
JA L2
JMP L
L2:CMP AL,39H
JNA L4
CMP AL,41H
JA L3
JMP L
L3:CMP AL,46
JNA L5
L:LEA DX,DATA1
MOV AH,9
INT 21H
JMP L1
L4:SUB AL,30H
JMP L6
L5:SUB AL,37H


L6: SHL AL,CL

L7: SHL AL,1

MOV BL,00H
RCL BL,1
ADC BL,30H
MOV [DI],BL
INC DI
LOOP L7


DEC BL
JNZ L8

MOV DL,0AH
MOV AH,2
INT 21H

LEA DX,DATA2
MOV AH,9
INT 21H

MOV AH,4CH
INT 21H
CODES ENDS
END START



二..................

DATAS SEGMENT
DATA1 db 'inputerorr','$' ;此处输入数据段代码 ]
DATA2 DB 16 dup(?),'$'
DATAS ENDS

STACKS SEGMENT
;此处输入堆栈段代码
STACKS ENDS

CODES SEGMENT
ASSUME CS:CODES,DS:DATAS,SS:STACKS
START:
MOV AX,DATAS
MOV DS,AX
LEA DI,DATA2 ;此处输入代码段代码
MOV CX,4


L1:MOV AH,01
INT 21H
CMP AL,30H
JA L2
JMP L
L2:CMP AL,39H
JNA L4
CMP AL,41H
JA L3
JMP L
L3:CMP AL,46
JNA L5
L:LEA DX,DATA1
MOV AH,9
INT 21H
JMP L1
L4:SUB AL,30H
JMP L6
L5:SUB AL,37H


L6: SHL AL,CL

L7: SHL AL,1

MOV BL,00H
RCL BL,1
ADC BL,30H
MOV [DI],BL
INC DI
LOOP L7




MOV DL,0AH
MOV AH,2
INT 21H

LEA DX,DATA2
MOV AH,9
INT 21H

MOV AH,4CH
INT 21H
CODES ENDS
END START

[此贴子已经被作者于2007-11-18 8:57:38编辑过]

2007-11-17 21:11
快速回复:一个把输入的16制数转换成二进制数,并输出的问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.016366 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved