以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
and bx,00f0h
mov cl,4
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,cx
ret
change endp
CODES ENDS
END START
以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