汇编语言实现十六进制数转换成十进制数

该博客介绍了如何使用汇编语言将内存中存储的16进制数值转换为十进制并显示。通过一系列的除法、取余和ASCII编码转换操作,最终成功在屏幕上显示出对应的十进制数65535,并验证了程序的正确性。此外,还展示了当数值改变为12345时的运行结果。
摘要由CSDN通过智能技术生成

一 代码实现

 DATAS SEGMENT 
  org  2000h
  num  dw    65535
  org  2010h
  res  db    5 dup(?)
  	   db '$'
DATAS ENDS

STACKS SEGMENT
STACKS ENDS

CODES SEGMENT
    ASSUME CS:CODES,DS:DATAS,SS:STACKS
START:
    MOV AX,DATAS 
    MOV DS,AX ;设计数据段
	mov SI,2000h ;结果存放指针
	mov AX,[SI] ;把存放结果的指针的地址传给AX
	mov DI,2010h ;用于显示的数据的ASCII码的存放指针
	mov bx,10000d ;2字节数小于10000
	xor dx,dx;异或运算相当于将dx置0
	div bx ;余数在dx中
	add al,30h ;将商的ASCII码加30h对应显示数字的字符的ASCII码用于显示
	mov [DI],al ;十进制最高位
	inc cx ;自增指令,使CX自增,读取下一位数据
	inc DI ;使指针DI自增1,指向存储下一位数字的地址
	mov ax,dx;把余数传给AX
	mov bx,1000d;除数
	xor dx,dx;异或运算相当于将dx置0
	div bx ;余数在dx中
	add al,30h;将商的ASCII码加30h对应显示数字的字符的ASCII码用于显示
	mov [DI],al ;十进制次高位
	inc cx ;自增指令,使CX自增,读取下一位数据
	inc DI ;使指针DI自增1,指向存储下一位数字的地址
	mov ax,dx;把余数传给AX
	mov bx,100d;除数
	xor dx,dx;异或运算相当于将dx置0
	div bx ;余数在dx中
	add al,30h;将商的ASCII码加30h对应显示数字的字符的ASCII码用于显示
	mov [DI],al ;十进制第3位
	inc cx;自增指令,使CX自增,读取下一位数据
	inc DI;使指针DI自增1,指向存储下一位数字的地址
	mov al,dl;把余数传给AX
	mov bl,10d;除数
	div bl ;余数在ah中
	add al,30h ;将商的ASCII码加30h对应显示数字的字符的ASCII码用于显示
	mov [DI],al ;十进制第4位
	inc cx;自增指令,使CX自增,读取下一位数据
	INC DI;使指针DI自增1,指向存储下一位数字的地址
	add ah,	30h;将商的ASCII码加30h对应显示数字的字符的ASCII码用于显示
	mov [DI],ah ;十进制最低位
    
    LEA DX,res;把显示的ASCII的存储器偏移地址传给DX用于显示
    MOV AH,9;调用9号功能在屏幕上显示
    INT 21H
    
    MOV AH,8;无回显键盘输入
	INT 21H
	
    MOV AH,4CH;返回DOS
    INT 21H
CODES ENDS
    END START

在这里插入图片描述
可以看到从地址2010h开始存储的分别是36h,35h,35h,33h,35h,对应的是字符6,5,5,3,5.与num存储的十进制65535一致,结果正确。

把num的值改为12345,运行结果图如下
在这里插入图片描述

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值