鱼C论坛

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

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

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

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

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

x
一本汇编实验指导书上面的案例,题目是这样的:

代码转换实验:
从键盘输入2 个十进制数组合成压缩BCD 码存入DL,再将压缩BCD 码转换成ASCII 码送显示器显示。

示例代码是这样的:

  1. CODE SEGMENT
  2. ASSUME CS:CODE
  3. start:
  4.         MOV AH, 01H                                ;如果AL=89H
  5.         INT 21H
  6.         MOV CL, 4                                
  7.         SHL AL, CL                                 ;AL=90H
  8.         MOV DL, AL                                 ;DL=90H

  9.         MOV AH, 01H                                 ;AL=89H
  10.         INT 21H
  11.         AND AL, 0FH                                ;AL=09H
  12.         OR DL, AL                                         ;DL=99H
  13.         MOV BL, DL                                ;BL=99H
  14.         SHR DL, CL                                 ;DL=09H
  15.         OR DL, 30H                                 ;DL=39H
  16.         MOV AH, 02H                               
  17.         INT 21H
  18.         MOV DL, BL                                 ;DL=99H
  19.         AND DL, 0FH                                 ;DL=09H
  20.         OR DL, 30H                                 ;DL=39H
  21.         MOV AH, 02H                               
  22.         INT 21H

  23.         MOV AH, 4CH
  24.         INT 21H
  25. CODE ENDS
  26. END start
复制代码


上面代码中的注释部分是我自己假设了一个数89H进行的推算,我推算的结果是它会得到两个39H从而显示两次个位数9,十位数8似乎无法显示出,因为没有得到38H

所以想问一下我的注释推理过程有什么地方出现了什么问题吗
最佳答案
2022-8-22 15:36:55
  1. CODE SEGMENT
  2. ASSUME CS:CODE
  3. start:
  4.         MOV AH, 01H                                ; DOS 功能调用,读取键盘字符并回显
  5.         INT 21H
  6.         MOV CL, 4                                  ; AL = 读取到的第一个字符:'8' = 38H                                
  7.         SHL AL, CL                                 ; AL = 38H SHL 4 = 80H
  8.         MOV DL, AL                                 ; DL = 80H

  9.         MOV AH, 01H                                ; DOS 功能调用,读取键盘字符并回显
  10.         INT 21H
  11.         AND AL, 0FH                                ; AL = 读取到的第二个字符:'9' = 39H,39H AND 0FH = 09H                                 
  12.         OR DL, AL                                  ; DL = 80H OR 09H = 89H
  13.         MOV BL, DL                                 ; BL = 89H
  14.         SHR DL, CL                                 ; DL = 89H SHR 4 = 08H
  15.         OR DL, 30H                                 ; DL = 08H OR 30H = 38H = '8'
  16.         MOV AH, 02H                                ; DOS 功能调用,显示字符,DL = '8'
  17.         INT 21H                                    ; 屏幕显示出字符 '8'
  18.         MOV DL, BL                                 ; DL = 89H
  19.         AND DL, 0FH                                ; DL = 89H AND 0FH = 09H
  20.         OR DL, 30H                                 ; DL = 09H OR 30H = 39H = '9'
  21.         MOV AH, 02H                                ; DOS 功能调用,显示字符,DL = '9'                                 
  22.         INT 21H                                    ; 屏幕显示出字符 '9'

  23.         MOV AH, 4CH
  24.         INT 21H
  25. CODE ENDS
  26. 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-4-20 15:12

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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