| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1622 人关注过本帖
标题:[求助]将二进制数以八进制形式输出,运行结果是乱码
只看楼主 加入收藏
story
Rank: 1
等 级:新手上路
帖 子:18
专家分:0
注 册:2006-11-25
收藏
 问题点数:0 回复次数:8 
[求助]将二进制数以八进制形式输出,运行结果是乱码

data segment
X dw 0000000000001100d
data ends

code segment
assume cs:code, ds:data
main proc far
start:
push ds
mov ax, 0
push ax
mov ax, data
mov ds, ax
mov ax, X
mov bx, 0000000000000111d  ;用来屏蔽X的非第三位的所有数
mov cl, -3          ;移位控制器 
mov dx, 6          ;计数器
loop1:
add cl, 3
shr ax, cl
and ax, bx
add al, 30h
mov dl, al
mov ah, 2
int 21h
dec dx
jnz loop1
ret
main endp
code ends
end start

搜索更多相关主题的帖子: 八进制 二进制数 mov 乱码 计数器 
2006-12-12 14:47
lefttime
Rank: 1
等 级:新手上路
帖 子:162
专家分:0
注 册:2006-10-6
收藏
得分:0 
首先,这句已经出现问题
X dw 0000000000001100d;
接着下面这条语句会行不通,因为BX为16位,而你却让它存入17位数
mov bx, 0000000000000111d
如果我没猜错的话,你应该把d改成b,以二进制形式输入吧!

我是金子,我要闪光的
2006-12-12 18:05
lefttime
Rank: 1
等 级:新手上路
帖 子:162
专家分:0
注 册:2006-10-6
收藏
得分:0 
总体来说,想法不错,只是程序执行完是倒序的,好好再想想
不过注意你这个循环
loop1:
add cl, 3
shr ax, cl
and ax, bx ;第一次ax是可以,不过第二次你的ax又从哪里来的值?!
add al, 30h
mov dl, al ;从这开始,你已经对计数器进行重新赋值
mov ah, 2 ;这里ax的值已经被改变
int 21h
dec dx ;这样可是无限循环啊
jnz loop1
ret

我是金子,我要闪光的
2006-12-12 18:57
story
Rank: 1
等 级:新手上路
帖 子:18
专家分:0
注 册:2006-11-25
收藏
得分:0 

多谢楼上的,按你说的我已经改过了,可是还是过不了.....
***********改进版如下************

data segment
X dw 0000000000001100b
data ends

code segment
assume cs:code, ds:data
main proc far
start:
push ds
mov ax, 0
push ax
mov ax, data
mov ds, ax
mov bx, 0000000000000111b  ;用来屏蔽X的非低三位的所有数
mov cl, -3          ;移位控制器 
mov ch, 0
mov dh, 6          ;计数器
loop1:
mov ax, X
add cl, 3
shr ax, cl
and ax, bx
add al, 30h
push al
inc ch
dec dh
jnz loop1
loop2:
pop al
mov dl, al
mov ah, 2
int 21h
dec ch
jnz loop2
ret
main endp
code ends
end start


等价交换
2006-12-12 20:27
lefttime
Rank: 1
等 级:新手上路
帖 子:162
专家分:0
注 册:2006-10-6
收藏
得分:0 
你用的是什么编译器
push和pop不能接8位寄存器的吧
怎么出现 push al和pop al

我是金子,我要闪光的
2006-12-12 20:29
story
Rank: 1
等 级:新手上路
帖 子:18
专家分:0
注 册:2006-11-25
收藏
得分:0 

我用的是最简单的那个MASM
是我搞错了,栈只能以字操作
已经改过了 可是编译时还报错
***********************************
Microsoft (R) Macro Assembler Version 5.00
Copyright (C) Microsoft Corp 1981-1985, 1987. All rights reserved.

Object filename [4-4pro2.OBJ]:
Source listing [NUL.LST]:
Cross-reference [NUL.CRF]:
4-4pro2.asm(14): error A2027: Operand expected
4-4pro2.asm(15): error A2027: Operand expected
4-4pro2.asm(17): error A2027: Operand expected

50042 + 451366 Bytes symbol space free

0 Warning Errors
3 Severe Errors

E:\huibian>
***************************

报的错不可理解


等价交换
2006-12-12 20:41
菜鸟上路
Rank: 4
等 级:贵宾
威 望:14
帖 子:1120
专家分:0
注 册:2006-3-21
收藏
得分:0 
以下是引用story在2006-12-12 20:41:45的发言:

我用的是最简单的那个MASM
是我搞错了,栈只能以字操作
已经改过了 可是编译时还报错
***********************************
Microsoft (R) Macro Assembler Version 5.00
Copyright (C) Microsoft Corp 1981-1985, 1987. All rights reserved.

Object filename [4-4pro2.OBJ]:
Source listing [NUL.LST]:
Cross-reference [NUL.CRF]:
4-4pro2.asm(14): error A2027: Operand expected
4-4pro2.asm(15): error A2027: Operand expected
4-4pro2.asm(17): error A2027: Operand expected

50042 + 451366 Bytes symbol space free

0 Warning Errors
3 Severe Errors

E:\huibian>
***************************

报的错不可理解

可能夹杂了不可辨认字符


2006-12-12 21:08
story
Rank: 1
等 级:新手上路
帖 子:18
专家分:0
注 册:2006-11-25
收藏
得分:0 
楼上的,难道编译器还不能辨认0和1么

等价交换
2006-12-12 21:12
公子吕
Rank: 1
等 级:新手上路
帖 子:79
专家分:0
注 册:2006-5-4
收藏
得分:0 
把那几行的汉字注释去掉。。。
2006-12-12 22:05
快速回复:[求助]将二进制数以八进制形式输出,运行结果是乱码
数据加载中...
 
   



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

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