Advertisement
YomoMan

Untitled

May 15th, 2021
1,565
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. .586
  2. .MODEL flat, stdcall
  3. OPTION CASEMAP:NONE
  4.  
  5. Include kernel32.inc
  6. Include masm32.inc
  7.  
  8. IncludeLib kernel32.lib
  9. IncludeLib masm32.lib
  10.  
  11. .CONST
  12.     MsgExit DB 0AH,0DH,"Program end.",0AH,0DH,0
  13.     initial DB "Initial string: ", 0
  14.     result DB "Numbers of strings: ", 0
  15.      
  16.      
  17. .DATA
  18.     cons DB "qwrtpsdfghjklzxcvbnm", 0
  19.     vowels DB "yueioa", 0
  20.      
  21.     cons_size dword 20
  22.     vowels_size dword 6
  23.     source DB " omm f e q et yt ioe sfjso   ", 0
  24.     space DB " ", 0
  25.     endl DB 10, 13, 0
  26.      
  27.     buf DB 20 DUP (?)
  28.     string DB 200 DUP (?)
  29.  
  30.  
  31. .CODE
  32. Start:
  33.     ;-âûâîä èçíà÷àëüíîé ñòðîêè--
  34.     Invoke StdOut, ADDR initial
  35.     Invoke StdOut, ADDR source
  36.     Invoke StdOut, ADDR endl
  37.     ;---------------------------
  38.      
  39.     Invoke StdOut, ADDR result
  40.      
  41.      
  42.     ;--ÂÛ×ÈÑËÅÍÈÅ ÄËÈÍÛ ÑÒÐÎÊÈ--
  43.     lea edi, source
  44.     mov ecx, 200
  45.     mov al, 0
  46.     repne scasb
  47.     mov eax, 200
  48.     sub eax, ecx
  49.     mov ecx, eax
  50.     dec ecx
  51.     ;---------------------------
  52.      
  53.     cld ; íàïðàâëåíèå ñëåâà íà ïðàâî
  54.      
  55.     ;-äîáàâèì ñëóæåáíûå ïðîáåëû â ñòðîêó-
  56.     push ecx
  57.     lea esi, source
  58.     lea edi, string
  59.     rep movsb
  60.     mov ecx, 2
  61.     lea esi, space
  62.     rep movsb
  63.     pop ecx
  64.     add ecx, 2
  65.     ;------------------------------------
  66.      
  67.      
  68.      
  69.     mov ebx, 1 ; ñ÷åò÷èê íîìåðà ñëîâà
  70.     lea esi, string
  71.     mov edi, esi
  72.     mov al, ' '
  73.     repe scasb ; ïðîïóñêàåì ïðîáåë(û) ìåæäó ñëîâàìè
  74.     dec edi
  75.     inc ecx
  76.     mov esi, edi
  77.     cycle: cmp ecx, 0 ; ïðîâåðêà íà îêîí÷àíèå ñòðîêè
  78.         jle ecx_0 ; åñëè çàêîí÷èëàñü - ïðûãàåì ê ìåòêå ecx_o
  79.          
  80.         lodsb ; çàãðóæàåì ïåðâûé ñèìâîë ñëîâà â AL
  81.         dec ecx ; çàãðóçèëè ñèìâîë - óìåíüøèëàñü è äëèíà ñòðîêè
  82.         ;inc ebx ; óâåëè÷èâàåì ñ÷åò÷èê ñëîâ
  83.         lea edi, vowels ; ÷òîáû ïðîâåðèòü, ÿâëÿåòñÿ ëè ïåðâàÿ áóêâà ñîãëàñíîé (cons)
  84.         push ecx ; ïîìåñòèì â edi âñå ñîãëàñíûå, â ecx - êîë-âî âñåõ ñîãëàñíûõ â àëôàâèòå
  85.         mov ecx, vowels_size
  86.         repne scasb ; ïûòàåìñÿ íàéòè â ñïèñêå ñîãëàñíûõ áóêâó, íàõîäÿùóþñÿ â AL
  87.         pop ecx
  88.         jne not_vowel ; åñëè ïåðâàÿ áóêâà íå ñîãëàñíàÿ - ïðûãàåì íà ìåòêó not_cons
  89.          
  90.         is_vowel: ; åñëè ñîãëàñíàÿ,òî ïðîâåðÿåì äàëüøå íà ïîñëåäíþþ ãëàñíóþ áóêâó
  91.         mov edi, esi ; ïîñëåäíÿ áóêâà ñëîâà - çíà÷èò, ÷òî îíà èäåò äî ïåðâîãî ïðîáåëà
  92.         mov al, ' '
  93.         repne scasb ; ïîýòîìó íàõîäèì ïðîáåë, â èòîãå ïîïàäàåì íà áóêâó ÏÎÑËÅ ïðîáåëà
  94.         dec edi ; ïîýòîìó äâàæäû øàãàåì íàçàä, ñíà÷àëà ê ïðîáåëó, ïîòîì ê ïîñëåäíåé áóêâå
  95.         dec edi
  96.         add ecx, 2
  97.          
  98.         mov esi, edi
  99.         lodsb ; çàãðóæàåì â ALïîñëåäíþþ áóêâó ñëîâà
  100.         dec ecx
  101.         lea edi, cons ; òåïåðü òàêæå ïðîâåðÿåì, ÿâëÿåòñÿ ëè áóêâà ãëàñíîé
  102.        
  103.         push ecx
  104.         mov ecx, cons_size
  105.         repne scasb
  106.         pop ecx
  107.         je con ; åñëè áóêâà ãëàñíàÿ,òî ñëîâà íàì ïîäõîäèò è ïðûãàåì íà vowel
  108.         ;inc esi
  109.         mov edi, esi
  110.         mov al, ' '
  111.         repe scasb ; ïðîïóñêàåì ïðîáåë(û) ìåæäó ñëîâàìè
  112.         dec edi
  113.         inc ecx
  114.         inc ebx
  115.         mov esi, edi
  116.         jmp cycle ; åñëè íå ïîäîøëà, íà÷èíàåì çàíàâî
  117.         con:
  118.         push ecx
  119.         invoke dwtoa, ebx, addr buf ; âûâîäèì íîìåð ñëîâà
  120.         invoke StdOut, ADDR buf
  121.         invoke StdOut, ADDR space
  122.         pop ecx
  123.         inc ecx
  124.         mov edi, esi
  125.         mov al, ' '
  126.         repe scasb ; ïðîïóñêàåì ïðîáåë(û) ìåæäó ñëîâàìè
  127.         dec edi
  128.         mov esi, edi
  129.         inc ebx
  130.         jmp cycle ; âîçâðàøàåìñÿ â íà÷àëî
  131.          
  132.         not_vowel: ; åñëè ïåðâàÿ áóêâà íå ñîãëàñíàÿ,ñðàçó ïåðåõîäèì ê ñëåäóþ-
  133.         mov edi, esi ; ùåìó ñëîâó, ïðîïóñêàÿ âñå ïðîáåëû
  134.         mov al, ' '
  135.         inc ecx
  136.         repne scasb
  137.         repe scasb
  138.         dec edi
  139.         mov esi, edi
  140.         inc ebx
  141.         jmp cycle
  142.          
  143.      
  144.     ecx_0:
  145.      
  146.     XOR EAX,EAX
  147.     Invoke StdOut,ADDR MsgExit
  148.     Invoke StdIn, ADDR buf, LengthOf buf
  149.      
  150.     Invoke ExitProcess,0
  151. End Start
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement