можно поинтересоваться, как последовательно ввести введенные цифры в ОЗУ и вычислить значение введенного числа
(т.е допустим, вводим число 435, для компьютера это последовательность из 4, 3, 5. как дать процессору понять чтобы он
допустим, 5 умножил на 1, 3 на 10, 4 на 100, сложил бы их и т.о., вычислил бы введенное число.)
или я не совсем понимаю, что мне нужно сделать?
CODE
;По запросу программы пользователь вводит с клавиатуры
;последовательность целых трехзначных положительных десятичных чисел,
;разделенных пробелами. Ввод последовательности заканчивается нажатием <Enter>.
;Программа выводит эти же числа на экран в порядке возрастания величины числа,
;причем в шестнадцатеричной системе счисления.
;======================================================================
.model small ;определили модель памяти как small
.stack 128 ;выделели под программу 128 байт памяти
.data ;объявили сегмент данных
;mess db 'Hi man!$' ;определили переменную типа databyte размером 1 байт
next db '', 0Dh, 0Ah, '$' ;определили переменную типа databyte размером 1 байт
mess db 'vvedite chisla?', 0Dh, 0Ah, '$' ;определили переменную типа databyte размером 1 байт
endpr db 'end program', 0Dh, 0Ah, '$'
;db 0Dh,0Ah,24h
.code ;объявили сегмент кода
main:
;следующими двумя строками мы связываем адрес сегмента данных с его реальным расположением в памяти.
;Это связано с тем, что сегмент кода и сегмент данных расположены по одному и тому же
;адресу в памяти при инициализации программы.
mov ax,@data
mov ds,ax
;следующие три строки кода выводят на экран надпись "'vvedite chisla?"
lea dx,mess
mov ah,09h
int 21h
;================================
in_out:
mov ah,0 ; Ожидаем нажатия и
int 16h ; читаем код клавиши
mov bl,al ; Сохраняем код
mov ah,0eh ; Выводим символ
int 10h ; на экран
cmp bl,' ' ; Если не нажата клавиша
je space ; пробел, повторяем ввод
cmp bl,13 ; это клавиша ENTER?
je enter ; если нажата кнопке ENTER, перейти в подпрограмму ENT
:если не нажаты клавиши пробела и ентера, предполагаем что нажаты
;цифры, и последовательно сохраняем их (наверно, в ОЗУ?)
jmp in_out
;================================
;по нажатию пробел нужно последовательно извлечь все введенные
;цифры и вычислить значение введенного числа в десятичном виде
space:
lea dx,next;перевод на следующую строку
mov ah,09h
int 21h
lea dx,next;перевод на следующую строку
mov ah,09h
int 21h
jmp in_out
;================================
;по нажатию ентера вычислять числа в порядке возрастания,
;преобразовывать их в 16-ричные и выводить
enter:
lea dx,next;перевод на следующую строку
mov ah,09h
int 21h
lea dx,endpr;вместо ендпрограмм должен быть вывод чисел
mov ah,09h
int 21h
jmp in_out
;================================
;собственно последние две строчки корректно завершают программу
mov ax,4c00h
int 21h
end main