Abaduaber

VadSid_5

Jun 1st, 2013
440
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. Model Small
  2. Stack 1024
  3. .186
  4. DATASEG
  5.     OutValNL db 1 ;Флаг перехода на новую строку.
  6.     BufLen db 240 ;Максимальное количество символов для ввода
  7.     BufSize db 0h ;Реальное количестве введенных символов
  8.     Text db 255 dup(0) ;Буфер для ввода текста, а также генерации вывода
  9.     NewLine db 0Dh, 0Ah, '$' ;Строка - переход на новую линию.
  10.  
  11.     InputStr db 'Введите строку: $';
  12.     Alphabet db 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'    ;Алфавит допустимых символов
  13.     AlphaIsEx db 26 dup(0)  ;Флаги присутствия символов в строке
  14. CODESEG
  15.  
  16. Start:
  17.     mov ax,@data
  18.     mov ds,ax ;Адрес сегмента данных куда положено
  19.     mov es,ax
  20.     mov dx,offset InputStr
  21.     call OutStr
  22.     call ReadLine
  23.     mov dx,offset NewLine
  24.     call OutStr
  25.     mov si,offset Text
  26.     xor dx,dx
  27.     xor bx,bx
  28.    
  29.     ;Алгоритм работы программы в двух словах: сканируем введенную строку по порядку пытаясь найти в ней каждую из букв
  30.     ;Если буква находится, то соответствующий ей флаг устанавливается в 1, и начинает искаться следующая буква
  31.     ;Если не находится, то ничего не происходит
  32.     ;По концу работы программы выводятся только те буквы, флаги которых установлены в 1.
  33.     xor dx,dx
  34. Scan:
  35.     mov bx,offset AlphaIsEx
  36.     mov si,offset Alphabet
  37.     mov dx,1ah
  38. ScanNextChar:
  39.     mov al,[si]
  40.     mov di,offset Text
  41.     xor cx,cx
  42.     mov cl,[BufSize]
  43.     repne scasb ;Проверим на соответствие текущей буквы одному из символов строки
  44.     je SetF ;Если было найдено соответствие - увеличим счетчик
  45.     jmp NextChar    ;;В противном случае, переходим к следующему символу и снова проверям 
  46. SetF:
  47.     mov byte ptr [bx],1
  48. NextChar:
  49.     inc bx
  50.     inc si
  51.     dec dx
  52.     jnz ScanNextChar
  53.    
  54.     ;Выведем найденные символы
  55.     mov bx,offset AlphaIsEx
  56.     mov si,offset Alphabet
  57.     mov dx,26
  58. OutNextChar:
  59.     mov al,[bx]
  60.     test al,al
  61.     jz PrepNextChar
  62.     mov ah,2
  63.     pusha
  64.     mov dl,[si]
  65.     int 21h
  66.     popa
  67. PrepNextChar:
  68.     inc si
  69.     inc bx
  70.     dec dx
  71.     jnz OutNextChar
  72.     mov ah,04ch
  73.     int 21h
  74.  
  75.     ;Функция, читает строку символов с клавиатуры
  76. ReadLine:
  77.     pusha
  78.     mov ah,0ah
  79.     mov dx,offset BufLen
  80.     int 21h
  81.     popa
  82.         ret
  83.  
  84.  
  85.     ;Выводит строку по адерсу ds:dx
  86. OutStr:
  87.     pusha
  88.     mov ah,09h
  89.     int 21h
  90.     popa
  91.     ret
  92. END Start
Advertisement
Add Comment
Please, Sign In to add comment