Вопрос № 86315: Здравствуйте. Я снова со своей задачей по обработке заданного файла. Один из экспертов посоветовал мне использовать код с циклом по копированию введенной строки, а потом подавать на вход прерыванию 3d скопированную строку. Этот код работает. Но я реш...Вопрос № 86424: я начинаю изучать ассемблер, но не знаю с чего начать, какую книгу читать, это первый мой язык программирования и ещё я не знаю в какой среде писать ассемблеровские
программы....Вопрос № 86462: Здравствуйте!
проблема с кодом асма. не компилируется, в чем дело - непонятно. Данная программа предназначена для шифрования файлов методом исключающего «или». Принцип работы программы прост. Содержимое исходного файла (crypt.txt) кодируется с по...
Вопрос № 86.315
Здравствуйте. Я снова со своей задачей по обработке заданного файла. Один из экспертов посоветовал мне использовать код с циклом по копированию введенной строки, а потом подавать на вход прерыванию 3d скопированную строку. Этот код работает. Но я решил слегка оптимизировать этот код (цикл в листинге закомментирован) и подавать на вход прерыванию 3d введенную строку (без копирования), начиная с 3-го байта. 0 в конце строки уже есть к тому времени.
Модифицированная таким образом программа работает следующим образом: появляется досовское окошко и с бешеной скоростью начинает выводиться фраза "file open error", через строку, многократно и до бесконечности, пока не закроешь. Через строку наверное потому что там стоит
mov ah,9
lea dx,ent
int 21h
Цикл vvod_file выполняется бесконечно, ввести строку программа не дает. То есть прерывание
mov ah,0ah
lea dx,data
int 21h
вообще на самом деле не ждет чтобы я там что-то ввел. Вместо этого программа просто продолжает работу дальше. Естественно, что функция по открытию файла не выполняется. А как такое может быть чтобы пр-е 0ah не дожидалось ввода строки?
Если же исследовать файл в отладчике, то он на прерывании 0ah также не предлагает ввести строку, а продолжает работу дальше.
Если после этого прерывания стоит цикл, то все работает нормально, строку можно ввести. Еще не понятно - КАК ПОСЛЕДУЮЩИЙ КОД МОЖЕТ ВЛИЯТЬ НА ВЫПОЛНЕНИЕ ПРЕДЫДУЩЕГО КОДА? Прерывание же выполняется по-разному в зав. от цикла.
Ну и самое интересное, что эта программа сразу после компиляции работала нормально, и только после перезагрузки компьютера перестала работать. С чего вдруг она так изменила поведение после перезагрузки, что я не учел? И как ее вернуть к нормальной работе?
Приложение:
Отправлен: 10.05.2007, 19:35
Вопрос задал: Blackie (статус: Посетитель)
Всего ответов: 1 Мини-форум вопроса >>> (сообщений: 1)
Отвечает: Sov
Здравствуйте, Blackie!
Действительно можно сделать проще, так, как предложили вы)
Мне кажется что ошибка в том что вы неправильно оформляете массив data
Функция 0ah требует чтобы вы указали максимальную длину строки и выделили под нее соотв. кол-во памяти
например
data db 53,60 dup(0);длина строки не более 53 символов
;и ноль в конец добавлять не придется)
Ответ отправил: Sov (статус: 2-ой класс)
Ответ отправлен: 10.05.2007, 21:18 Оценка за ответ: 5 Комментарий оценки: Теперь работает, спасибо.
Вопрос № 86.424
я начинаю изучать ассемблер, но не знаю с чего начать, какую книгу читать, это первый мой язык программирования и ещё я не знаю в какой среде писать ассемблеровские программы.
Отвечает: Зенченко Константин Николаевич
Здравствуйте, Gvarishvili George Raulievich!
Книги по ассемблеру Вы можете скачать тут. Есть книги Абеля, Зубкова, Юрова, Калашникова, Жордайна, Рихтера.
Программы на ассемблере пишут в любом простом редакторе типа блокнота, но Вам для начала нужен редактор с подсветкой синтаксиса к примеру: gridinsoft notepad.
Еще Вам понадобится компилятор:
-Тут, тут и тут Вы можете найти МАСМ.
-Тут Вы можете найти ТАСМ.
Удачи!
--------- И только наступив на грабли мы преобретаем драгоценный опыт!
Отвечает: Волков Павел Юрьевич
Здравствуйте, Gvarishvili George Raulievich!
Книжку лучше взять в бумажном виде, у Юрова (учебник, справочник и практическое руководство) очень хорошее описание языка, в справочнике - подробное описание инструкций процессора.
Из компиляторов посоветую FASM(flat assembler), домашняя страница - http://flatassembler.net.
Приемущества:
-компактен (пакет для Windows менее мегабайта);
-в составе пакета есть среда разработки (текстовый редактор, без подсветки, из которого проводится компиляция);
-есть версии как для Windows, так и для DOS,GNU/Linux,*BSD;
-позволяет творить чудеса %)
"Недостатки":
-большинство примеров в книгах приводятся для TASM,MASM (перевод текста для сборки в FASM вызывает трудности только в начале обучения);
-большинство примеров на форуме проекта (http://board.flatassembler.net/);
-мало документации на русском.
За русской документацией, примерами обратитесь на WASM.RU.
Там есть несколько статей, перевод документации
(http://wasm.ru/docs/6/fasm164manualrus.zip)
, на форуме всегда помогут советом.
--------- Век живи, век учись.
Ответ отправил: Волков Павел Юрьевич (статус: Студент)
Ответ отправлен: 11.05.2007, 17:47
Вопрос № 86.462
Здравствуйте!
проблема с кодом асма. не компилируется, в чем дело - непонятно. Данная программа предназначена для шифрования файлов методом исключающего «или». Принцип работы программы прост. Содержимое исходного файла (crypt.txt) кодируется с помощью ключа, используя операцию исключающего «или» побитно. Под ключом понимается текст, вводимый с клавиатуры непосредственно в программе. Следует отметить, что зашифрованная информация записывается в исходный файл(crypt.txt), изменяя его. Для расшифровки требуется перезапуск программы
с использованием того же ключа. Особенность такова, что не имея ключа расшифровать информацию практически невозможно. После повторного проведения операции получаем изначальный файл. Программа работает на файлах .exe, .txt, .bmp, .jpg и так далее. Среда - виндоус.