Два ввода и умножение их. Как это сделать? - PullRequest
1 голос
/ 25 апреля 2019

Я хочу взять два ввода, умножить их и вывести результат в emu8086.Но проблема умножения возможна только с AL или AX как одним фиксированным операндом.Предположим, я не могу умножить BX и DX.Так что теперь, как я могу взять ввод AL и BL и умножить их.

мой код:

mov ah,1
int 21h
mov bl,al
int 21h
mul bl
mov ah,2
mov dl,al
int 21h

1 Ответ

3 голосов
/ 26 апреля 2019

Ввод, который вы получаете от использования функции DOS 01h, является символом. Вы должны преобразовать это в цифру, что это обозначает. например, "2" преобразуется в значение 2. Мы просто отнимаем 48 , чтобы сделать это.

Умножение mul bl является правильным (AL * BL). Продукт будет в AX, но оба входа ограничены 9, поэтому продукт никогда не будет больше 81.

Перед печатью вам необходимо преобразовать значение продукта обратно в символ путем добавления 48 . Это может работать, только если продукт был не выше 9, потому что в противном случае потребовалось бы более 1 символа .

mov ah,1
int 21h
SUB AL, 48
mov bl,al

MOV AH, 01h
int 21h
SUB AL, 48

mul bl

mov ah,2
mov dl,al
ADD DL,48
int 21h

Если вы введете «2» и «3», вы получите «6».

...