Я пишу простую программу, которая принимает два числа от 1 до 99, добавляет их и распечатывает результат. Я закончил с частью печати, я могу напечатать тоже три цифры, 99 + 99 = 198, так что этого достаточно для этой программы. У меня есть программа, работающая на два однозначных числа.
Пример:
1 1 =
2,
4 4 =
8
Значит, цифры разделены пробелами. Теперь мне нужно следующее;
11 1 =
12,
1 45 =
46
что я получил до сих пор, когда я впервые читаю действительное число, я сохраняю его в стеке, в то время как я проверяю, какой следующий символ, если следующий - пробел, то это число только однозначное Если у меня есть другой персонаж, я должен умножить первый на 10, а затем добавить последний символ.
22 будет выглядеть так: 2 2 * 10 = 20 + 2 = 22 * 1009 *
Обратите внимание, что остальная часть моей программы нуждается в результате этого, чтобы быть в регистре dl.
Есть один крошечный вопрос о регистрах и сборке, можно ли ссылаться на число, хранящееся в dl, с помощью dx? Мне интересно, потому что mov и арифметические операторы, кажется, требуют, чтобы регистры (операнды) были одинакового размера.
Мой код пока
ReadNumber: ;; Reads one number 1-99
push ax
push bx
push cx
Lokke:
;; reads from keyboard
mov ah,01h
int 21h
cmp al, " "
je Lokke
cmp al,"0"
jb PrintError
cmp al,"9"
ja PrintError
;; First character is a valid number
push ax
;;storing the first on the stack while checking the next character
mov ah,01h
int 21h
cmp al," "
je OneNumber
;;This part runs if the next char is a valid digit.
mov cl, al ;cl next digit
pop ax ; getting back the first from the stack
sub ax,"0" THIS LINE IS ADDED THANKS!!!!
mov bl, 10
mul bl
add ax, cx
mov dx,ax
mov dh,0 ;success variable set to true
mov dl,al
sub dl,"0"
pop ax
pop bx
pop cx
ret
OneNumber:
pop ax ;; Don't need it.
mov dh,0 ;success variable set too true
mov dl,al
sub dl,"0"
pop ax
pop bx
pop cx
ret
Это не работает должным образом, даже для однозначных чисел, я не могу понять, почему :(
Это выглядит просто отлично! Спасибо за ввод :)