| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 754 人关注过本帖
标题:[原创]16进制输出
只看楼主 加入收藏
达达
Rank: 1
等 级:新手上路
帖 子:87
专家分:0
注 册:2005-5-26
收藏
 问题点数:0 回复次数:2 
[原创]16进制输出

写了个转换的方法,比较笨,
大致算法是
判断buf是否取完-否-取数-判断正负-<0则输出负号-保存相反数-取出这个数-取出32-29位
是-exit >=0则--------保存这个数-

(ebx)-右移28(cl)-查表输出-ebx右移4位-cl减4-判断ebx?=0--!=0跳到
=0跳到
大家看看:
DATA SEGMENG USE16
BUF DD -1,4,-2,7,-3,-3,-3,4 ;要转换的字符
N1 DB 8 ;字符的个数
STRING DB '0123456789ABCDEF'
MINUS DB '-','$' ;负号
DATA ENDS

MOV ESI,0
MOV SI,-1

DOG: INC SI; 循环次数
MOV AL,N1; 字符串的个数
MOV AH,0
CMP SI,AX
JZ EXIT
MOV EBX,0F0000000H; 第一次取值
MOV CL,28 ; 第一次移动位数
MOV CH,4 ; 移动位数改变量

MOV EAX,BUF[ESI*4] ; 取出第一个数
CMP EAX,0;************判断正负
JGE SAVE
LEA DX,MINUS ;如果负数就先输出一个负号
MOV AH,9
INT 21H
MOV EAX,BUF[ESI*4]; 注意 因为9号调用,这里 eax已经变了
NEG EAX;************** 求这个负数的相反数
SAVE: MOV EBP,EAX ; EBP保存的是已经去掉负号的数据
CAT: MOV EAX,EBP
AND EAX,EBX ; 取出相应位数
SHR EAX,CL ; 右移相应位数
MOV DI,AX ;
MOV DL,STRING[DI]; 查表输出
MOV AH,2
INT 21H
SHR EBX,4 ;
SUB CL,CH
CMP EBX,0 ;ebx和0比较
JZ DOG ;=0 则 第一个数据转换完成
JMP CAT ;!=0 则继续转换


这是我想的办法,那位达人能给个好的办法?

[此贴子已经被作者于2006-5-31 8:27:46编辑过]

搜索更多相关主题的帖子: 进制 输出 STRING DATA 
2006-05-31 08:23
jt1026
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2006-5-31
收藏
得分:0 

我是个更菜的菜鸟
达人能不能帮我弄个
把DX中的二进制数以16进制形式显示在屏幕上

2006-05-31 13:27
达达
Rank: 1
等 级:新手上路
帖 子:87
专家分:0
注 册:2005-5-26
收藏
得分:0 
你怎么能这样呢?
学习这种东西要考自己努力的

2006-05-31 22:57
快速回复:[原创]16进制输出
数据加载中...
 
   



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

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