1 ;程序设计的要求:通过键盘给一个四位的16进制数,程序把它转换成10进制数,并显示出来。
  2 ;把输入的4位16进制数以10十进制的值存放到变量num中,注意num可能会有5位数。所以下面
  3 ;就通过÷,%(10000,1000,100,10)来得到每一位数,即十进制数.
  4 ;相同的道理,把num转换为16进制
  5 DSEG SEGMENT
  6     ;数据段:在此处添加程序所需的数据
  7     num dw ?
  8     arr dw 10 dup(?)
  9     STRING1  DB  '[choce 0 (dec->hex) or 1 (hex->dec)]:$'
 10     STRING2  DB  '[input a hex number which must be four digits]:$'
 11     STRING3  DB  '[input a dec number which must be four digits]:$'
 12 DSEG ENDS
 13
 14 CSEG SEGMENT
 15 ;***************************************************************************
 16 MAIN PROC FAR          ;主程序入口
 17     assume  cs:CSEG, ds:DSEG
 18 ;---------------------------------------------------------------------------
 19 chose:
 20     mov ax, DSEG
 21     mov ds, ax
 22     mov es, ax
 23
 24     lea dx, STRING1
 25     mov ah, 9
 26     int 21h         ; output string at ds:dx
 27
 28     mov ah, 01h     ;键盘输入并回显,AL=input char
 29     int 21h
 30     cmp al,30h      ;和'0'比较
 31     je  start2      ;转到10-16进制入口
 32     cmp al,31h      ;和'1'比较
 33     je  start1      ;转到16-10进制入口
 34     call change     ;换行,重新选择
 35     jmp chose       ;输入错误,让其重新输入
 36 ;---------------------------------------------------------------------------
 37 start1:             ;4位16进制转10进制,入口
 38        call change     ;自动换行
 39
 40     lea dx, STRING2
 41     mov ah, 9
 42     int 21h         ; output string at ds:dx
 43
 44     mov num, 0
 45     mov cx, 4        ;输入4位16进制数(这里没有处理少于或多于4位的情况)
 46 L1:    mov ah, 01h     ;键盘输入并回显,AL=input char
 47     int 21h
 48     push cx         ;保护cx
 49     mov cl, 4
 50     shl num, cl        ;输入的数以10进制的形式存到num中[逻辑左移4位,SHL OPR,CNT 前一个不能是操作数,后一个为CL寄存器]
 51     pop cx
 52
 53     cmp al, 3ah     ;<9直接al-'0'扩展->num->bx
 54     jb s1
 55     cmp al,47h      ;9< <G  [小写的大于大写的]
 56     jb x1
 57     sub al,20h      ;小写的比大写的多减去20h
 58 x1:    sub al, 7h
 59 s1:    sub al, 30h
 60     mov ah, 0
 61     add num, ax
 62     mov bx, num
 63     loop L1
 64 solve1:
 65     call change     ;自动换行
 66     call fun1        ;调用主函数
 67     call change
 68     jmp  chose
 69     call exit        ;退出
 70 ;--------------------------------------------------------------------------
 71 start2:
 72     call change     ;自动换行
 73
 74     lea dx, STRING3
 75     mov ah, 9
 76     int 21h         ; output string at ds:dx
 77
 78     mov num, 0
 79     mov cx, 4        ;输入4位16进制数(这里没有处理少于或多于4位的情况)
 80 L2:    mov ah, 01h     ;键盘输入并回显,AL=input char
 81     int 21h
 82     push cx         ;保护cx
 83     push ax
 84     mov cx,10d
 85     mov ax,num      ;字乘法:(dx,ax)=ax*src
 86     mul cx
 87     mov num,ax      ;把ax给num
 88     pop ax
 89     pop cx
 90 s2:    sub al, 30h     ;输入转换为数字-'0'
 91     mov ah, 0
 92     add num, ax
 93     mov bx, num
 94     loop L2
 95     jmp  solve2
 96 solve2:
 97     call change     ;自动换行
 98     call fun2        ;调用主函数
 99     call change
100     jmp  chose
101     call exit        ;退出
102 ;******************************************************************************;
103 MAIN ENDP
104
105 fun1 proc           ;被除数放在dx中
106     mov cx, 10000d    ;把除数存放到cx中
107     call dec_div
108
109     mov cx, 1000d
110     call dec_div
111
112     mov cx, 100d
113     call dec_div
114
115     mov cx, 10d
116     call dec_div
117
118     mov cx, 1d
119     call dec_div
120     ret
121 fun1 endp
122
123 dec_div     proc    ;除法实现,除数为cx的值
124     mov ax, bx
125     mov dx, 0
126     div cx          ;div 无符号:div src 16位操作:商ax=(dx,ax)/src,余数dx
127     mov bx, dx
128     mov dl, al
129
130     add dl, 30h     ;转换为char并显示
131     mov ah, 02h
132     int 21h
133     ret
134 dec_div    endp
135 ;------------------------------------------------------------------------
136 fun2 proc           ;被除数放在dx中
137     mov cx,1000h    ;把除数存放到cx中
138     call hex_div
139
140     mov cx,0100h
141     call hex_div
142
143     mov cx,0010h
144     call hex_div
145
146     mov cx,0001h
147     call hex_div
148
149     ret
150 fun2 endp
151
152 hex_div     proc    ;除法实现,除数为cx的值
153     mov ax, bx
154     mov dx, 0
155     div cx          ;div 无符号:div src 16位操作:商ax=(dx,ax)/src,余数dx
156     mov bx, dx
157     mov dl, al
158
159     cmp dl, 10d     ;和10比   >=10
160     jb show
161     add dl,7h       ;>=10的情况
162 show:
163     add dl, 30h     ;转换为char并显示
164     mov ah, 02h
165     int 21h
166     ret
167 hex_div    endp
168 ;*************************************************************************************************
169 ;回车换行
170 change     proc
171     push ax
172     mov ah, 02h
173     mov dl, 0ah
174     int 21h
175     mov ah, 02h
176     mov dl, 0dh
177     int 21h
178     pop ax
179     ret
180 change    endp
181 ;*************************************************************************************************
182 ;退出
183 exit    proc
184     ;按任意键退出
185     mov ah,1
186     int 21h
187     mov ax, 4c00h  ;程序结束,返回到操作系统
188     int 21h
189 exit    endp
190 ;*************************************************************************************************
191 END MAIN
192 CSEG ENDS
本文转自beautifulzzzz博客园博客,原文链接:http://www.cnblogs.com/zjutlitao/p/3664704.html,如需转载请自行联系原作者

[汇编] 十进制与十六进制互转相关推荐

  1. Delphi十进制和十六进制互转 Delphi 自带函数 IntToHex

    Delphi十进制和十六进制互转 Delphi 自带函数 IntToHex 功能说明:该函数用于将"十进制"转换成"十六进制".该函数有二个参数.第一个参数为要 ...

  2. Python二进制、八进制、十进制、十六进制互转示例

    Python二进制.八进制.十进制.十六进制互转 在Python中各种进制的转换还是比较方便的,都有内置的方法 二进制 bin 八进制 oct 十六进制 hex 十进制 int 通过以上4个方法就可以 ...

  3. 整理C# 二进制,十进制,十六进制 互转

    //十进制转二进制 Console.WriteLine(Convert.ToString(69, 2)); //十进制转八进制 Console.WriteLine(Convert.ToString(6 ...

  4. Delphi十进制和十六进制互转

    1.十进制转十六进制 Delphi 自带函数 IntToHex 功能说明:该函数用于将"十进制"转换成"十六进制".该函数有二个参数.第一个参数为要转换的十进制 ...

  5. 进制转换 二进制,八进制,十进制,十六进制互转

    什么是'次幂' 某数的次幂即为某数的次方,即某数与本身相乘*次 概念:2的0次幂是1 2的1次幂是2 2的2次幂是2✖2 2的3次幂是2✖2✖2 2的4次幂是2✖2✖2✖2 如10的5次幂=10✖10 ...

  6. 二进制、八进制、十进制、十六进制之间的转换(含小数的转换方法)

    一.十进制与二进制互转 1. 二进制转十进制 1011010.100101(2)=90.578125(10) 方法一:"按权相加"法 256 128 64 32 16 8 4 2 ...

  7. VB 进制转换大全(十进制、十六进制、八进制、二进制、二进制流)互转

    模块包含了下面的各种转换: 二进制转十进制 二进制转化为八进制 二进制转化为十六进制 八进制转化为十进制 八进制转化为二进制 八进制转化为十六进制 十进制转二进制 十进制转化为八进制 十进制转化为十六 ...

  8. 【老生谈算法】matlab十进制转换十六进制及互转

    matlab十进制转换十六进制及互转 1.文档下载: 本算法已经整理成文档如下,有需要的朋友可以点击进行下载 序号 文档(点击下载) 本项目文档 [老生谈算法]matlab十进制转换十六进制及互转.d ...

  9. java-RGB与十六进制的互相转换 / 颜色十进制 / 十六进制 互转

    一.java-RGB转换成十六进制 /*** rgb转换成16进制* @param r* @param g* @param b* @return*/ public String rgb2Hex(int ...

  10. 8086汇编,十进制转换十六进制

    (2)数制转换 将输入的一个数据以不同进制形式输出. 要求: (a)所有数字从键盘输入: (b)输入数据为任意一个小于十万的十进制数据: (c)将所输入数据以十六进制在屏幕显示输出(即十进制转十六进制 ...

最新文章

  1. iOS-禁止scrollview垂直方向滚动,只允许水平方向滚动;或只允许垂直方向滚动...
  2. linux sftp命令连接数,linux记录sftp命令
  3. 合并财务报表无条件抵销分录
  4. AI入门:不用任何公式把Embedding讲清楚
  5. c均值聚类matlab程序_机器学习笔记-9-聚类
  6. 嵌入式linux和pc机的linux对照
  7. 数据意识崛起,从企业应用看BI软件的未来发展
  8. crontab 定时执行任务
  9. 自媒体免费素材,国旗高清无水印素材,PNG格式,直接引用即可
  10. 挑战程序设计竞赛(第二章:2.1 搜索)
  11. 我收集的软件序列号(转帖)
  12. 微信公众号添加html,微信公众号添加页面模板怎么开通?
  13. 马化腾的互联网之路:别人不是打不赢你,掌声越热烈就越危险
  14. pdf分解成多个pdf?PDF分割怎么做
  15. win7系统怎么用笔记本做wifi热点(转)
  16. const int,int const,const int*,int const*,int* const有什么不一样?
  17. android+反调试+方案,Android反调试笔记
  18. CB Insights:7个颠覆式创新框架
  19. 【EdgeX】基于sdk-c随机数设备服务发布数据到MQTT消息总线上,并在MQTTX上订阅
  20. vue中DatePicker从前台到后台日期偶尔差一天

热门文章

  1. python代码中函有中文报错的解决方法
  2. oracle 误删除数据,回退表数据
  3. Objective-C中的单例模式
  4. 编译lua5.3.2报错提示libreadline.so存在未定义的引用解决方法
  5. ecshop 影响全局的标量lib_main.php
  6. C#----接口的显式实现
  7. 获取winform应用程序集信息
  8. iOS 代码命名规范 及Android 代码命名规范(2)Android
  9. 计算机基础-计算机系统的安装
  10. Linux知识体系之路径属性与目录