Когда вы читаете во входных данных, вы запрашиваете не менее 255 байтов текста, который будет помещен в местоположения fnum
и lnum
.Вы никогда не читаете этот текст, а вместо этого добавляете два адреса памяти вместе (только адреса, а не содержимое), а затем добавляете 48. Затем вы распечатываете первые два байта результата этого добавления, что на самом деле не то, чтоВы хотите, и даже не имеют смысла.
Вам нужно прочитать байты, прочитанные с этих адресов памяти ([fnum]
вместо fnum
), превратить их в целые числа, по которым вы можете выполнять арифметику, добавить эти вместе вместо адресов памяти, превратить полученное число обратно в текст, а затем распечатать текст.
Для простейшего случая, когда оба входа и выхододнозначные неотрицательные числа (0, 1, 2, 3, 4, 5, 6, 7, 8 или 9), вы можете преобразовать символ в число, вычитая 0x30
(десятичное 48), и вы можетепреобразовать число в символ, добавив 0x30
.Это потому, что ASCII-цифры являются последовательными, начиная с символа 0x30
, являющегося цифрой 0. Я полагаю, что ваша третья строка после комментария "добавление входов 2 и 3" должна быть такого рода преобразованием,но то, что вы конвертируете, - это не тот результат, который вам нужен.
В NASM вы можете написать 0x30
как '0'
, что делает цель более очевидной для читателей-людей.