Моя идея состоит в том, что ваш код для преобразования в BCD содержит ошибки.он не делает то, что должен, поэтому вы наблюдаете неправильный результат.
, кроме этой шутки: 0xe0, если хранится в знаке, является отрицательным числом.это может привести к неприятным уловкам, если вы не будете обращать особого внимания на знак временных переменных, которые вы используете при вычислении результата.
edit: теперь, когда вы опубликовали некоторый код,ясно, что, хотя вы вычисляете правильное значение для первой цифры в lo
, вам нужен еще один шаг для получения правильного значения в hi
.
используя 0xe0
в качестве ввода, вы фактически вычисляете (22<<4) + 4 = 356 = 0x164
вместо (2<<8)+(2<<4)+4 = 548 = 0x224
.