Простите, это снова я. Не работает почему-то, точнее работает, но криво. Код здесь. (думал сюда не влезет и забанят (: ) по идее, должна писать код в двух частях экрана. Но не пишет. Заранее, спасибо. Код (Text): ;программа ввода и вывода числа sta segment stack db 256 dup (?) sta ends dan segment num dw ? dan ends cod segment assume cs:cod,ds:dan,ss:sta beg: mov dx,ds ;загружаем начало сегмента данных mov ax,dx ;в регистр dx ;очистка экрана mov ax,0600h mov bh,15 mov cx,00h mov dx,184fh int 10h ;------------------------- ;установка позиции курсора mov dx,0000h mov bh,00h mov ah,02h int 10h ;------------------------- ;ввод числа mov si,10 ;работаем с десятичной нотацией mov di,0 @aa: ; вводим число до нажатия клавиши "ВВОД" mov ah,01h int 21h cmp al,13 ; проверяем нажатие клавиши "ВВОД" jz a1 ; если клавиша нажата, то переходим на конец ; обработки ввода числа ; иначе выполняем следующие 8 пунктов sub al,'0' ; из кода ASCII получаем цифру xor ah,ah ; теперь значение ах равно значению al mov cx,ax ; копируем ах в сх mov ax,di ;записываем в ах введенное до текущей цифры число mul si ;умножаем его на 10, переходя тем самым в текущий ;разряд add ax,cx ;добавляем к числу текущую цифру mov di,ax ;сохраняем текущее число в di jmp @aa ; переходим на обработку следующего разряда a1: mov num,di ; сохраняем окончательное значение введенного числа ; в переменной "num" outp proc near ;макроопределение для вывода на экран mov si,10 mov ax,num mov cx,0 a: mov dx,0 div si add dx,'0' push dx inc cx cmp ax,0 jnz a aa: pop dx mov ah,02h int 21h loop aa ret outp endp ;-------------------------- ;установка позиции курсора mov dx,0B00h mov bh,0h mov ah,02h int 10h ;-------------------------- ;вывод числа call outp ;---------------------------- mov dx,0B46h mov bh,0h mov ah,02h int 10h call outp mov ah,01h ;организуем задержку выполнения программы int 21h ;до нажатия клавиши mov ah,4Ch ;обработка окончания int 21h ;программы cod ends end beg
С подпрограммой разобрался, она тут ни при чем. У меня почему то из процедуры не возвращается в то место, откуда я ее вызвал. А снова в начало, что делать? ):
конечно, ведб proc - это макрос он транслирует в асм код то, что ты написал, никакого контроля не производит. И получается у тебя код: Код (Text): a1: mov num,di ; сохраняем окончательное значение введенного числа ; в переменной "num" push ebp mov ebp, esp ... Потом идёт рет, который и вовращает управление из програмы.