5.6 十进制和十六进制转换,lea指令,写注释

文章详细介绍了如何使用汇编语言(如8086指令)将十进制数转换为十六进制,包括lea指令和写注释的技巧,并提供了两个实例:将100和12345分别转换为十六进制64和3039。
摘要由CSDN通过智能技术生成

5.6 十进制和十六进制转换,lea指令,写注释

1. 将十进制100转换成十六进制64

assume cs:codesg,ds:data,ss:stack
data segmeNT
	str db '00000100','$'
data ends

stack segment
	db 10 dup(0)
stack ends

codesg SEgment
    start:
    
    mov ax,data
	mov ds,ax
	
	mov bx,0
	mov cx,8
	mov ax,0
	s:
		mov dx,ax
		shl ax,1
		shl ax,1
		shl ax,1
		shl dx,1
		add ax,dx
;乘10
		add al,str[bx]
		adc ah,0
		sub ax,30h
		
		inc bx
		loop s
	
	
	mov ah,4ch
    int 21h

codesg ends
end start
comment*
string str = "00000100"
int res = 0
for (int i = 0; i < 8; i++)
    res = res * 10 + str[i] - '0';
return res
*comment

image.png

2. 将10进制12345转换为16进制3039并且输出

2.1 将10进制12345转换为16进制并存到内存当中

assume cs:codesg,ds:data,ss:stack
data segmeNT
	str db '00012345','$'
	res db '0000','$'
data ends

stack segment
	db 100 dup(0)
stack ends

codesg SEgment
    start:
    
    mov ax,data
	mov ds,ax
	mov ax,stack
	mov ss,ax
	mov sp,10
	mov si,4
	
	mov bx,0
	mov cx,8
	mov ax,0
	s:
		mov dx,ax
		shl ax,1
		shl ax,1
		shl ax,1
		shl dx,1
		add ax,dx
;乘10
		add al,str[bx]
		adc ah,0
		sub ax,30h
		
		inc bx
		loop s
;ax = 3039
	mov cx,4
	l:
		mov dx,ax
		and dx,0fh
		add dx,30h
		cmp dx,40h
		jb s1
		add dx,7h
;求出3039的ASCII码,push
	s1:
		dec si
		mov ds:res[si],dl
		shr ax,1
		shr ax,1
		shr ax,1
		shr ax,1
		loop l
	
	mov ah,4ch
    int 21h

codesg ends
end start
comment*
if (res = 0) ans++;

cmp ax,bx
jne s1
inc dx
s1:

if (x == 1) res = 10
else res = 20

mov res,10
cmp x,1
je s1
add res,10
s1:

*comment

image.png

2.2 将10进制12345转换为16进制并直接输出

  • 在loop后面添上如下代码
;mov dx,offset res
lea dx,res
mov ah,9
int 21h

image.png

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值