Инструкция mov esi, sinput1
перемещает адрес вашего первого буфера в регистр ESI
, но вам действительно нужен байт, который там хранится.Вы извлекаете его через mov al, [sinput1]
.
Аналогично, инструкция mov edx, sinput2
перемещает адрес вашего второго буфера в регистре EDX
, но вы действительно хотите, чтобы байт там хранился.Вы получаете его через mov dl, [sinput2]
.
Далее эти байты будут символами, возможно, в диапазоне от «0» до «9», но вашему дополнению хотелось бы работать со значениями, которые представляют эти символы.Чтобы это произошло, вам нужно вычесть 48 из кодов ASCII обоих символов.
Как только вы получите правильную сумму, вам необходимо преобразовать ее в символ, готовый для отображения.Для этого необходимо добавить 48, чтобы получить код ASCII, который может использовать sys_write.
Приведенный ниже код выдаст
Добро пожаловать в калькулятор
7
при вводе с помощью следующих клавиш
3 Ввод 4 Ввод
mov al, [sinput1] ; Character "3"
sub al, '0' ; Convert to 3
mov dl, [sinput2] ; Character "4"
sub dl, '0' ; Convert to 4
add al, dl ; Sum is 7
add al, '0' ; Convert to character "7"
mov ah, 0Ah ; Newline
mov [sinput1], ax ; Store both in buffer
;Print out the result
mov edx, 2 ; Character and Newline
mov ecx, sinput1 ; Buffer
mov ebx, 1 ; Stdout
mov eax, 4 ; sys_write
int 80h
Чтобы это стало надежной программой, вам все еще нужно
- , чтобы проверить правильность обоих входов
- Было ли что-либо введено вообще?Проверьте
EAX
из sys_read ! - Представляет ли вход число?
- Находится ли этот номер в допустимом диапазоне?
- для подготовки, когда сумма больше 9 (требуется более 1 выходного символа).