汇编练习——屏幕上分行二进制十进制和十六进制数

算法是代码的灵魂 ,了解代码才能触类旁通
显示二进制的算法:在我的上一篇博客里面已经写了
显示十进制的算法:在汇编中我们可以将该数除以10得到商和余数分别存到相应的容器中汇编提供了很多潜规则的指令1,在C中我们想到显示商和余数时,我们不得不写两行代码 ,一行得出商,一行得出余数。
1: a: 对于字节除(div)来说一般默认商存在AL中,余数存在AH中,对于字除来说,一般默认商存在ax中,余数存在dx中。
b: loop 指令 当运行到loop时,计算机内部会进行cx-1然后与0比较,如果大于0,跳转到标号的位置继续循环,如果等于0,则退出循环
c: cmp指令,比较产生的结果,影响转移指令的运行

cmp dl,39h
jbe t2
jbe指令:当cmp运行的结果小于等于0时跳转到标号t2的位置。不过jbe是针对无符号数来说的。具体查看条件转移指令
显示16进制的算法:比如数据145eh其在计算机内部的显示形式是0001010001011110(BCD码的形式)将数据循环左移四位(注,左移如果这样写会出错,rol bx,4不能一下子将bx循环左移四位,这样写rol bx,1 rol bx,1 rol bx,1 rol bx,1也可以设置个循环形式)。具体显示变化如下图
在这里插入图片描述

;数据段
data segment
dat1  dw 145eh
data ends
;代码段
code segment
     assume  ds:data,cs:code
start:
     mov ax,data
	 mov ds,ax;将数据段传进数据寄存器ds中
	 mov bx,dat1;将数据存入bx容器中
	 mov cx,16;设置循环次数
t:
     rol bx,1;左移一位
	 mov dl,bl;将bx低八位存到dx的低八位中
	 and dl,01h;将dl的其它位置0这得出的是ASCII结果存在dl中
	 add dl,30h;将ascii转化为二进制
	 mov ah,02h
	 int 21h
	 loop t
	 
	 mov dl,0dh
	 mov ah,02h
	 int 21h
	 
	 mov dl,0ah;换行操作
	 mov ah,02h
	 int 21h
	 
	 mov ax,data
	 mov ds,ax
	 mov bx,dat1
	 xor cx,cx;初始化cx为0
	 mov cx,4
t1:  
     rol bx,1
	 rol bx,1
	 rol bx,1
	 rol bx,1;左移四位
	 
	 mov dl,bl;将bx的低八位送到dx的低八位中
	 and dl,0fh;
	 add dl,30h;转化为十进制的数
	 cmp dl,39h;和39h比较输出a-f
	 jbe t2
	 add dl,7
t2:
     mov ah,02h
	 int 21h
	 loop t1
	 mov dl,'h'
	 mov ah,02h
	 int 21h
	 
	 mov dl,0dh;回车
	 mov ah,02h
	 int 21h
	 mov dl,0ah;换行
	 mov ah,02h
	 int 21h
	 
	 
	 mov ax,data
	 mov ds,ax
	 mov bx,dat1
	 xor cx,cx;cx初始化为0
	 mov ax,bx;将数据存放到ax默认的数据寄存器中
	 mov bx,10;做除数
	 
t3:   
     mov dx,0;入栈前先要把dx初始化为0
     div bx;
	 push dx;
	 inc cx;
	 cmp ax,0
	 jnz t3;
t4:
     pop dx;
	 add dl,30h
	 mov ah,02h
	 int 21h
	 loop t4
	 mov dl,0dh
	 int 21h
	 mov dl,0ah
	 int 21h
	 mov ah,4ch;返回dos
	 int 21h
code ends
     end start

显示结果如下图
在这里插入图片描述

  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值