|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
03.06.2010, 22:40 | #21 | |||
Непрофессионал
Участник клуба
Регистрация: 01.01.2008
Сообщений: 1,405
|
Цитата:
Цитата:
Цитата:
И чем больше я узнавал людей, тем больше мне нравились компьютеры.
------------------------------------ Страничка с моими программками http://ulex-masm.ru |
|||
03.06.2010, 23:11 | #22 |
Пользователь
Регистрация: 02.06.2010
Сообщений: 32
|
|
04.06.2010, 19:17 | #23 |
Пользователь
Регистрация: 02.06.2010
Сообщений: 32
|
Дорогие форумчане,я понимаю что ето наглость но можете обяснить строки етой програми,что каждая делает? Меня севодня завалили
|
05.06.2010, 07:26 | #24 | |
Старожил
Регистрация: 09.01.2008
Сообщений: 26,229
|
так Ulex Вам же ещё вчера об этом ясно дал понять:
Цитата:
|
|
05.06.2010, 14:40 | #25 | |
Пользователь
Регистрация: 02.06.2010
Сообщений: 32
|
Цитата:
|
|
06.06.2010, 00:18 | #26 | |
Непрофессионал
Участник клуба
Регистрация: 01.01.2008
Сообщений: 1,405
|
Цитата:
Я вам могу посоветовать следующий порядок действий: 1. Скачиваете из интернета, или находите где-нибудь книгу Пирогова В.Ю. "Ассемблер для Windows". скачать можно например здесь: http://www.cyberinfo.ru/index.php?newsid=14722 2. Читаете оттуда главу 6 части 2 (метки, вызов процедур) 3. Читаете оттуда главу 2 части 2 (консольные приложения), после этого должно стать понятно в общих чертах, как работать с консолью Win32. 4. Затем берёте текст этой программы и построчно её разбираете, делая соответствующие пометки на полях. Если не понятна какая то команда, то в этой же книге есть приложение 2 (Справочник по командам и архитектуре Pentium). Если после этого что-то ну совершенно не понятно, то можно конкретные вопросы уже задавать на форуме. На всё на это у вас уйдёт часа три-четыре. Но после этого вы сможете уже поддерживать с преподавателем осмысленный диалог. Зачастую именно от этого и зависит исход экзамена (зачёта).
И чем больше я узнавал людей, тем больше мне нравились компьютеры.
------------------------------------ Страничка с моими программками http://ulex-masm.ru |
|
06.06.2010, 18:40 | #27 | |
Пользователь
Регистрация: 02.06.2010
Сообщений: 32
|
Цитата:
|
|
07.06.2010, 03:58 | #28 |
Участник клуба
Регистрация: 11.01.2010
Сообщений: 1,139
|
Ulex
Повелись на женский ник? Я предупреждал |
07.06.2010, 20:22 | #29 |
Пользователь
Регистрация: 02.06.2010
Сообщений: 32
|
|
07.06.2010, 23:45 | #30 |
Пользователь
Регистрация: 02.06.2010
Сообщений: 32
|
.486 ; тип процессора
.model flat, stdcall ; модель памяти flat(стандарт для windows) stdcall - порядок расположения параметров в стеке option casemapnone include masm32includeuser32.inc ; подключаем файлы с прототипами функций из user32.dll include masm32includekernel32.inc ; и kernel32.dll includelib masm32libuser32.lib ; подключаем соответствующие статические библиотеки includelib masm32libkernel32.lib ; макрозамены STD_INPUT_HANDLE equ -10 STD_OUTPUT_HANDLE equ -11 STD_ERROR_HANDLE equ -12 ; определяем данные .data data_string1 db 2000 dup () data_string2 db 2000 dup () len_str1 dd len_str2 dd data_stringC db 2000 dup () data_stringChet db 2000 dup () handle_output dd handle_input dd G_temp dd I_temp dd .data text_inp1 db 'Ввести строку S1',00Dh,00Ah,000h text_inp2 db 'Ввести строку S2',00Dh,00Ah,000h out_text db 'Press Enter to exit',00Dh,00Ah,000h End_str db 00Dh,00Ah,000h .code ;----------------------------------------------------------------------------- start ;точка входа invoke GetStdHandle, STD_OUTPUT_HANDLE ; получаем хендл консоли (устройства вывода) mov [handle_output], eax ; сохраняем его invoke GetStdHandle, STD_INPUT_HANDLE ; то же - устройства ввода mov [handle_input], eax invoke WriteConsoleA, [handle_output], offset [text_inp1], (SIZEOF text_inp1)-1, offset [G_temp], 0 ; выводим строку invoke ReadConsoleA, [handle_input], offset [data_string1], 2000, offset [G_temp], 0 ; считываем строку mov ecx, [G_temp] ; кол-во введенных символов sub ecx, 2 ; убираем служебные символы(enter) mov [len_str1], ecx ; сохраняем реальное кол-во введенных символов lea esi, [data_string1] ; адрес введенной строки add esi, ecx ; + кол-во символов mov byte ptr [esi], 0 ; в конец строки запишем нуль терминатор invoke WriteConsoleA, [handle_output], offset [text_inp2], (SIZEOF text_inp2)-1, offset [G_temp], 0 ; выводим строку обратно на экран invoke ReadConsoleA, [handle_input], offset [data_string2], 2000, offset [G_temp], 0; mov ecx, [G_temp]; sub ecx, 2; mov [len_str2], ecx; lea esi, [data_string2]; add esi, ecx; mov byte ptr [esi], 0; ; без комментариев - описаны выше аналогичные действия lea esi, [data_string1] ; загрузить первую строку в esi lea edi, [data_stringC] ; вторую в edi mov ecx, [len_str1] ; длина первой строки add esi, ecx ; перейдем в конец первой троки dec esi ; указатель - на последний символ next_fieldC ; запускаем цикл cmp ecx, 0 ; дошли до начала строки je end_fieldC ; да - выйти из цикла mov al, byte ptr [esi] ; загрузим символ с конца строки mov byte ptr [edi], al ; запишем во вторую строку dec esi ; в первой строке - указатель уменьшим inc edi ; во второй увеличим dec ecx ; и декрементируем счетчик jmp next_fieldC ; циклим end_fieldC mov byte ptr [edi], 0 ; запишем в конец строки нуль ;все - я устал( короче - тут в цикле переписываются символы через один (только четные). в конце все выводится на экранпервая строка,вторая, первая строка задом наперед, через один символ и выходим lea esi, [data_string1] lea edi, [data_stringChet] mov ecx, [len_str1] inc esi dec ecx next_fieldChet cmp ecx, 0 jle end_fieldChet mov al, byte ptr [esi] mov byte ptr [edi], al add esi, 2 inc edi sub ecx, 2 jmp next_fieldChet end_fieldChet mov byte ptr [edi], 0 invoke WriteConsoleA, [handle_output], offset [End_str], 2, offset [G_temp], 0 invoke lstrlen, addr [data_string1] inc eax invoke WriteConsoleA, [handle_output], offset [data_string1], eax, offset [G_temp], 0 invoke WriteConsoleA, [handle_output], offset [End_str], 2, offset [G_temp], 0 invoke lstrlen, addr [data_string2] inc eax invoke WriteConsoleA, [handle_output], offset [data_string2], eax, offset [G_temp], 0 invoke WriteConsoleA, [handle_output], offset [End_str], 2, offset [G_temp], 0 invoke lstrlen, addr [data_stringC] inc eax invoke WriteConsoleA, [handle_output], offset [data_stringC], [len_str1], offset [G_temp], 0 invoke WriteConsoleA, [handle_output], offset [End_str], 2, offset [G_temp], 0 invoke lstrlen, addr [data_stringChet] inc eax invoke WriteConsoleA, [handle_output], offset [data_stringChet], eax, offset [G_temp], 0 invoke WriteConsoleA, [handle_output], offset [End_str], 2, offset [G_temp], 0 exit_proga invoke WriteConsoleA, [handle_output], offset [out_text], (SIZEOF out_text)-1, offset [G_temp], 0 invoke ReadConsoleA, [handle_input], offset [I_temp], 1, offset [G_temp], 0 invoke ExitProcess, 0 end start |
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Вывести строку на экран | Dasharnb777 | Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM | 6 | 13.02.2010 18:59 |
Помогите вывести строку на экран в обратном порядке(TASM .small) | depocomp | Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM | 13 | 21.05.2009 11:22 |
Ввести строку, вывести на экран символы, повторяющиеся в строке более 2 раз. | bibl2008 | Помощь студентам | 4 | 01.03.2009 13:30 |
Пример программы на С++ | igroman | Общие вопросы C/C++ | 8 | 30.09.2008 11:24 |