Форум программистов, компьютерный форум, киберфорум
dima koz
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  

Задачка с универа под ASM

Запись от dima koz размещена 11.10.2013 в 21:01
Показов 3663 Комментарии 0
Метки asm

Задание: Дан текст, состоящий из 8 слов по 5 символов. Определить количество гласных букв в каждом слове.

Код:
Кликните здесь для просмотра всего текста


Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
; Template for console application
         .586
         .MODEL  flat, stdcall
         OPTION CASEMAP:NONE
            
Include kernel32.inc
Include masm32.inc
 
IncludeLib kernel32.lib
IncludeLib masm32.lib
 
 
         .CONST
MsgExit             DB "Press Enter to Exit",0AH,0DH,0
MsgInput            DB "Enter 8 words of 5 characters each",0AH,0DH,0 
image_vowels        DB "AaEeIiOoUuYy", 0ah,0dh,0 
image_wordbreaker   DB " ",0ah,0dh,0 
MsgMainCycle        DB "in main cycle", 0ah,0dh,0  
MsgTotalVowels      DB 'Total vowels - ',0,0,0 
MsgInWord           DB 'in word ',0,0,0
MsgSpace            DB " - ", 0,0,0
MsgVowels           DB " vowels",10,13,0
MsgTooManySeparate  DB "Too many words", 0ah,0dh,0
max_iterator_main_cycle     dw 48 
max_iterator_inner_cycle    dw 12 
max_word_counter            dw 8 
 
         .DATA
iterator_main_cycle     dw 0
iterator_inner_cycle    dw 0
word_counter            dw 0
vowels_count_arr        dw 8 dup (0)
                                    
reserv                  DB    10 DUP(' '),0ah,0dh,0 
                                                    
MsgCountTotalVowels     DWORD     0
line_feed               DB 10,13,0
 
;source_str          db "aAawa aaAtt dsAyss stttk eiouy EIOUY tttwt yyyyA"
counter_total_vowers    dw 0
counter_vowers          dw 0
 
 
         .DATA?
inbuf    DB    100 DUP (?)
source_str DB 100 DUP(?)
 
 
         .CODE
Start:
    Invoke StdOut,ADDR MsgInput 
    Invoke StdIn,ADDR source_str,LengthOf source_str        
    
 
    
    XOR EAX,EAX 
    XOR ebx,ebx
    XOR ecx,ecx
    
main_cycle:
    XOR edx,edx
    lea esi, source_str
    mov iterator_inner_cycle,0 
    mov al,[esi][ecx] 
   
    lea edi , image_wordbreaker
    cmp al, [edi]
    je is_new_word
    lea edi , image_vowels
 
inner_cycle:
 
    cmp al, [edi][edx]
    jne next_vowels
    inc counter_total_vowers
    inc counter_vowers
    xor esi,esi
    mov si,word_counter
    mov dx,counter_vowers
    mov vowels_count_arr[esi*2],dx
 
    xor edx,edx
    jmp next_char
    
next_vowels:
    inc iterator_inner_cycle 
    mov dx,iterator_inner_cycle
    cmp dx, max_iterator_inner_cycle
    jne inner_cycle
    
next_char:
    inc iterator_main_cycle
    mov cx,iterator_main_cycle
    cmp cx, max_iterator_main_cycle
    je print_result 
    jmp main_cycle
 
is_new_word:
    inc word_counter
    mov counter_vowers, 0    
    mov bx,word_counter
    cmp bx,max_word_counter  
                            
    jg is_too_many_breakwords    
                               
    jmp next_char
 
 
is_too_many_breakwords:
    XOR    EAX,EAX
    Invoke StdOut,ADDR MsgTooManySeparate
    jmp print_exit
 
 
print_result:
    XOR    EAX,EAX
    Invoke StdOut,addr MsgTotalVowels  
    XOR    EAX,EAX
    mov ax,counter_total_vowers
    mov MsgCountTotalVowels, eax
    XOR    EAX,EAX
                  
    Invoke dwtoa,MsgCountTotalVowels   , ADDR reserv
    Invoke StdOut,addr reserv
    Invoke StdOut,addr line_feed
    mov word_counter,0
start_cycle_print:
    XOR    EAX,EAX
    Invoke StdOut,addr MsgInWord
    XOR    EAX,EAX
    mov ax,word_counter
    add ax,1
    mov MsgCountTotalVowels, eax
    XOR    EAX,EAX
    Invoke dwtoa,MsgCountTotalVowels   , ADDR reserv
    Invoke StdOut,addr reserv
    Invoke StdOut,addr MsgSpace
 
    xor esi,esi
    XOR    EAX,EAX
    mov si,word_counter
    mov ax,vowels_count_arr[esi*2]
    mov MsgCountTotalVowels, eax
    XOR    EAX,EAX
                  
    Invoke dwtoa,MsgCountTotalVowels   , ADDR reserv
    Invoke StdOut,addr reserv
    Invoke StdOut,addr MsgVowels
    ;Invoke StdOut,addr line_feed
    inc word_counter
    mov cx,word_counter
    cmp cx, max_word_counter
    je print_exit
    jmp start_cycle_print
    
         
print_exit:
    XOR    EAX,EAX
    Invoke StdOut,ADDR MsgExit
    Invoke StdIn,ADDR inbuf,LengthOf inbuf      
    
    Invoke ExitProcess,0
    End    Start
Метки asm
Размещено в Без категории
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Всего комментариев 0
Комментарии
 
Новые блоги и статьи
[golang] Двоичная куча, min-heap
alhaos 20.05.2026
Двоичная куча Двоичная куча — структура данных, которая всегда держит самый важный элемент наготове. Представьте очередь к хилеру в игре, и очередь из игроков в приоритете те у кого меньше. . .
[golang] Breadth-First Search
alhaos 19.05.2026
BFS (Breadth-First Search) — это базовый алгоритм обхода графа в ширину, который поуровнево исследует все связанные вершины. Он начинает с выбранной точки и проверяет всех соседей, прежде чем. . .
[golang] Алгоритм «Хак Госпера»
alhaos 17.05.2026
Алгоритм «Хак Госпера» Хак Госпера (Gosper's Hack) — алгоритм нахождения следующего по величине числа с тем же количеством установленных бит. Придуман Биллом Госпером в 1970-х, опубликован в. . .
Рисование бинарного древа до 6-го колена на js, svg.
russiannick 17.05.2026
<svg width="335" height="240" viewBox="0 0 335 240" fill="#e5e1bb"> <style> <!]> </ style> <g id="bush"> </ g> </ svg> function fn(){ let rost;/ / высота древа let xx=165,yy=210,w=256;
FSharp: interface of module
DevAlt 16.05.2026
Интерфейс модуля F# позволяет управлять доступностью членов, содержащихся в реализации модуля. По-умолчанию все члены модуля доступны: module Foo let x = 10 let boo () = printfn "boo" . . .
Хитросплетение родственных связей пантеона греческих богов.
russiannick 14.05.2026
Однооконник, позволяющий узреть и изучить отдельных героев древней Греции. <!DOCTYPE html> <html lang="ru"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible". . .
[golang] Угол между стрелками часов
alhaos 12.05.2026
По заданным значениям часа и минуты необходимо определить значение меньшего угла между стрелками аналогового циферблата часов. import "math" func angleClock(hour int, minutes int) float64 { . . .
Debian 13: Установка Lazarus QT5
ВитГо 09.05.2026
Эта инструкция моя компиляция инструкций volvo https:/ / www. cyberforum. ru/ blogs/ 203668/ 10753. html и его же старой инструкции по установке Lazarus с gtk2. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru