Вопрос № 27227: Доброе время суток, уважаемые эксперты! Помогите пжальста разобраться с погой. Асмом занялся недавно, понять не могу , почему не работает( см приложение). Прога взята из рассылок Калашникова,
просто я решил вставить небольшую процедурку и теперь...
Вопрос № 27.227
Доброе время суток, уважаемые эксперты! Помогите пжальста разобраться с погой. Асмом занялся недавно, понять не могу , почему не работает( см приложение). Прога взята из рассылок Калашникова,
просто я решил вставить небольшую процедурку и теперь она вылетает на середине, в отладчике смотрел, хз, то же самое, где что накосячил...?
С уважением, Macshm
Приложение:
Отправлен: 04.10.2005, 16:56
Вопрос задал: Macshm (статус: Посетитель)
Всего ответов: 4 Мини-форум вопроса >>> (сообщений: 0)
Отвечает: Лысков Игорь Витальевич
Здравствуйте, Macshm!
Перенеси строчку buffer equ $ перед cseg ends и будет тебе счастье...
Или подпрограммку перед handle...
Ты ж затираешь файлом свою подпрограммку...
Отвечает: Iluha
Здравствуйте, Macshm!
Я, конечно, не эксперт, но идея у меня есть одна.
По-моему ты вставил текст процедуры не в том месте. То есть ты написал код процедуры tt proc после того как определил переменную buffer. А так как ты читаешь из файла по адресу buffer, то у тебя просто-напросто затрется твой код процедуры tt proc!!
Посмотри что у меня получилось ( у меня правда компилятор TASM, поэтому я вставил строчку assume cs:cseg, ds:cseg, ss:cseg
Приложение:
Ответ отправил: Iluha (статус: 1-ый класс)
Отправлен: 04.10.2005, 18:46
Отвечает: FrmAcid
Здравствуйте, Macshm! Если вы решили поэксперементировать с новыми знаниями(Процедурами), то это лудше делать в маленьких программах =), Посмотрите приложение я кое что исправил и поменял местами. Там должно всё быть понятно :)
Приложение:
Ответ отправил: FrmAcid (статус: 1-ый класс)
Отправлен: 05.10.2005, 00:20
Отвечает: Юра Устинов
Здравствуйте, Macshm!
Для ДОС я использую TASM, но разницы вроде не много.
Во-первых:
Когда вы пишете прочитанное из файла в buffer вы затираете процедуру tt
Потому что buffer идёт как метка. Значит, если в файле aa.com вы прочитали не полный код, то результат будет непредсказуем.
{buffer equ $
tt proc
mov ah,10h
int 16h
ret
tt endp }
Если вы писали самомодифицирующийся вирус, значит идёте в правильном направлении, ну а если вы хотели вывести DAAAAA!!!! при правильном считывании
из файла, то измените в вашей программе
{
tt proc
mov ah,10h
int 16h
ret
tt endp
buffer equ $
}
И ещё, int 20h по скорости такое же как и ret, но больше на 1 байт(хотя кому это важно)
--------- Спасём Россию!!!
Ответ отправил: Юра Устинов (статус: 1-ый класс)
Отправлен: 07.10.2005, 09:12