
2个回答
展开全部
以1567为例,,,我是四川大学的,你也是吧
DATAS SEGMENT
buffer1 dw 1657h
buffer2 dw ? ;分配两个字节的空间
DATAS ENDS
CODES SEGMENT
ASSUME CS:CODES,DS:DATAS
START:
MOV AX,DATAS
MOV DS,AX
mov ax,[buffer1]
and ax,0f000h
mov cl,12
shr ax,cl
mov dx,ax ;至此,已将5678h(BCD)中的5(十进制)取出,并放入dx中
call change ;调用chang,将5乘以10
mov ax,dx
mov bx,[buffer1]
and bx,0f00h
mov cl,8
shr bx,cl
add ax,bx
mov dx,ax
call change
mov ax,dx
mov bx,[buffer1]
and bx,00f0h
mov cl,4
shr bx,cl
add ax,bx
mov dx,ax
call change
mov ax,dx
mov bx,[buffer1]
and bx,000fh
add ax,bx ;至此,ax中的值已是5678(十进制),但电脑是将其以二进制的形式存储的,故应是0679h,二进制就是0000011001111001
mov buffer2,ax ;因为后面会用到ah,为避免在其过程中丢失ax中的数据,故将ax中的数据放入buffer2中
mov cx,16
again:shl buffer2,1 ;将已经转换成二进制的数逐个显示出来
mov dl,0
adc dl,30h
mov ah,2
int 21h
loop again
MOV AH,4CH
INT 21H
change proc ;子程序change的功能是实现dx乘以10
add dx,dx
mov cx,dx
add dx,dx
add dx,dx
add dx,cx
ret
change endp
CODES ENDS
END START
DATAS SEGMENT
buffer1 dw 1657h
buffer2 dw ? ;分配两个字节的空间
DATAS ENDS
CODES SEGMENT
ASSUME CS:CODES,DS:DATAS
START:
MOV AX,DATAS
MOV DS,AX
mov ax,[buffer1]
and ax,0f000h
mov cl,12
shr ax,cl
mov dx,ax ;至此,已将5678h(BCD)中的5(十进制)取出,并放入dx中
call change ;调用chang,将5乘以10
mov ax,dx
mov bx,[buffer1]
and bx,0f00h
mov cl,8
shr bx,cl
add ax,bx
mov dx,ax
call change
mov ax,dx
mov bx,[buffer1]
and bx,00f0h
mov cl,4
shr bx,cl
add ax,bx
mov dx,ax
call change
mov ax,dx
mov bx,[buffer1]
and bx,000fh
add ax,bx ;至此,ax中的值已是5678(十进制),但电脑是将其以二进制的形式存储的,故应是0679h,二进制就是0000011001111001
mov buffer2,ax ;因为后面会用到ah,为避免在其过程中丢失ax中的数据,故将ax中的数据放入buffer2中
mov cx,16
again:shl buffer2,1 ;将已经转换成二进制的数逐个显示出来
mov dl,0
adc dl,30h
mov ah,2
int 21h
loop again
MOV AH,4CH
INT 21H
change proc ;子程序change的功能是实现dx乘以10
add dx,dx
mov cx,dx
add dx,dx
add dx,dx
add dx,cx
ret
change endp
CODES ENDS
END START
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询