目的:将四位十六进制数203B存放于起始地址为3500H的内存单元中,把它们转换为ASCII码后存入起始地址是350AH的内存单元中。
设计思路:十六进制数0H~9H加上30H即可得到相应的ASCII码,AH~FH加上37H即可得到相应的ASCII码。
程序
sstack segment
dw 64 dup(?)
sstack ends
code segment
assume cs:code
start: mov cx,0004h ;四位十六进制数所以要转换4个字符
mov di,3500h ;十六进制数源起始地址
mov dx,[di]
a1: mov ax,dx
and ax,000fh ;取最低位的十六进制数
cmp al,0ah
jb a2 ;将该数与0AH比较,小于0AH转a2;大于OAH顺序执行
add al,07h
a2: add al,30h ;十六进制转为相应的ASCII码
mov [di+0dh],al;将数据送入目的地址区(最低位对应存放在目的地址最低位)
dec di
push cx ;将cx入栈,保护cx中数据
mov cl,04h ;设置移位位数为4位
shr dx,cl ;将十六进制数右移4位
pop cx ;cx出栈
loop a1 ;判断所有十六进制数是否已经都转换完成
;将输入的十六进制的数值显示在屏幕上