Почему моя сборка выводится в буквенном положении? (1+1= б)

Я использую ТАСМ. Это простая программа, которая считывает вводимые пользователем данные и складывает два числа. Однако мой вывод отображает буквы в соответствии с их положением букв.

Например, 3+5=h (8) Я хочу, чтобы он отображался целым числом.

.model small 
.stack 100h
.data 
input   db  13,10,"Enter a number : ","$"
output  db  13,10,"The sum is ","$"

.code
main    proc

mov ax,@data
mov ds,ax

;INPUT 1
mov ah,9
mov dx, offset input 
int 21h
mov ah,1
int 21h
mov bl,al

;INPUT 2
mov ah,9
mov dx, offset input
int 21h
mov ah,1
int 21h
add bl,al

;OUTPUT DISPLAY
mov ah,9
mov dx,offset output
int 21h

mov ah,2
mov dl,bl
int 21h

;END
mov ax,4c00h
int 21h
main    endp
end main

1 ответ

Решение

Ваши входные цифры представляют собой символы ASCII, поэтому, например, "1" на самом деле 31h. Итак, когда вы вычисляете 1+1, вы получаете 31h+31h=62h, что является символом ASCII 'b'.

Чтобы преобразовать введенные вами цифры в их эквивалентные целочисленные значения, вам нужно вычесть "0" (30 часов).

И наоборот, для вывода целых цифр в виде символов ASCII вам нужно будет добавить "0".

Другие вопросы по тегам