Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- sts segment stack 'stack'
- dw 128 dup(?)
- sts ends
- DSEG SEGMENT PARA PUBLIC "DATA"
- DSEG ENDS
- CSEG SEGMENT PARA PUBLIC "CODE"
- main proc far
- assume CS:CSEG,SS:STS,DS:DSEG
- push cs ;Заполним DS
- pop ds
- mov ah,09h ;Вывод приглашения на экран
- mov dx,offset str1
- int 21h
- ;Распределение регистров:
- ;di - накопленная часть числа
- ;si - номер текущей позиции
- ;bp=10 - делитель для процедур ввода и вывода
- ;ax и dx - служебные регистры (буферы)
- mov di,0 ;Пока ничего не введено, считаем что 0
- mov si,0 ;Номер позиции в числе
- mov bp,10 ;Потом будем умножать на 10
- r1: mov ah,08h
- int 21h ;Читаем символ
- cmp al,'0' ;Если это служебный символ -> r3
- jb r3
- cmp al,'9' ;Если это не цифра -> r1
- ja r1
- mov bl,al ;Сохраним символ в bl
- mov ax,di
- mul bp ;Умножаем на 10
- cmp dx,0
- mov dl,bl
- sub dl,'0' ;Преобразуем символ в цифру
- mov dh,0 ;DX - цифра
- add dx,ax
- jc r1 ;Если перенос -> переполнение
- inc si
- mov di,dx
- mov dl,bl
- mov ah,02h
- int 21h
- jmp r1
- r3: cmp si,0
- je r1
- cmp al,13
- je enter2 ;Нажали ввод
- cmp al,8 ;Нажали забой
- jne r1
- zab: dec si
- mov ax,di
- mov dx,0
- div bp
- mov di,ax
- mov dl,8
- mov ah,2
- int 21h
- mov dl,32
- int 21h
- mov dl,8
- int 21h
- jmp r1
- enter2: mov ah,2h
- mov dl,13
- int 21h
- mov dl,10
- int 21h
- mov ax,di
- ;Процедура вывода числа
- push ax
- mov dx,offset str2
- mov ah,09h
- int 21h
- pop ax
- push -1 ;Сохраним признак конца числа
- l: mov dx,0 ;Очистим регистр dx (xor dx,dx - оптимальнее)
- div bp ;Делим
- push dx ;Сохраним цифру
- cmp ax,0 ;Остался 0? (оптимальнее or ax,ax)
- jne l ;нет -> продолжим
- mov ah,2h
- l2: pop dx ;Восстановим цифру
- cmp dx,-1 ;Дошли до конца -> выход {оптимальнее: or dx,dx jl ex}
- je ex
- add dl,'0' ;Преобразуем число в цифру
- int 21h ;Выведем цифру на экран
- jmp l2 ;И продолжим
- ex: mov ah,02h ;Перейдм на новую строчку
- mov dl,13
- int 21h
- mov dl,10
- int 21h
- mov ax,4c00h
- str1 db 'The program that output decimal numbers ',10,13
- db 'Please enter the number: $'
- str2 db 'Your number: $'
- MAIN ENDP
- CSEG ENDS
- END MAIN
Add Comment
Please, Sign In to add comment