. : : Assembly Language : : .  |  首页  |  我提出的问题  |  我参与的问题  |  我的收藏  |  消息中心   |  游客  登录  | 
刷新 | 提问 | 未解决 | 已解决 | 精华区 | 搜索 |
  《汇编语言》论坛 ->基础知识
  管理员: assembly   [回复本贴] [收藏本贴] [管理本贴] [关闭窗口]
主题 : :  传说中的菜鸟问题  [待解决] 回复[ 6次 ]   点击[ 1053次 ]  
martian
[帖 主]   [ 发表时间:2007-11-13 09:27 ]   [引用]   [回复]   [ top ] 
荣誉值:12
信誉值:0
注册日期:2007-07-26 10:58
十进制数25698如何转换为十六进制的数据?
望各位大侠把思路写出来,先行谢过。
fishboy
[第1楼]   [ 回复时间:2007-11-13 11:58 ]   [引用]   [回复]   [ top ] 
荣誉值:283
信誉值:0
注册日期:2007-06-26 11:42
1.按照书上讲的一个数转换成十进制方式,对该数据除以16取余。
2.mov ax ,idata
  shl(shr) ax,4
通过移位。
huibian
[第2楼]   [ 回复时间:2007-11-14 10:09 ]   [引用]   [回复]   [ top ] 
荣誉值:117
信誉值:2
注册日期:2007-09-04 10:41
楼上讲的太好了

不过我还没用过第二种(好像是在汇编书的后半部分,还没有学到)
我只会第一种的做法,给你举个小例子把

求十进制252的十六进制的值(方法是除以16取余数)

   商  余数
 16|252 12  可以这样写,252除以16商15余数12(本行的12和下行的第一个15)
    16|15  15
        0
          
 所以结果是FC(看余数),F就是十六进制的15,C就是十六进制的12,为了区分其它进制的表示方法,在后面加个H,即十六进制的252表示为FCH.(不知道说明白没有~_~"")

附上一个十进制数转换为二进制数
除以2取余数。(十六机制是除以16取余数)
例:把18表示成二进制。
18÷2=9 余0
9÷2=4 余1
4÷2=2 余0
2÷2=1 余0
1÷2=0 余1
将各次余数从右向左排列即得10010B,所以18=10010B。(由于是二进制表示,所以最后加一个B,同十六进制的H)
happy
[第3楼]   [ 回复时间:2007-11-14 11:03 ]   [引用]   [回复]   [ top ] 
荣誉值:32
信誉值:0
注册日期:2007-07-14 19:06
转换成16进制,2进制的数据可以在16进制的基础上进行转换,8进制的数据可以在2进制的基础上转换,1位16进制转换为4位2进制,3位2进制,转换为1位8进制,也就是说2,8,16进制的转换比较灵活。
realfiona
[第4楼]   [ 回复时间:2007-11-14 13:53 ]   [引用]   [回复]   [ top ] 
荣誉值:6
信誉值:0
注册日期:2007-11-14 13:44
以前写过一个10进制转换成16进制的例子,测试数的范围是0~ffff
;*********************************************************************
MUL10    macro                        ;1234 = ((((1*10)+2)*10)+3)*10+4 
         push     ax
         mov      ax,    TEN
         mov      bx,    ax
         mul      cl
         xchg     bx,    ax
         mov      al,    ah
         mul      cl
         add      ax,    bx
         mov      TEN,   ax
         pop      ax 
         endm

         .model    small
         .data
TEN      dw       0
TABLE    db       '0123456789abcdef'        
         .code
         .startup
         mov      cl,    10
READ:                                         ;TEN stores the num TEN=1234 
         mov      ah,    1
         int      21h
         cmp      al,    13                   ;回车 结束 
         jz       DISP         
         MUL10                    
         and      ax,    000fh
         add      TEN,   ax
         jmp      READ
DISP:                                         ;display the num in 16
         lea      bx,    TABLE
         mov      cl,    12
RR: 
         mov      ax,    TEN
         shr      ax,    cl
         and      ax,    000fh
         xlat                                  ;xlat --> mov al,byte ptr[bx+al]
         mov      dl,    al
         mov      ah,    2
         int      21h
         sub      cl,    4
         jnc      RR

         .exit
         end
clouldy
[第5楼]   [ 回复时间:2008-01-24 19:20 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2008-01-17 18:48
我有一个比较快的方法,用附件里的科学计算器,比较快。。哈哈!高手误笑!
huibian
[第6楼]   [ 回复时间:2008-01-25 09:47 ]   [引用]   [回复]   [ top ] 
荣誉值:117
信誉值:2
注册日期:2007-09-04 10:41
o(∩_∩)o...

熟练了手算十进制转十六进制这个基本功,用计算器偷个懒也未尝不可啊:-)用的要是自己的编个计算器就更好了~
需要登录后才能回帖 -->> 请单击此处登录
    Copyright © 2006-2024   ASMEDU.NET  All Rights Reserved