CODE
;Ввод числа в виде строки
MOV AH,0AH ;в AH номер функции
LEA DX,BUF ;DS:DX адрес буфера для ввода
INT 21H
;Перевод строки в число, результат в DI
MOV DI,0
LEA BX,BUF+1 ;в BX адрес второго элемента буфера
MOV CX,[BX] ;в CX количество введенных символов
XOR CH,CH
MOV SI,1 ;в SI множитель
MET:
PUSH SI ;сохраняем SI (множитель) в стеке
MOV SI,CX ;в SI помещаем номер текущего символа
MOV AX,[BX+SI];в AX помещаем текущий символ
XOR AH,AH
POP SI ;извлекаем множитель (SI)из стека
SUB AX,30H ;получаем из символа (AX) цифру
MUL SI ;умножаем цифру (AX)на множитель (SI)
ADD DI,AX ;складываем с результирующим числом
MOV AX,SI ;помещаем множитель (SI) в AX
MOV DX,10
MUL DX ;увеличиваем множитель (AX) в 10 раз
MOV SI,AX ;перемещаем множитель (AX) азад в SI
LOOP MET;переходим к предыдущему символу
и перед мейном buf db 05,00,05 dup (' ') ;буфер ввода
теперь думаю, как их соеденить,
нужно ли перед входом в эту "часть программы" сохранять значения регистров (в стеке)?
и при нажатии спейса надо будет обнулять еще много чего...
устал от ассемблера. осталась всего неделя. проникнулся уважение к 8-разрядным микроконтроллерам.