鱼C论坛

 找回密码
 立即注册
查看: 1560|回复: 2

[已解决]这个代码转换实验是如何获取到输入数的十位的

[复制链接]
发表于 2022-8-22 14:25:02 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

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

所以想问一下我的注释推理过程有什么地方出现了什么问题吗
最佳答案
2022-8-22 15:36:55
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
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-8-22 15:36:55 | 显示全部楼层    本楼为最佳答案   
此帖仅作者可见
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com

使用道具 举报

 楼主| 发表于 2022-8-22 20:41:45 | 显示全部楼层
此帖仅作者可见
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-22 22:45

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表