| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Asm: Общие вопросы > ошибка - segment-relocatable items |
| Автор: Eternal 3.3.2006, 03:52 |
| Доброго времени суток. проблема кароче такая: пишу программу которая через каждые 30 тиков вызывает заданную процедуру (Dirki) но часть считающяя тики в TSR. Есть кусок кода из учебника, но возникает ошибка cannot generate COM file :segment-relocatable items present ... вот то шо у меня есть: .model tiny .386 .code org 100h Begin: JMP Start ALARMCOUNT DW ? Dirki PROC NEAR ; call FREE_ENV ret Dirki ENDP Start: MOV AX,60 MOV BX,1092 MUL BX MOV AH,0 INT 1AH ADD AX,DX MOV ALARMCOUNT,AX PUSH DS MOV AX,SEG ALARM !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! MOV DS,AX !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! MOV DX,OFFSET ALARM MOV AL,1CH MOV AH,25H INT 21H POP DS ret ;--- резидентная часть ALARM PROC FAR PUSHF PUSH AX PUSH CX PUSH DX PUSH DS PUSH CS POP DS MOV AH,0 INT 1AH MOV CX,ALARMCOUNT CMP DX,CX JNE NOT_YET CALL Dirki NOT_YET: POPF POP DS POP DX POP CX POP AX IRET ALARM ENDP end Begin Строчки с знаками "!" неправильны, внимание вопрос Благодарю за внимание |
| Автор: Chingachguk 7.3.2006, 11:21 | ||
| Ты ссылаешься на имена сегментов, которые у тебя не объявлены. Обычно сегменты используют в программах типа EXE (сегменты кода, данных и т.п.). Судя по твоей директиве ".model tiny" ты хочешь от компиллятора совсем другой модели программы - COM (один сегмент для всего). Почитай про разные модели памяти где-нибудь, например у Зубкова С.В. (есть в сети). Но вообще-то твоя задача (обработчик прерывания и еще что-то несложное) вроде бы не требует сегментов (хотя можно и использовать их). В той части кода, где у тебя "ошибки", требуется указать DOS (int 21h) ПОЛНЫЙ адрес обработчика прерывания 1Ch (user-таймер). Адрес должен быть указан в регистрах DS:DX. В регистре DS находится СЕГМЕНТНЫЙ адрес процедуры обработки прерывания. Поскольку ты используешь (.model tiny) модель памяти COM, то при старте программы такого типа И ТАК сегментные регистры будут заполнены адресом твоего - единственного ! - сегмента: DS=SS=CS=ES= сегментный адрес твоей программы. Поэтому в твоем случае достаточно написать:
|
| Автор: intophy 12.10.2022, 17:09 |
| com 20 E2 AD 90 20The 20Viagra 20 20Viagra 20Krem 20Nedir 20Ne 20Ie 20Yarar the viagra The Libor floors and OIDs are unchanged <a href=https://buylasixon.com/>lasix purpose</a> To date, it has not been possible to develop inhibitors of Ras signaling with existing drug development technologies |
| Автор: smoogue 29.12.2022, 17:29 |
| In one Australian study seventy- two women, aged 18 to 50 years were interviewed and they claimed to be dissatisfed with contraceptive choices including their side effects 3 <a href=http://bestcialis20mg.com/>tadalista vs cialis</a> |