Почему моя сборка выводится в буквенном положении? (1 + 1 = б) - PullRequest
2 голосов
/ 10 июля 2020

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

Например, 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 Ответ

3 голосов
/ 10 июля 2020

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

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

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

...