马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
一本汇编实验指导书上面的案例,题目是这样的:
代码转换实验:
从键盘输入2 个十进制数组合成压缩BCD 码存入DL,再将压缩BCD 码转换成ASCII 码送显示器显示。
示例代码是这样的:
CODE SEGMENT
ASSUME CS:CODE
start:
MOV AH, 01H ;如果AL=89H
INT 21H
MOV CL, 4
SHL AL, CL ;AL=90H
MOV DL, AL ;DL=90H
MOV AH, 01H ;AL=89H
INT 21H
AND AL, 0FH ;AL=09H
OR DL, AL ;DL=99H
MOV BL, DL ;BL=99H
SHR DL, CL ;DL=09H
OR DL, 30H ;DL=39H
MOV AH, 02H
INT 21H
MOV DL, BL ;DL=99H
AND DL, 0FH ;DL=09H
OR DL, 30H ;DL=39H
MOV AH, 02H
INT 21H
MOV AH, 4CH
INT 21H
CODE ENDS
END start
上面代码中的注释部分是我自己假设了一个数89H进行的推算,我推算的结果是它会得到两个39H从而显示两次个位数9,十位数8似乎无法显示出,因为没有得到38H
所以想问一下我的注释推理过程有什么地方出现了什么问题吗
CODE SEGMENT
ASSUME CS:CODE
start:
MOV AH, 01H ; DOS 功能调用,读取键盘字符并回显
INT 21H
MOV CL, 4 ; AL = 读取到的第一个字符:'8' = 38H
SHL AL, CL ; AL = 38H SHL 4 = 80H
MOV DL, AL ; DL = 80H
MOV AH, 01H ; DOS 功能调用,读取键盘字符并回显
INT 21H
AND AL, 0FH ; AL = 读取到的第二个字符:'9' = 39H,39H AND 0FH = 09H
OR DL, AL ; DL = 80H OR 09H = 89H
MOV BL, DL ; BL = 89H
SHR DL, CL ; DL = 89H SHR 4 = 08H
OR DL, 30H ; DL = 08H OR 30H = 38H = '8'
MOV AH, 02H ; DOS 功能调用,显示字符,DL = '8'
INT 21H ; 屏幕显示出字符 '8'
MOV DL, BL ; DL = 89H
AND DL, 0FH ; DL = 89H AND 0FH = 09H
OR DL, 30H ; DL = 09H OR 30H = 39H = '9'
MOV AH, 02H ; DOS 功能调用,显示字符,DL = '9'
INT 21H ; 屏幕显示出字符 '9'
MOV AH, 4CH
INT 21H
CODE ENDS
END start
|