DOS汇编练习(11)——BCD码的输入及转换

BCD码就是用16进制来表示10进制的数,如压缩BCD码98H,我们认为他代表的是十进制中的98。
非压缩BCD码即1个字节存一个位数据,十进制98的非压缩BCD码为0908H。

例1:编写完整程序,从键盘上接受4位压缩BCD码,并将其放在BX中。

CODE SEGMENT
        ASSUME CS:CODE
START:
	MOV CX,4
INPUT:
	MOV AH,01H  ;按键输入,实际输入的是ASCII码
	INT 21H
	CMP AL,'0'
	JAE NEXT    ;判断是否≥0
	JMP INPUT
NEXT:
	CMP AL,'9'
    JBE SAVEAS  ;判断是否≤9
	JMP INPUT
SAVEAS:
	AND AL,0FH ;屏蔽十位的3
    ROL BX,1   ;左移四次
    ROL BX,1   ;这里用左移指令SHL或循环左移指令ROL都可以,不影响结果
    ROL BX,1
    ROL BX,1   ;每移动将输入的值存入对应的位
    OR BL,AL   ;不可用MOV,防止覆盖
	LOOP INPUT
TOEND:
	MOV AH,4CH
	INT 21H
CODE ENDS
	END START

例2:编写完整程序,将压缩BCD码VARBCD :98H变成对应的16进制值放在AL中。
十进制转十六进制:

DATA SEGMENT  
VARBCD DB 98H
DATA ENDS 
CODE SEGMENT 
ASSUME CS:CODE,DS:DATA
START: 
    MOV AX,DATA
    MOV DS,AX
    LEA SI,VARBCD
    MOV BL,[SI]
    MOV DL,BL
    AND DL,0FH   ;屏蔽高字节
    MOV CL,4     ;循环四次
    SHR BL,CL    ;左移4次读取十位的9
    MOV AL,10    ;这里的10实际代表16
    MUL BL       ;9*16
    ADD AL,DL    ;加上个位的8
    MOV AH,4CH 
    INT 21H 
CODE ENDS 
END START

例3:编写完整程序,将数字变量VARD :98H变成非压缩BCD码放在VARBCD变量位置处。

DATA SEGMENT
	VARD DB 98H
	SPACE DB 2 DUP(?)
	VARBCD DB 8 DUP(?)
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START:
	MOV AX,DATA
	MOV DS,AX
	LEA SI,VARD
	LEA DI,VARBCD
        	XOR AX,AX    ;AX先清0
	MOV AL,[SI]  ;AL存入98H
	MOV BL,10   ;会自动转化为16进制计算   
	DIV BL	 ;152/10
        	MOV [DI+2],AH  ;存入余数02D(02H)充当个位
        	XOR AH,AH  ;余数清0
        	DIV BL  ;15/2 
        	MOV [DI+1],AH  ;存入余数05D(05H)充当十位
        	MOV [DI],AL       ;存入商01D(01H)充当百位
	MOV AH,4CH
	INT 21H
CODE ENDS
	END START

结果为98H=152D——>非压缩BCD码 01 05 02

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Wayne_Fine

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值