Форум программистов, компьютерный форум, киберфорум
Наши страницы
Assembler, MASM, TASM
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
ExtazY1991
0 / 0 / 0
Регистрация: 06.10.2010
Сообщений: 16
1

Обработка файлов языком ассемблера

07.10.2010, 08:52. Просмотров 900. Ответов 6
Метки нет (Все метки)

Написать программу - фильтр, который получает на вход в командной строке два имени текстовых файлов: информация считывается из первого файла, а во второй записывается сколько в исходном файле:
- букв,
- цифр,
- пробельных символов,
- всех других символов;

К сожалению асамблер не знаю, поэтому вынужден обращаться с помощью к профессионалам помогите мне пожалуйста написать эту контрольную работу. Если у кого-то будет еще желание мне помочь, то я создал еще две темы из этой же контрольной. Кто поможет хотя бы по одной теме я буду очень признательным…

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.10.2010, 08:52
Ответы с готовыми решениями:

Связь Ассемблера с языком C#
Доброго времени суток, уважаемые форумчане... Возник вопрос: Можно ли из программы на языке C#...

Обработка файлов с созданием и использованием файла со списком имён файлов, исключаемых при данной обработке
Эх, чтобы я без вас делал то ;) Доброго времени суток! Задача сценария: просматривать файлы в...

Обработка файлов
Здравствуйте! Подскажите пожалуйста как можно перемножить значения двух файлов? Например есть...

Обработка файлов
нужна программа, в которой ты вводишь имя файла с клавы, она открывает его, ты задаешь условие,...

Обработка файлов.
Дан символьный файл f, содержащий четное число символов X1,X2...X2n-1,X2n.Составить программу,...

6
murderer
4612 / 1581 / 163
Регистрация: 06.10.2010
Сообщений: 3,498
07.10.2010, 15:41 2
Вроде работает. Компилировать FASM`ом.
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
format PE GUI 4.0
entry start
 
FORMAT_MESSAGE_FROM_STRING   =400h
FORMAT_MESSAGE_ARGUMENT_ARRAY=2000h
OPEN_EXISTING            =3
CREATE_ALWAYS            =2
GENERIC_READ             =80000000h
GENERIC_WRITE            =40000000h
 
section '' import code readable writeable executable
 
dd 0,0,0,RVA kernel,RVA kernel_table
dd 0,0,0,0,0
 
kernel_table:
  CreateFile     dd RVA _CreateFile
  GetFileSize    dd RVA _GetFileSize
  ReadFile   dd RVA _ReadFile
  WriteFile  dd RVA _WriteFile
  CloseHandle    dd RVA _CloseHandle
  FormatMessage  dd RVA _FormatMessage
  ExitProcess    dd RVA _ExitProcess
  GetCommandLine dd RVA _GetCommandLine
dd 0
 
kernel      db 'KERNEL32.DLL',0
_CreateFile db 0,0,'CreateFileA',0
_GetFileSize    db 0,0,'GetFileSize',0
_ReadFile   db 0,0,'ReadFile',0
_WriteFile  db 0,0,'WriteFile',0
_CloseHandle    db 0,0,'CloseHandle',0
_FormatMessage  db 0,0,'FormatMessageA',0
_GetCommandLine db 0,0,'GetCommandLineA',0
_ExitProcess    db 0,0,'ExitProcess',0
 
start:
  ;Находим в командной строке имена входного и выходного файлов
  call  [GetCommandLine]
  mov   ecx,-1
  lea   edi,[eax+1]
  mov   al,'"'
  repne scasb
  repne scasb
  mov   esi,edi
  repne scasb
  mov   byte[edi-1],0
  repne scasb
  mov   ebx,edi
  repne scasb
  mov   byte[edi-1],0
 
  ;Открываем файл и считываем его в переменную Buffer
  push 0
  push 0
  push OPEN_EXISTING
  push 0
  push 0
  push GENERIC_READ
  push esi
  call [CreateFile]
  mov  edi,eax
  push 0
  push eax
  call [GetFileSize]
  mov  esi,eax
  push 0
  push tmp
  push eax
  push Buffer
  push edi
  call [ReadFile]
  push edi
  call [CloseHandle]
 
  ;Создаём выходной файл
  push 0
  push 0
  push CREATE_ALWAYS
  push 0
  push 0
  push GENERIC_WRITE
  push ebx
  call [CreateFile]
  mov  edi,eax
 
  ;Подсчитываем символы
  xor edx,edx
  xor eax,eax
  calc:mov  al,[Buffer+esi-1]
       bt   [chars],eax
       adc  [numbers],0
       bt   [nums],eax
       adc  [numbers+4],0
       cmp  al,' '
       sete dl
       add  [numbers+8],edx
       bt   [others],eax
       adc  [numbers+12],0
       dec  esi
  jne calc
 
  ;Записываем текст в файл
  push numbers
  push 1024
  push Buffer
  push 0
  push 0
  push txt
  push FORMAT_MESSAGE_FROM_STRING+FORMAT_MESSAGE_ARGUMENT_ARRAY
  call [FormatMessage]
  dec  eax
  push 0
  push tmp
  push eax
  push Buffer
  push edi
  call [WriteFile]
  push edi
  call [CloseHandle]
 
  push 0
  call [ExitProcess]
 
others  dd 0FFFFFFFFh,0FC00FFFFh,0F8000001h,0F8000001h,0FFFFFFFFh,0FFFFFFFFh,0,0
chars   dd 0,0,07FFFFFEh,07FFFFFEh,0,0,0FFFFFFFFh,0FFFFFFFFh
nums    dd 0,03FF0000h,0,0,0,0,0,0
Buffer  rb 1024
txt db 'букв - %1!d!%n',\
       'цифр - %2!d!%n',\
       'пробельных символов - %3!d!%n',\
       'всех других символов - %4!d!'
numbers dd 0,0,0,0
tmp dd 0
Формат командной строки "программа.exe" "<путь к входному файлу>" "<путь к выходному файлу>"
1
ExtazY1991
0 / 0 / 0
Регистрация: 06.10.2010
Сообщений: 16
07.10.2010, 16:28  [ТС] 3
murderer, Извините возможно я что-то не верно делаю, но программа не работает Windows выдает ошибку и программа закрывается автоматически. Компилировал Fastом…
0
murderer
4612 / 1581 / 163
Регистрация: 06.10.2010
Сообщений: 3,498
07.10.2010, 16:38 4
Формат командной строки "программа.exe" "<путь к входному файлу>" "<путь к выходному файлу>"
Создай ярлык к exe`шнику и в свойствах пропиши нужные параметры (имена входного и выходного файла в кавычках).

Входной файл должен содержать хотя-бы 1 символ.
1
Миниатюры
Обработка файлов языком ассемблера  
ExtazY1991
0 / 0 / 0
Регистрация: 06.10.2010
Сообщений: 16
07.10.2010, 21:44  [ТС] 5
murderer,Спасибо заработало!!!

Добавлено через 4 часа 49 минут
Задача №3. Представить программу, которая написана выше в .COM формате с оставлением в памяти после завершения. Запуск на выполнение по нажатию комбинации клавиш SHIFT + Printscreen. Заранее спасибо… Извините за повтор, темы закрывают поэтому вынужден писать здесь.
0
murderer
4612 / 1581 / 163
Регистрация: 06.10.2010
Сообщений: 3,498
08.10.2010, 09:34 6
У меня нет желания переписывать программу в com формат.

Вот что получилось:
1) Запускаем программу через ярлык как раньше
2) Нажимаем Print Screen (не знаю как сделать shift+printscreen), происходит пересчёт символов в файле и выводится сообщение на экран.
3) Нажимаем escape - программа закрывается.

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
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
format PE GUI 4.0
entry start
 
FORMAT_MESSAGE_FROM_STRING   =400h
FORMAT_MESSAGE_ARGUMENT_ARRAY=2000h
OPEN_EXISTING            =3
CREATE_ALWAYS            =2
GENERIC_READ             =80000000h
GENERIC_WRITE            =40000000h
WH_KEYBOARD_LL           =13
WM_KEYDOWN           =100h
 
section '' import code readable writeable executable
 
dd 0,0,0,RVA kernel,RVA kernel_table
dd 0,0,0,RVA user,RVA user_table
dd 0,0,0,0,0
 
kernel_table:
  CreateFile      dd RVA _CreateFile
  GetFileSize     dd RVA _GetFileSize
  ReadFile    dd RVA _ReadFile
  WriteFile   dd RVA _WriteFile
  CloseHandle     dd RVA _CloseHandle
  FormatMessage   dd RVA _FormatMessage
  ExitProcess     dd RVA _ExitProcess
  GetCommandLine  dd RVA _GetCommandLine
  GetModuleHandle dd RVA _GetModuleHandle
  dd 0
 
user_table:
  GetMessage          dd RVA _GetMessage
  TranslateMessage    dd RVA _TranslateMessage
  DispatchMessage     dd RVA _DispatchMessage
  SetWindowsHookEx    dd RVA _SetWindowsHookEx
  CallNextHookEx      dd RVA _CallNextHookEx
  UnhookWindowsHookEx dd RVA _UnhookWindowsHookEx
  MessageBox          dd RVA _MessageBox
  dd 0
 
kernel       db 'KERNEL32.DLL',0
_CreateFile  db 0,0,'CreateFileA',0
_GetFileSize     db 0,0,'GetFileSize',0
_ReadFile    db 0,0,'ReadFile',0
_WriteFile   db 0,0,'WriteFile',0
_CloseHandle     db 0,0,'CloseHandle',0
_FormatMessage   db 0,0,'FormatMessageA',0
_GetCommandLine  db 0,0,'GetCommandLineA',0
_ExitProcess     db 0,0,'ExitProcess',0
_GetModuleHandle db 0,0,'GetModuleHandleA',0
 
user             db 'USER32.DLL',0
_MessageBox      db 0,0,'MessageBoxA',0
_SetWindowsHookEx    db 0,0,'SetWindowsHookExA',0
_CallNextHookEx      db 0,0,'CallNextHookEx',0
_GetMessage      db 0,0,'GetMessageA',0
_TranslateMessage    db 0,0,'TranslateMessage',0
_DispatchMessage     db 0,0,'DispatchMessageA',0
_UnhookWindowsHookEx db 0,0,'UnhookWindowsHookEx',0
 
start:
  ;Находим в командной строке имена входного и выходного файлов
  call  [GetCommandLine]
  mov   ecx,-1
  lea   edi,[eax+1]
  mov   al,'"'
  repne scasb
  repne scasb
  mov   [infile],edi
  repne scasb
  mov   byte[edi-1],0
  repne scasb
  mov   [outfile],edi
  repne scasb
  mov   byte[edi-1],0
 
  ;Ставим глобальный хук на клавиатуру
  push 0
  call [GetModuleHandle]
  push 0
  push eax
  push KeyBoardProc
  push WH_KEYBOARD_LL
  call [SetWindowsHookEx]
  mov  [HHook],eax
  d:push 0
    push 0
    push 0
    push Buffer
    call [GetMessage]
    push Buffer
    call [TranslateMessage]
    push Buffer
    call [DispatchMessage]
  jmp d
 
KeyBoardProc:
  cmp  dword[esp+8],WM_KEYDOWN
  jne  quit
  mov  eax,[esp+12]
  cmp  word[eax+4],55  ;Если нажат PrintScreen - пересчитываем символы в файле
  jne  escape
 
  ;Открываем файл и считываем его в переменную Buffer
  push 0
  push 0
  push OPEN_EXISTING
  push 0
  push 0
  push GENERIC_READ
  push [infile]
  call [CreateFile]
  mov  edi,eax
  push 0
  push tmp
  push 1024
  push Buffer
  push edi
  call [ReadFile]
  push edi
  call [CloseHandle]
 
  ;Создаём выходной файл
  push 0
  push 0
  push CREATE_ALWAYS
  push 0
  push 0
  push GENERIC_WRITE
  push [outfile]
  call [CreateFile]
  mov  edi,eax
 
  ;Подсчитываем символы
  mov esi,[tmp]
  xor edx,edx
  xor eax,eax
  mov [numbers],eax
  mov [numbers+4],eax
  mov [numbers+8],eax
  mov [numbers+12],eax
  calc:mov  al,[Buffer+esi-1]
       bt   [chars],eax
       adc  [numbers],0
       bt   [nums],eax
       adc  [numbers+4],0
       cmp  al,' '
       sete dl
       add  [numbers+8],edx
       bt   [others],eax
       adc  [numbers+12],0
       dec  esi
  jne calc
 
  ;Записываем текст в файл
  push numbers
  push 1024
  push Buffer
  push 0
  push 0
  push txt
  push FORMAT_MESSAGE_FROM_STRING+FORMAT_MESSAGE_ARGUMENT_ARRAY
  call [FormatMessage]
  dec  eax
  push 0
  push tmp
  push eax
  push Buffer
  push edi
  call [WriteFile]
  push edi
  call [CloseHandle]
 
  ;Выводим сообщение
  push 0
  push [infile]
  push Buffer
  push 0
  call [MessageBox]
  ret 12
 
  escape:
  mov eax,[esp+12]
  cmp dword[eax+4],1
  jne quit         ;Если нажата клавиша escape выходим из программы
  push [HHook]
  call [UnhookWindowsHookEx]
  push 0
  call [ExitProcess]
  quit:
 
  push dword[esp+12]
  push dword[esp+8]
  push dword[esp+4]
  push [HHook]
  call [CallNextHookEx]
ret 12
 
Buffer  rb 1024
numbers rd 4
tmp rd 1
HHook   rd 1
infile  rd 1
outfile rd 1
others  dd 0FFFFFFFFh,0FC00FFFFh,0F8000001h,0F8000001h,0FFFFFFFFh,0FFFFFFFFh,0,0
chars   dd 0,0,07FFFFFEh,07FFFFFEh,0,0,0FFFFFFFFh,0FFFFFFFFh
nums    dd 0,03FF0000h,0,0,0,0,0,0
txt db 'букв - %1!d!%n',\
       'цифр - %2!d!%n',\
       'пробельных символов - %3!d!%n',\
       'всех других символов - %4!d!'
1
ExtazY1991
0 / 0 / 0
Регистрация: 06.10.2010
Сообщений: 16
08.10.2010, 09:36  [ТС] 7
Спасибо за всё...
0
08.10.2010, 09:36
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.10.2010, 09:36

обработка файлов
дан текстовый файл. получить строку, в которой минимальное число слов.

обработка файлов
Записать в файл п произвольных натуральных чисел Переписать в другой файл те элементы, которые...

Обработка файлов)
Создать в программе Блокнот текстовый файл. Написать программу, которая подсчитывает количество...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru