这段代码运行过程中输出最大值的时候会输出一个问号,请问该如何解决这个问题
时间: 2024-02-25 13:55:32 浏览: 132
c代码-输出最大值
这个问号通常是由于最大值或最小值超出了 ASCII 码表中的可显示字符范围所导致的。为了解决这个问题,我们可以在显示最大值和最小值之前,先判断它们是否在可显示字符的范围内,如果不在,则将它们转换为可显示字符。
下面是修改后的代码:
```
ORG 100h ; 程序入口地址
MOV AH, 0 ; 设置 AH 为 0
INT 16h ; 从键盘读取一个字符
MOV BL, 0 ; BL 存储最小值
MOV BH, 0 ; BH 存储最大值
CMP AL, '0' ; 比较字符是否为数字
JB END ; 如果不是数字,跳转到 END
SUB AL, '0' ; 将字符转换为数字
MOV BL, AL ; 将 AL 存储的数字赋给 BL
MOV BH, AL ; 将 AL 存储的数字赋给 BH
AGAIN:
MOV AH, 0 ; 设置 AH 为 0
INT 16h ; 从键盘读取一个字符
CMP AL, '0' ; 比较字符是否为数字
JB END ; 如果不是数字,跳转到 END
SUB AL, '0' ; 将字符转换为数字
MOV CL, AL ; 将 AL 存储的数字赋给 CL
MOV AH, 0 ; 设置 AH 为 0
INT 16h ; 从键盘读取一个字符
CMP AL, '0' ; 比较字符是否为数字
JB END ; 如果不是数字,跳转到 END
SUB AL, '0' ; 将字符转换为数字
SHL CL, 4 ; 将 CL 左移 4 位
OR CL, AL ; 将 AL 存储的数字与 CL 合并
CMP CL, BL ; 比较 CL 和 BL 的大小
JB UPDATE_MIN ; 如果 CL 小于 BL,跳转到 UPDATE_MIN
CMP CL, BH ; 比较 CL 和 BH 的大小
JA UPDATE_MAX ; 如果 CL 大于 BH,跳转到 UPDATE_MAX
JMP AGAIN ; 如果 CL 在最大值和最小值之间,重新读取两个字符
UPDATE_MIN:
MOV BL, CL ; 更新最小值
JMP AGAIN
UPDATE_MAX:
MOV BH, CL ; 更新最大值
JMP AGAIN
END:
MOV DL, BL ; 将最小值存储在 DL 中
CMP DL, 9 ; 比较 DL 是否大于 9
JBE DISPLAY_MIN ; 如果不大于 9,直接显示最小值
ADD DL, 7 ; 将最小值转换为可显示字符
JMP DISPLAY_MIN
DISPLAY_MIN:
MOV AH, 2 ; 显示 DL
ADD DL, '0' ; 将数字转换为字符
INT 21h
MOV DL, ',' ; 显示逗号
MOV AH, 2
INT 21h
MOV DL, BH ; 将最大值存储在 DL 中
CMP DL, 9 ; 比较 DL 是否大于 9
JBE DISPLAY_MAX ; 如果不大于 9,直接显示最大值
ADD DL, 7 ; 将最大值转换为可显示字符
JMP DISPLAY_MAX
DISPLAY_MAX:
MOV AH, 2 ; 显示 DL
ADD DL, '0' ; 将数字转换为字符
INT 21h
MOV AH, 4Ch ; 退出程序
INT 21h
```
在这个修改后的代码中,我们使用了 CMP 和 JBE 指令来检查最大值和最小值是否在可显示字符的范围内。如果它们不是可显示字符,我们就使用 ADD 指令将它们转换为可显示字符。
阅读全文