daily pastebin goal
94%
SHARE
TWEET

Untitled

a guest Dec 9th, 2018 71 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. sts segment stack 'stack'
  2. db  256 dup(0) 
  3. sts ends
  4.  
  5. DSEG SEGMENT PARA PUBLIC "DATA"
  6. num dw-23567   
  7. DSEG ENDS
  8.  
  9.  
  10. CSEG SEGMENT
  11. main proc far
  12. ASSUME SS:STS,CS:CSEG,DS:DSEG
  13. push    cs              ;Заполним DS
  14.     pop ds
  15.     mov ah,09h      ;Вывод приглашения на экран
  16.     mov dx,offset str1
  17.     int 21h
  18.     ;Распределение регистров:
  19.     ;di - накопленная часть числа
  20.     ;si - номер текущей позиции
  21.     ;bp=10 - делитель для процедур ввода и вывода
  22.     ;ax и dx - служебные регистры (буферы)
  23.     mov di,0        ;Пока ничего не введено, считаем что 0
  24.     mov si,0        ;Номер позиции в числе
  25.     mov bp,10       ;Потом будем умножать на 10
  26. r1: mov ah,08h     
  27.     int 21h     ;Читаем символ
  28.     cmp al,'0'      ;Если это служебный символ -> r3
  29.     jb  r3
  30.     cmp al,'9'      ;Если это не цифра -> r1
  31.     ja  r1
  32.     mov bl,al       ;Сохраним символ в bl
  33.     mov ax,di
  34.     mul bp      ;Умножаем на 10
  35.     cmp dx,0
  36.     mov dl,bl
  37.     sub dl,'0'      ;Преобразуем символ в цифру
  38.     mov dh,0        ;DX - цифра
  39.     add dx,ax
  40.     jc  r1           ;Если перенос -> переполнение
  41.     inc si
  42.     mov di,dx          
  43.     mov dl,bl
  44.     mov ah,02h
  45.     int 21h
  46.     jmp r1
  47. r3: cmp si,0
  48.     je  r1
  49.     cmp al,13
  50.     je  enter2      ;Нажали ввод
  51.     cmp al,8        ;Нажали забой
  52.     jne r1
  53. zab:    dec si
  54.     mov ax,di
  55.     mov dx,0
  56.     div bp
  57.     mov di,ax
  58.     mov dl,8
  59.     mov ah,2
  60.     int 21h
  61.     mov dl,32
  62.     int 21h
  63.     mov dl,8
  64.     int 21h
  65.     jmp r1
  66. enter2: mov ah,2h
  67.     mov dl,13
  68.     int 21h
  69.     mov dl,10
  70.     int 21h
  71.     mov ax,di
  72.     ;Процедура вывода числа
  73.     push    ax
  74.     mov dx,offset str2
  75.     mov ah,09h
  76.     int 21h
  77.     pop ax
  78.     push    -1  ;Сохраним признак конца числа
  79. l:  mov dx,0    ;Очистим регистр dx
  80.     div bp  ;Делим
  81.     push    dx  ;Сохраним цифру
  82.     cmp ax,0    ;Остался 0?
  83.     jne l   ;нет -> продолжим
  84.     mov ah,2h
  85. l2: pop dx  ;Восстановим цифру
  86.     cmp dx,-1   ;Дошли до конца -> выход {оптимальнее: or dx,dx jl ex}
  87.     je  ex
  88.     add dl,'0'  ;Преобразуем число в цифру
  89.     int 21h ;Выведем цифру на экран
  90.     jmp l2  ;И продолжим
  91. ex:     mov ah,02h  ;Перейходим на новую строчку
  92.     mov dl,13
  93.     int 21h
  94.     mov dl,10
  95.     int 21h
  96.     mov     ah,09h
  97.     mov     dx,offset str3
  98.     int     21h
  99.     mov     ah,0ah
  100.     int     21h
  101.     mov ax,4c00h;Выход
  102.     int 21h
  103.    
  104. str1    db  'Max digits = 5:'
  105.     db  10,13,'Please enter the number $'
  106. str2    db  10,13,'Your number: $'
  107. str3    db  10,13,'Press enter to exit...$'
  108. MAIN ENDP
  109. CSEG ENDS
  110. END MAIN
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
 
Top