十进制转化为二进制与十六进制显示(汇编程序)
stacks segment
stack dw 200h dup(0);不太明白要200h这么大
stacks ends
data segment
in_buf db 6;定义输入字符串最大长度
in_len db ?;输入字符串实际长度
dec_buf db 6 dup(30h),'='
bin_buf db 16 dup(30h),'B='
hex_buf db 4 dup(30h),'H'
crlf db 0dh,0ah,'$'
;注意这儿定义数据是放在一块儿的,就不需要把二进制和十六进制的字符串分别再设置结束符
mes_1 db 'please input a number(0~65535):$'
mes_2 db 'input invalid,exit!',0dh,0ah,'$'
data ends
code segmentassume cs:code,ds:data,ss:stacks
main:
mov ax,data
mov ds,ax
call input
mov bx,offset dec_buf
add bl,in_len
mov byte ptr [bx],'D';注意!这儿一定要覆盖住原字符串的最后一个回车符
;否则,输出时,那个回车符会使前面的字符被覆盖
call str2bin;首先判断输入的合法性并转化为数值
jc exit_no
call bin2str;将十进制转化为二进制
call hex2str;将十进制转化为十六进制
mov dx,offset crlf
call out_str
mov dx,offset dec_buf
call out_str
mov ah,4ch
int 21hexit_no:;输入不合法时的提示
mov dx,offset crlf
call out_str
mov dx,offset mes_2
call out_str
retinput:;功能:从键盘输入字符串
mov dx,offset mes_1
mov ah,9
int 21h
mov dx,offset in_buf
mov ah,10
int 21h
retstr2bin:;功能:判断输入的十进制是否合法
;若合法则把十进制的ASCII码转化成数值形式
sub ax,ax;ax用来存放十进制的最终数值
mov si,10;si用来做乘数
sub ch,ch
mov cl,in_len;输入串的实际长度设置为循环次数
mov di,offset dec_buf;di指向串实际开始的位置
loop_10:
mov bl,[di]
cmp bl,39h;若大于字符9,不合法
ja quit_n
cmp bl,30h;若小于字符0,不合法
jb quit_n
sub bh,bh;避免bh里面有杂数据,清零
sub bl,30h
mul si;ax*10
jc quit_n
add ax,bx;(ax*10)+bx
jc quit_n
inc di
loop loop_10;cx不为零,继续循环
clc;没有跳转到quit_n,则表示合法,设置cf=0
ret
quit_n:
stc;表明输入的十进制不合法,设置cf=1
retbin2str:;功能:将十进制转化为二进制
push ax;ax保存的是十进制的数值
;因为之后还要用到去转化为十六进制,所以先push进堆栈暂存
mov cx,16;设置需要循环的次数
mov bx,offset bin_buf
loop_20:
shl ax,1
jnc next_20;如果该位为零
inc byte ptr [bx]
next_20:
inc bx
loop loop_20
pop ax
rethex2str:;功能:将十进制转化为十六进制
mov bx,ax
mov si,offset hex_buf
mov ch,4
loop_30:
mov cl,4
rol bx,cl;当移动次数大于1时,必须用cl代替
mov al,bl;从高到低提取四位二进制数送入al
and al,0fh
add al,30h;al=0~9,加30h转化为ascii码
cmp al,3ah
jl next_30
add al,7;al>9,加37h转化为ascii码
next_30:
mov [si],al
inc si
dec ch
jnz loop_30;注意,这儿只能用dec运算对标志位的设置来判断循环与否
;因为cl被用来存放位移数了
retout_str:;用于输出的子程序
mov ah,9
int 21h
retcode ends
end main
运行结果如图:
十进制转化为二进制与十六进制显示(汇编程序)相关推荐
- 数据结构6:栈的应用(十进制转化为二进制)
十进制转化为二进制,采用的是"除以2求余数"的算法,就是将整数不断除以2,每次得到的余数就是由低到高的二进制 这个"除以2"的过程得到的余数是从低到高的次序,而 ...
- 如何快速将十进制转化为二进制
如何快速将十进制转化为二进制 16340028 http://sdcs.sysu.edu.cn/ Contents 作用 如何进行 原理 1.作用 十进制转化二进制的作用在于更好的了解进制间的关系.十 ...
- 把十进制转化为二进制的一种方法
把十进制转化为二进制的一种方法: void pb(int n){if(n != 0){pb(n/2);putchar('0'+n%2);} }int main(void){for(int i=10; ...
- python十进制转化为二进制
python十进制转化为二进制 实例:给定一个非负十进制数n,如何将其转换成为一个二进制数? 输入:123 输出:1111011 输入:1363 输出:10101010011 输入:12 输出:110 ...
- 十进制转化成二进制(C++)
十进制转化为二进制的方法,在数学上是除二取余法,如下图(自己在画图上画的,有点子丑,,,): 我这是以36为例,用36不断的去除二取余,左边就是余数,最后从下至上把余数连起来,就是我们要得到的结果,就 ...
- C语言——十进制转化为二进制
十进制转化为二进制:将十进制一直除以二,然后用数组储存余数,并取商,如此循环直到十进制数小于零. #include <stdio.h> void main() { short int n ...
- java十进制转化为二进制
十进制转化为二进制的方法 Integer.toBinaryString(int i) 注意:转化的二进制以字符串的形式返回 查看一个数的二进制上某一位是0还是1的方法: 1.屏蔽法 num & ...
- c语言实例--十进制转化为二进制
问题:实现十进制转化为二进制的代码. 思路先行: 第一步:十进制转化为二进制的过程中,就是每次除2取余,并存放在数组中. 第二步:输入的数字在0-32767之间. 第三步:for循环(从0到14位,最 ...
- C语言基础代码合集 | 十进制转化为二进制
1. 九九乘法表 #include <stdio.h> int main(void) {int a,b;for (a=1;a<=9;a++)//列的循环{for(b=a;b<= ...
最新文章
- 不愧是北大疯人院!阿里数学竞赛决赛,入围人数超过清华和南大之和!
- 中小企业信息化--网页设计模拟题1
- opencv nms 学习笔记
- requirejs 加载其它js
- 【五线谱】音高表示 ( 低音谱号 | C1 36 音符音高表示 | C2 48 音符音高表示 | C3 60 音符音高表示 )
- 技术详解:基于人脸识别的 AI 弹幕
- 【AI视野·今日CV 计算机视觉论文速览 第214期】Mon, 7 Jun 2021
- 【bzoj4386】[POI2015]Wycieczki 矩阵乘法
- Android studio 0.5.0 注意事项
- 【C/C++】友元函数和友元类
- 面试被问到平衡二叉树如何平衡?
- C语言关键字分析系列
- IF NOT EXISTS和 IF EXISTS的区别
- Third1: Basic Web applications BASIC NFS services triggering mount | Cloud computing
- gitbook安装中installing gitbook xxx 时间过长的问题
- no main manifest attribute, in xxxx.jar 项目部署报错
- iOS - 融云即时通讯的简单使用
- 电脑中没有显示网络连接到服务器地址,电脑没有网络可以连接到服务器地址
- 云电竞的服务器,雷风科技电竞云桌面解决方案
- 在线压力并发工具AB版 简单易用