汇编语言进制转换

摘要:
目录ASCII码说明十进制转二进制十六进制转二进制二进制转十进制二进制转十六进制ASCII码说明48~57:'0'~'9'65~90:'A'~'Z'97~122:'a'~'z'十进制转二进制(输入十进制数保存到BX)dec2binprocnearmovbx,0;清空BXnewchar:;读取一个字符movah,1;字符输入的中断int21h;输入到alsubal,'0';ASCII转换成数字jle
目录

ASCII码说明

48~57: '0'~'9'

65~90: 'A'~'Z'

97~122: 'a'~'z'

十进制转二进制

(输入十进制数保存到BX)

dec2bin	 	proc	near
		mov	bx, 0    ; 清空BX
newchar:	                 ; 读取一个字符
		mov ah, 1        ; 字符输入的中断
		int 21h		 ; 输入到al
		sub al, '0'      ; ASCII转换成数字
		jl  exit         ; 小于'0'则停止
		cmp al, 9d       
		jg	exit     ; 大于'9'则停止
		cbw		 ; 将AL扩展到AX
		xchg ax, bx	 ; 下面几步是将BX原本的内容乘10
		mov  cx, 10d	 
		mul  cx		 ; 隐含的乘数在AX中
		xchg ax, bx	 ; BX已经乘10
		add  bx, ax	 ; 将输入的数字加到BX
		jmp  newchar
exit:
		ret
dec2bin  endp

十六进制转二进制

(输入十六进制数保存到BX)

hex2bin		proc	near
		mov bx, 0
newchar:
		mov ah, 1
		int 21h
		sub al, '0'	   ; 转换成数字
		jl  exit           ; 不是0~F则停止
		cmp al, 10d
		jl  add_to         ; 是0~9
		or al, 20h         ; 转化成小写字母
		sub al, 'a'-10-'0' ; 可能是'a'~'f',转换成实际的值10~15
		cmp al, 10d
		jl  exit
		cmp al, 15d
		jg exit
add_to:			           ; 加到BX上
		mov cl, 4
		shl bx, cl         ; BX乘16(逻辑左移4位)
		mov ah, 0
		add bx, ax
		jmp newchar
exit:
		ret
hex2bin  endp

二进制转十进制

(将BX中的数值按十进制输出)

bin2dec		proc	near
		mov cx, 10000d
		call dec_div	; 万
		mov cx, 1000d
		call dec_div 	; 千
		mov cx, 100d	
		call dec_div 	; 百
		mov cx, 10d 	
		call dec_div	; 十
		mov cx, 1d
		call dec_div	; 个
		ret
bin2dec  endp
;-------------------------
dec_div		proc	near            ; BX/CX,并输出商
		mov ax, bx		; 被除数低16位在AX
		mov dx, 0		;      高16位在DX
		div cx		        ; 除以CX,商在AX,余数在DX
		mov bx, dx		; 余数放回BX
		mov dl, al		; 只需要商的8位
		add dl, '0'		; 转换成ACSII并输出
		mov ah, 2
		int 21h
		ret
dec_div  endp

二进制转十六进制

(将BX中的数值按十六进制输出)

bin2hex		proc	near
		mov ch, 4		  ; 输出4位十六进制数
rotate:
		mov cl, 4		  ; 下面是输出BX的高4位
		rol bx, cl		  ; BX循环左移4位(高四位到了低四位)
		mov al, bl
		and al, 0fh		  ; 现在al保存的就是BX高四位的值
		add al, '0'
		cmp al, '9'
		jle printit		
		add al, 'A'-10-'0'        ; 如果是大于9,则转成16进制字符'A'~'F'
printit:
		mov dl, al		  ; 输出字符
		mov ah, 2
		int 21h
		dec ch
		jnz rotate
		ret
bin2hex  endp

免责声明:文章转载自《汇编语言进制转换》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Redis分布式锁实战基于querybuilder的可根据现有数据表自动生成Restful API的dotnet中间件下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

C++反汇编与逆向分析技术揭秘

《C++反汇编与逆向分析技术揭秘》前言 为什么写这本书 “时下的IDE很多都是极其优秀的,拜其所赐,职场上的程序员多出十几倍,但是又有多少能理解程序内部的机制呢?”——侯捷 随着软件技术的发展及其在各个领域的广泛应用,对软件进行逆向工程,然后通过阅读其反汇编代码来推断其数据结构、体系结构和程序设计思路的需求越来越多。逆向工程技术能帮助我们很好地研究和...

汇编语言 学习笔记(基础知识二----地址总线、数据总线、控制总线)

一、地址总线 1、 CPU是通过地址总线来指定存储单元的。地址总线能传送多少个不同的信息,CPU就可以对多少个存储单元进行寻址; 2、一个CPU有N根地址总线,则可以说这个Cpu的地址总线的宽度就为N;索引内存的地址 3、10根地址线能访问的最大内存为2^10个内存单元,也就是说它的寻址能力是2KB 二、数据总线 1、CPU与内存或其它器件之间的数据传送是...

汇编语言——寄存器(内存访问 ss栈段寄存器)

一、栈的基本概念 栈有两个基本的操作:入栈和出栈。入栈:将一个新的元素放到栈顶;出栈:从栈顶取出一个元素。栈顶的元素总是最后入栈,需要出栈时,又最先被从栈中取出。栈的操作规则:后进先出 8086CPU提供的栈机制 8086CPU提供入栈和出栈指令: (最基本的) PUSH(入栈) POP (出栈)push ax:将寄存器ax中的数据送入栈中;pop ax...

汇编语言——王爽(02)

debug中跟踪用loop指令实现的循环====计算ffff:0006 单元中的数*3 ,结果存储在dx中 assume cs:code code   segment     mov ax,0ffffh  ; 汇编程序中数据不能以字母开头     mov ds,ax     mov bx,6    ;ds:bx 指向ffff:6          mov...

AS86 汇编器

内核编程语言和环境 语言编译过程就是把人类理解的高级语言转换成计算机硬件能理解和执行的二进制机器指令的过程。这种转换过程通常会产生一些效率不是很高的代码。所以一些对运行效率要求高或者性能影响较大的部分代码就会直接使用汇编语言来编写。或者对高级语言编译产生的汇编程序在进行人工修改或优化。 AS86汇编器 Linux0.1x系统中使用了两种汇编器,一种是能产...

c程序的执行过程

1.hello程序的生命周期是从一个高级c语言程序开始的,然后为了在系统上运行hello.c程序,每条c语句都必须被其他程序转化为一系列的低级机器语言指令。 2.预处理阶段。预处理器(cpp)根据以字符#开头的命令,修改原始的C程序。#include <stdio.h>命令告诉预处理器读取系统头文件stdio.h的内容,并将它直接插入到程序文...