Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

Ассемблер? Это просто! Учимся программировать


РАССЫЛКИ ПОРТАЛА RUSFAQ.RU

/ КОМПЬЮТЕРЫ И ПО / Языки программирования / Assembler (Ассемблер)

Выпуск № 556
от 26.09.2006, 22:35

Администратор:Калашников О.А.
В рассылке:Подписчиков: 351, Экспертов: 32
В номере:Вопросов: 2, Ответов: 5


Вопрос № 56284: Здравствуйте. Написал программу, которая копирует 40 байт из файла fff в файл ddd. В итоге эти 40 байт копируются, но выскакивает критическая ошибка. Не подскажете из-за чего ? ...
Вопрос № 56285: Здравствуйте. Не подскажете как правильно пользоваться штукой invoke . У меня постоянно выскакивают ошибки. Может потому что я использую Assembler Constructor ?...

Вопрос № 56.284
Здравствуйте. Написал программу, которая копирует 40 байт из файла fff в файл ddd. В итоге эти 40 байт копируются, но выскакивает критическая ошибка. Не подскажете из-за чего ?

Приложение:

Отправлен: 21.09.2006, 22:32
Вопрос задал: Whiteman (статус: Посетитель)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 2)

Отвечает: ADSota
Здравствуйте, Whiteman!

А чему равен регистр ES при запуске? При запуске ES=CS и ты читаешь файл в область PSP, а там по смещению 0Ah [ES:0a] находиться адрес, по которому передается управление после завершения программы... И вообще после 22 байта там 18 байт недокументированной досовской информации, которая затирается... Просто нужно подобрать другой буфер для данных...
---------
Открыть глаза навстречу солнцу
Ответ отправил: ADSota (статус: Специалист)
Ответ отправлен: 22.09.2006, 09:21

Отвечает: ENS
Здравствуйте, Whiteman!
Нужно конкретно указывать для каких целей ты открываешь файл.
XOR AL,AL ; чтение
MOV AL,01; запись
MOV AL,02 ; все вместе
А вообще советую проверять на ошибки (после прерывания вставь обработку ошибки jc).
Надеюсь я тебе помог.
Ответ отправил: ENS (статус: 2-ой класс)
Ответ отправлен: 22.09.2006, 16:11


Вопрос № 56.285
Здравствуйте. Не подскажете как правильно пользоваться штукой invoke . У меня постоянно выскакивают ошибки. Может потому что я использую Assembler Constructor ?
Отправлен: 21.09.2006, 22:34
Вопрос задал: Whiteman (статус: Посетитель)
Всего ответов: 3
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Pinkbyte
Здравствуйте, Whiteman!
По мне лучше не пользоваться специальными редакторами - круче фара для миня ничего нет, хотя это дело вкуса. Для правильного использования invoke нужно сначала обьявить прототип... То есть если имеете скажем API ExitProcess, то нужно сделать следующее(ExitProcess имеет 1 параметр типа DWORD - код выхода процесса)

ExitProcess PROTO :DWORD

А затем в теле программы использовать invoke так:

invoke ExitProcess,0 ; к примеру...

Однако для стандартных API существуют инклуд файлы, т. что если вам нужно подключить прототипы ф-ций библиотеки kernel32.dll используйте строчку вида

include путь_к_masm32includekernel32.inc

Вот и ВСЕ!
---------
Нейтральность - высшее достижение сознания
Ответ отправил: Pinkbyte (статус: 1-ый класс)
Ответ отправлен: 22.09.2006, 00:59

Отвечает: Jekyll
Здравствуйте, Whiteman!

Invoke'ом пользоватся очень легко. Можете представить invoke, как аналог инструкции call, разница в том, что invoke - это макрос, и ему можно передавать параметры, а можно и не передавать :))

Пример:

Функция Sleep:

void Sleep(
DWORD dwMilliseconds
);

можно вызвать как:
push 10000
call Sleep
так и :
invoke Sleep,1000
или так :)
push 1000
invoke Sleep

ps. если вы бы написали ошибки, которые у вас появляются, то ответ был бы более полон

Ответ отправил: Jekyll (статус: 1-ый класс)
Ответ отправлен: 22.09.2006, 13:17

Отвечает: ENS
Здравствуйте, Whiteman!
Не знаю от чего там у тебя ошибки. Но invoke пользуются так:
invoke SomeFunc,third,second,first
SomeFunc название функции или процедуры, параметр third кладется в стек последним, а first первым. Глянь эквивалент:
Push first
Push second
Push third
Call SomeFunc.
Надеюсь я тебе помог.
Ответ отправил: ENS (статус: 2-ой класс)
Ответ отправлен: 22.09.2006, 16:12


Отправить вопрос экспертам этой рассылки

Приложение (если необходимо):

* Код программы, выдержки из закона и т.п. дополнение к вопросу.
Эта информация будет отображена в аналогичном окне как есть.

Обратите внимание!
Вопрос будет отправлен всем экспертам данной рассылки!

Для того, чтобы отправить вопрос выбранным экспертам этой рассылки или
экспертам другой рассылки портала RusFAQ.ru, зайдите непосредственно на RusFAQ.ru.


Форма НЕ работает в почтовых программах The BAT! и MS Outlook (кроме версии 2003+)!
Чтобы отправить вопрос, откройте это письмо в браузере или зайдите на сайт RusFAQ.ru.


© 2001-2006, Портал RusFAQ.ru, Россия, Москва.
Идея, дизайн, программирование: Калашников О.А.
Email: adm@rusfaq.ru, Тел.: +7 (926) 535-23-31
Авторские права | Реклама на портале
Версия системы: 4.36 от 06.09.2006
Яндекс Rambler's Top100

В избранное