| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1550 人关注过本帖
标题:输入十进制转为二进制然后显示出来的程序不得结果!/
只看楼主 加入收藏
我的汇
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2006-4-20
收藏
 问题点数:0 回复次数:7 
输入十进制转为二进制然后显示出来的程序不得结果!/
这个程序是个输入十进制转为二进制然后显示出来的程序帮我看呀

没有错不过不得结果!


DATA SEGMENT
BUF0 DB 'PLEASE INPUT NMUBER:',0DH,0AH,'$'
BUFI db 7
db ?
db 7 dup(0) ;输入缓冲区
BUFER DB 0DH,0AH,'$'
DATA ENDS
STACK SEGMENT STACK
DB 200 DUP(0)
STACK ENDS
CODE SEGMENT
ASSUME CS:CODE,SS:STACK,DS:DATA
START: MOV AX,DATA
MOV DS,AX
LEA DX,BUF0 ;提显
mov AH,9
int 21h
lea DX,BUFI ;-------开始输入--------------------
MOV AH,10
INT 21H
MOV CH,BUFI+1;输入的个数
lea DI,BUFI+2 ;的偏移地址
CALL CHANGE;转换
lea dx,bufer
mov ah,9
int 21h
CALL DISPBXB ;显示二进制子程序
MOV AH,4CH
INT 21H
CHANGE PROC NEAR;------转换子程序----------------------
;push ds
;mov ax,0
;push ax ;保护现场
;mov ax,data
; mov ds,ax ;送段地址
lea di,BUFI+2;instr的偏移地址
mov ax,0
next: mov bl,[di];送要转换数的数
SUB BL,30H
mov bh,0
mov si,ax
MOV CL,3
shl ax,CL ;*8
shl si,1 ;*2
add ax,si ;10*p
add ax,bx ;10*p+Q
dec CH;下一个个数
jz exit;退出子程序
inc di;指向下一个数
jmp next
exit: ret
CHANGE endp
DISPBXB PROC NEAR;----------显示二进制-----------------
MOV CX,16
LP: ROL AX,1
JC Data1
MOV DL,30H
JMP OUTP
Data1:MOV DL,31H
OUTP:mov AH,2
INT 21H
LOOP LP
MOV DL,'B' ;-----显示B-------
MOV AH,2
INT 21H
RET
DISPBXB ENDP

CODE ENDS
END START
搜索更多相关主题的帖子: 二进制 十进制 STACK SEGMENT 
2006-04-24 19:13
忧伤的飞鸟
Rank: 1
等 级:新手上路
帖 子:33
专家分:0
注 册:2006-4-11
收藏
得分:0 
楼主把number写错了.
应该把ret改为 mov ah,4ch
int 21h

天天想钱,天天想赚到钱,但现在都还没钱~~
2006-05-05 17:46
忧伤的飞鸟
Rank: 1
等 级:新手上路
帖 子:33
专家分:0
注 册:2006-4-11
收藏
得分:0 
在键盘输入好象是用02号功能吧!哈哈.帮不了你了.
罪过罪过!

天天想钱,天天想赚到钱,但现在都还没钱~~
2006-05-05 18:05
公子吕
Rank: 1
等 级:新手上路
帖 子:79
专家分:0
注 册:2006-5-4
收藏
得分:0 

不要急.明天给你结果
说实话,这里的水源确实不够
不过也好,山中无老虎,猴子称霸王

2006-05-05 19:09
汪洋
Rank: 1
等 级:新手上路
帖 子:26
专家分:0
注 册:2006-5-5
收藏
得分:0 
估计错误应该在下面这一段,而红色标记出错的可能性最大。

DISPBXB PROC NEAR;----------显示二进制-----------------
MOV CX,16
LP: ROL AX,1
JC Data1
MOV DL,30H
JMP OUTP

2006-05-06 11:50
公子吕
Rank: 1
等 级:新手上路
帖 子:79
专家分:0
注 册:2006-5-4
收藏
得分:0 

你的转换子程序里的
mov ax,0
稍后是:
mov si,ax
MOV CL,3
shl ax,CL ;*8
shl si,1 ;*2
add ax,si ;10*p
你把个0又移位又作'与'运算,确实令人费解.
不过我也还没有写出完整的程序,还请大家多支招.

2006-05-06 15:28
汪洋
Rank: 1
等 级:新手上路
帖 子:26
专家分:0
注 册:2006-5-5
收藏
得分:0 

我知道楼主的意思,他是把AX做为一个累加器,当然要先清0了,我认为他在这个地方应该没错,可是我也没在程序的其他地方找到错误。


2006-05-06 15:37
汪洋
Rank: 1
等 级:新手上路
帖 子:26
专家分:0
注 册:2006-5-5
收藏
得分:0 
楼主的程序思路很清晰,但就是没有注意保护AX中的数据,我稍微改了一下,就没有问题了。

DATA SEGMENT
BUF0 DB 'PLEASE INPUT NMUBER:',0DH,0AH,'$'
BUFI db 7
db ?
db 7 dup(0) ;输入缓冲区
BUFER DB 0DH,0AH,'$'
DATA ENDS
STACK SEGMENT STACK
DB 200 DUP(0)
STACK ENDS
CODE SEGMENT
ASSUME CS:CODE,SS:STACK,DS:DATA
START: MOV AX,DATA
MOV DS,AX
LEA DX,BUF0 ;提显
mov AH,9
int 21h
lea DX,BUFI ;-------开始输入--------------------
MOV AH,10
INT 21H
MOV CH,BUFI+1;输入的个数
lea DI,BUFI+2 ;的偏移地址
CALL CHANGE;转换
PUSH AX ;将AX入栈保护,否则将被下面的MOV AH,9改动
lea dx,bufer
mov ah,9
int 21h
POP AX ;AX出栈
CALL DISPBXB ;显示二进制子程序
MOV AH,4CH
INT 21H
CHANGE PROC NEAR;------转换子程序----------------------
;push ds
;mov ax,0
;push ax ;保护现场
;mov ax,data
; mov ds,ax ;送段地址
lea di,BUFI+2;instr的偏移地址
mov ax,0
next: mov bl,[di];送要转换数的数
SUB BL,30H
mov bh,0
mov si,ax
MOV CL,3
shl ax,CL ;*8
shl si,1 ;*2
add ax,si ;10*p
add ax,bx ;10*p+Q
dec CH;下一个个数
jz exit;退出子程序
inc di;指向下一个数
jmp next
exit: ret
CHANGE endp
DISPBXB PROC NEAR;----------显示二进制-----------------
MOV CX,16
LP: ROL AX,1
JC Data1
MOV DL,30H
JMP OUTP
Data1:MOV DL,31H
OUTP:
push ax ;将AX入栈,因为下面MOV AH,2将改动AX的内容
mov AH,2
INT 21H
pop ax ;出栈AX
LOOP LP
MOV DL,'B' ;-----显示B-------
MOV AH,2
INT 21H
RET
DISPBXB ENDP

CODE ENDS
END START

2006-05-08 10:16
快速回复:输入十进制转为二进制然后显示出来的程序不得结果!/
数据加载中...
 
   



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

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