| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1890 人关注过本帖
标题:[讨论]这段8位二进制转十六进制的程序不能改成16位的?
只看楼主 加入收藏
huhu520hh
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2007-5-16
收藏
 问题点数:0 回复次数:5 
[讨论]这段8位二进制转十六进制的程序不能改成16位的?

从键盘上接收二进制数并转换为十六进制数显示
为什么我改成16位后结果就是错的?
应该怎么改?
data segment
num db 8 dup(0)

data ends
code segment
main proc far
assume cs:code,ds:data
start:
push ds
sub ax,ax
push ax
mov ax,data
mov ds,ax
lea si,num

mov cx,7
loopa:
cmp cx,0
jl next1
mov ah,1
int 21h
cmp al,30h
jb loopa
cmp al,31h
ja loopa
and al,0fh
shl al,cl
mov [si],al
inc si
dec cx
jmp loopa

next1:
mov si,offset num
mov bl,[si]
add bl,[si+1]
add bl,[si+2]
add bl,[si+3]
add bl,[si+4]
add bl,[si+5]
add bl,[si+6]
add bl,[si+7]
MOV dl, 0dh
MOV ah, 02h
int 21h
MOV dl, 0ah
MOV ah, 02
int 21h
mov ch,2
rotate: mov cl,4
rol bl,cl
mov al,bl
and al,0fh
add al,30h
cmp al,3ah
jl printit
add al,7h
printit:
mov dl,al
mov ah,2
int 21h
dec ch
jnz rotate
ret
main endp
code ends
end start

修改后 :
data segment
num db 16 dup(0) ;这修改了
data ends
code segment
main proc far
assume cs:code,ds:data
start:
push ds
sub ax,ax
push ax
mov ax,data
mov ds,ax
lea si,num

mov cx,15;这修改了
loopa:

cmp cx0
jl next1
mov ah,1
int 21h

cmp al,30h
jb loopa
cmp al,31h
ja loopa
and al,0fh
shl al,cl
mov [si],al
inc si
dec cx
jmp loopa


next1: mov si,offset num
mov bx,[si]
add bx,[si+1]
add bx,[si+2]
add bx,[si+3]
add bx,[si+4]
add bx,[si+5]
add bx,[si+6]
add bx,[si+7]
add bx,[si+8] ;这往下修改了
add bx,[si+9]
add bx,[si+10]
add bx,[si+11]
add bx,[si+12]
add bx,[si+13]
add bx,[si+14]
add bx,[si+15]
mov dl, 0dh
mov ah, 02h
int 21h
mov dl, 0ah
mov ah, 02
int 21h

mov cl,4 ;这修改了
mov ch,4
rotate: rol bx,cl
mov al,bl
and al,0fh
add al,30h
cmp al,3ah
jl printit
add al,7h
printit:
mov dl,al
mov ah,2
int 21h
dec ch
ja rotate

MOV DL,'H'
MOV AH,2
INT 21H
ret
main endp
code ends
end start
那出问题了?

搜索更多相关主题的帖子: 二进制 十六进制 
2007-05-26 02:48
菜鸟上路
Rank: 4
等 级:贵宾
威 望:14
帖 子:1120
专家分:0
注 册:2006-3-21
收藏
得分:0 
第一个程序也是错的吧
不光要修改CX,AL也要改

2007-05-26 10:00
huhu520hh
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2007-5-16
收藏
得分:0 

第一个程序没有错
我修改了CX和BL 把BL改成了BX
AL 那里的AL能修改呢
mov ah,1
int 21h
cmp al,30h
jb loopa
cmp al,31h
ja loopa
and al,0fh
这里的AL是 1号功能存储的地方 改了就会出错
下面的改了同样也会出错!~~
问题在那呢? 难道真的不能变成16位的?

2007-05-26 12:00
菜鸟上路
Rank: 4
等 级:贵宾
威 望:14
帖 子:1120
专家分:0
注 册:2006-3-21
收藏
得分:0 
我是说rotate那要改

2007-05-27 18:05
sk941
Rank: 1
等 级:新手上路
帖 子:14
专家分:0
注 册:2007-5-14
收藏
得分:0 
这是照你的那个8位改过来的16位,
data segment
num db 8 dup(0)

data ends
STACK SEGMENT STACK
DW 100 DUP(0)
STACK ENDS
code segment
main proc far
assume cs:code,ds:data,SS:STACK
start:
push ds
sub ax,ax
push ax
mov ax,data
mov ds,ax
lea si,num

MOV CL,0
MOV BL,0
L0: CMP CL,15
JA L1
INC CL
MOV AH,1
INT 21H
CMP AL,30H
JB L0
CMP AL,31H
JA L0
SUB AL,30H
SHL BX,1
MOV AH,0
ADD BX,AX
JMP L0
L1: MOV dl, 0dh
MOV ah, 02h
int 21h
MOV dl, 0ah
MOV ah, 02
int 21h
mov ch,4
rotate: mov cl,4
rol BX,cl
mov al,bl
and al,0fh
add al,30h
cmp al,3ah
jl printit
add al,7h
printit:
mov dl,al
mov ah,2
int 21h
dec ch
jnz rotate
ret
main endp
code ends
end start
你的那个[SI+XX],看的我心慌慌,就该改了一点,没关系吧,这个调试过了,可以用

2007-05-31 21:48
g19871001
Rank: 1
等 级:新手上路
帖 子:37
专家分:0
注 册:2007-6-3
收藏
得分:0 

长```懒得看```能不能缩短点``^^

2007-06-04 00:04
快速回复:[讨论]这段8位二进制转十六进制的程序不能改成16位的?
数据加载中...
 
   



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

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