我有一个在汇编程序中求和的代码,它工作正常,但我不明白为什么有必要对字符进行调整,我只能观察到如果我不进行调整时打印结果时,会显示一个与数字不对应的字符。
当我读到一个字符时,我减去 30H。
;read number1
MOV AH, 01H
INT 21H
;adjustment
SUB AL, 30H
MOV number1, AL
求和后加上 30H。
ADD AL, number1
;Adjustment
ADD AL, 30H
MOV result, AL
您正在阅读的不是整数,而是一个字符。在 ASCII 中,字符
'0'
位于位置 48 或 30H。因此,要将对应于十进制数字的字符(48 到 57 之间的字符)转换为十进制数字,需要从中减去 48。可以想象,如果您键入字母而不是数字,这将返回垃圾。
添加
0x30
它是因为您将要在屏幕上显示的整数值设置为字符值。