Вопрос № 57394: Здравствуйте.. обьясните пожалуйсто в чем тут дело?
Есть такая программа:
----------------------------------------------------------------------------------------
include userv.mac
data segment
x dw 10 dup(?)
s ...Вопрос № 57435: при попытке вызвать int 21h из под VC6++ под WinXP.
При помощи конструкции: __asm {.... int 21h ...};
Программа валится с сообщением Access voliation.
Сделал дебаг, программа входит в прерывание и через определенный момент на тыкается на...Вопрос № 57472: Уважаемые эксперты. опять хочу прибегнуть к Ващей помощи, пусть имеется код на паскале
......
write('VVedite X:');
readln(x);
write('VVELI X=',x);
.......
Пожалуйсто перебейте под Asm, т.е. хочу понять как правильно польз...
Вопрос № 57.394
Здравствуйте.. обьясните пожалуйсто в чем тут дело?
Есть такая программа:
Сама программа компилируется, но почемуто при создании *.EXE возникает ошибка:
----------------------------------------------------------------------------------------
LINK : fatal error L1127: far segment references not allowed with /TINY
Отправлен: 02.10.2006, 02:34
Вопрос задал: Глеб (статус: Посетитель)
Всего ответов: 4 Мини-форум вопроса >>> (сообщений: 2)
Отвечает: ADSota
Здравствуйте, Глеб!
Модель памяти TINY предпологает что все данные и код находяться в одном сегменте. Поменяй модель памяти ключами в файле userv.mac или сгруппируй их (DGROUP) или сам перенеси все в один сегмент.
--------- Открыть глаза навстречу солнцу
Ответ отправил: ADSota (статус: Специалист)
Ответ отправлен: 02.10.2006, 09:27
Отвечает: Волков Павел Юрьевич
Здравствуйте, Глеб!
Размер кода не велик, можно все разместить в одном сегменте (*.com файл, модель - TINY)
----------------/Результат зависит от userv.mac/----------------------------------
include userv.mac
code ends
end start
----------------//----------------------------------
Тогда ключи менять не надо.
--------- Век живи, век учись.
Ответ отправил: Волков Павел Юрьевич (статус: 8-ой класс)
Ответ отправлен: 02.10.2006, 15:21
Отвечает: Fluxx
Здравствуйте, Глеб!
Скорее всего ошибка происходит мз-за того, что вы запускаете ml.exe с параметром /AT. Компилятор пытается создать .COM файл, а это невозможно при наличии нескольких сегментов. Попробуйте запускать ml.exe без параметров.
Ответ отправил: Fluxx (статус: 1-ый класс)
Ответ отправлен: 02.10.2006, 15:31
Отвечает: ENS
Здравствуйте, Глеб!
Когда не ставят модель подразумевается TINY т.е. данные, код в одном сегменте.А у Вас все в разных - это small.
Ставьте диррективу .model small .
С уважением, ENS.
--------- Учение - свет!
Ответ отправил: ENS (статус: 5-ый класс)
Ответ отправлен: 02.10.2006, 20:01
Вопрос № 57.435
при попытке вызвать int 21h из под VC6++ под WinXP.
При помощи конструкции: __asm {.... int 21h ...};
Программа валится с сообщением Access voliation.
Сделал дебаг, программа входит в прерывание и через определенный момент на тыкается на некую ассемблерную комманду "sysent"
при выполнении которой и происходит ошибка.
Посмотрел библиотеки у Borland C++ Builder 6 в частности dos.h
Там есть возможность использования intr(21h...), толоко вот работоспособность я непроверял, т.к. биледер неустанавливал. неужели
он Может? И еще есть у него в dos.h возможность обращатся к BDOS и к Int 13h
У VC Dos.h практически пустой, поэтому я также пробовал обратится через __ASM к int 13h и тоже получил ошибку.=(
Вопросы:
1.Как я могу непосредственно работать с секторами диска?
2.Как я могу поличить доступ к функциям int 13h или хотябы int 21h ?
3.Почему ошибка возникает?
4. Дело в том что функции работы с файлами из kernel (_lopen, _ lclose) имеют одинаковую функцилнальность с int 21h, НО
некоторые скрытые возможности в них работают некорректно.
Отправлен: 02.10.2006, 14:18
Вопрос задал: DDMZ (статус: Посетитель)
Всего ответов: 2 Мини-форум вопроса >>> (сообщений: 3)
Отвечает: Fluxx
Здравствуйте, DDMZ!
1. К сожалению, работа непосредственно с секторами дисков невозможна в Windows. Видимо вам придется воспользоваться Borland C++ Builder под DOS-ом для получения желаемого результата.
2. Доступ к прерываниям, равно как и портам ввода вывода запрещен в Windows в целях безопасности. Вся работа с устройствами происходит через API.
3. Оибка возникает из-за того, что к прерываниям невозможно обращаться из защищенного режима, в котором работает Windows.
Ответ отправил: Fluxx (статус: 1-ый класс)
Ответ отправлен: 02.10.2006, 15:31
Отвечает: Jekyll
Здравствуйте, DDMZ!
1) Работать с секторами диска можно через тот же CreateFile, в параметры надо передавать имя диска (что-то вроде \.C) посмотри MSDN
2) Доступ к прерываниям можно получить написав драйвер, который бы разрешал user-level программе их использовать. Поищи на wasm.ru - там есть пример.
3) Если собираешся работать под Windows, то нужно забыть прерывания ДОСа, либо читай пункт 2.
Ответ отправил: Jekyll (статус: 2-ой класс)
Ответ отправлен: 02.10.2006, 17:00
Вопрос № 57.472
Уважаемые эксперты. опять хочу прибегнуть к Ващей помощи, пусть имеется код на паскале
......
write('VVedite X:');
readln(x);
write('VVELI X=',x);
.......
Пожалуйсто перебейте под Asm, т.е. хочу понять как правильно пользоваться операциями ввода/вывода.
ЗЫ прошу прощение за повторение сабжа, просто в вопросе ниже не очень был понятен ответ.
ЗЫЗЫ и еще просьба прокоментировать написанное...
Огромное спасибо.
Отправлен: 02.10.2006, 19:53
Вопрос задал: Глеб (статус: Посетитель)
Всего ответов: 1 Мини-форум вопроса >>> (сообщений: 3)
Отвечает: ENS
Здравствуйте, Глеб!Так вот этот
кусок кода на на асме выглядит как в приложении. Советую сначало разобраться. Если ты хуть немного знаком с языком то для тебя НО ПРОБЛЕМ разобраться
С уважением,ENS.
Приложение:
--------- Учение - свет!
Ответ отправил: ENS (статус: 5-ый класс)
Ответ отправлен: 03.10.2006, 19:41