В итоге под виндой все это дело выкидывает после запуска коммандную строку и я ничего не могу сделать. Под ДОСом ошибка EMM386. Так вот что я неправильно сделал?
По теме: пошто про флаги забыл? pushf/popf стек не резиновый. Причем, ты пользуешься _чужим_ стеком. Не хорошо. Если делается много действий - сделай свой стек для себя. Код COM конечно? .... тогда надо отдать лишнюю память OS. При запуске COM файла OS дает ему всю память поле его конца. Если память не отдать - DOS память просто кончится.
Код:
; move stack to end mov sp,offset end_prog ; resize size prog mov ax,cs mov es,ax mov ds,ax mov bx,(end_prog-start+10fh+64)/16 mov ah,4ah int 21h
Последний раз редактировалось serj 03.06.2004 15:42, всего редактировалось 1 раз.
А зачем это делать? Насколько я понимаю, это попытка (похоже неудачная) вернуть старый обработчик на место.
Вот работающий код:
Цитата:
org 256 main proc jmp init sym1 dw 421Eh sym2 dw 24E1h count db 0 new_1ch proc ; кривой обработчик. Что-то выводит на экран push AX push ES inc CS:count test byte ptr CS:count, 03h jnz exit mov AX, 0B800h mov ES,AX mov AX, CS:sym1 xchg AX, CS:sym2 mov CS:sym1, AX mov ES:3998,AX exit: pop ES pop AX iret new_1ch endp main endp init proc mov AX, 251Ch ; Заполним вектор mov DX, offset new_1ch ; смещение нашего обработчика int 21h mov AX, 3100h ; Завершить прогу и оставить в памяти mov DX, (init-main+10Fh)/16 ; размер резидентной части int 21h init endp text ends end main
_________________ {:€ дед в законе :-) нородный окодемег почетный пользователь OpenSuSE 11.3 Ремонт и модернизация ноутбуков IBM (Lenovo) ThinkPad
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения