Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: резидент под DOS  (Прочитано 8541 раз)
0 Пользователей и 4 Гостей смотрят эту тему.
KorDen
Гость
« : 22-05-2004 10:03 » new

Помогите, пожалуйста... Я уже два часа ничего не могу поделать с линкером: я пишу резидент для реального режима, вроде бы ничего нет в нем сложного, клавиатуру перехватывает... Писал я его под .COM, тасм не выдает ни одной ошибки, а вот tlink пишет, что невозможно создать COM файл, т. к. data below initial CS:IP defined.
Что это такое и в чем ошибка?
Записан
Xeysan
Гость
« Ответ #1 : 22-05-2004 22:58 » 

org 100h есть?
Если не поможет, приведи шапку исходника...
Записан
KorDen
Гость
« Ответ #2 : 23-05-2004 10:09 » 

.286
code segment
  assume cs:code, ds:code
  org 100h
res proc
  call start
alt_q equ 1000h
OldInt9 dd 0
mes db '<alt>+q exit'
meslen equ $-mes
boarders db 0,0,179,180,191,192,193,194,195,196,197,217,218
NewInt9:
  cli
  pushf
  call cs:OldInt9
  pusha
  mov ax, cs
  mov ds, ax
  mov ax, 40h
  mov es, ax
  mov bx, es:1ah
  mov ax, es:[bx]
  cmp ax, alt_q
  je cont
  cmp ah, 2
  jb home
  cmp ah, 12
  ja home
  test byte ptr es:17h, 40h
  jz home
  push bx
  lea bx, boarders
  xchg ah,al
  xlat
  pop bx
  mov byte ptr es:[bx], al
home:
  popa
  sti
  iret
cont:
  mov ax, ds
  mov es, ax
  mov ah, 13h
  mov al, 1
  mov bx, 0020h
  mov cx, meslen
  mov dh, 16
  mov dl, 22
  mov bp, offset mes
  int 10h
  mov ax, 0
  mov es, ax
  mov ax, word ptr OldInt9
  mov word ptr es:24h, ax
  mov ax, word ptr OldInt9+2
  mov word ptr es:26h, ax
  jmp home
res endp
endprog equ $-res
start proc
  mov ah, 35h
  mov al, 09h
  int 21h
  mov word ptr OldInt9, bx
  mov word ptr OldInt9+2, es
  mov ah, 25h
  mov al, 09h
  mov dx, offset NewInt9
  int 21h
  mov ax, 3100h
  mov dx, (endprog+10Fh)/16
  int 21h
start endp
code ends
end start

может еще логические ошибочки подскажите?
Записан
Xeysan
Гость
« Ответ #3 : 23-05-2004 17:19 » 

Чтобы построить резидент исправь end start на end res, только все равно тебе это не поможет, программа - это сплошная мешанина кода и данных, даже инструкций ret нет ни одной.
Записан
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #4 : 24-05-2004 09:26 » 

Код:

.model tiny
org 100h

start{
    ....
end start

В com-файлах отсутствует информация о точке запуска - запускается с самого начала.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines