Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> C/C++ и ASM, про проблемы с int 21 в Windows 98 
:(
    Опции темы
cardinal
Дата 13.3.2004, 15:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Инженер
****


Профиль
Группа: Экс. модератор
Сообщений: 6003
Регистрация: 26.3.2002
Где: Германия

Репутация: 2
Всего: 99



Всем привет!
У меня вот такая проблемка появилась:
Я не знаю как прочитать серийный номер диска (например C:\). Дело в том, что все что я нашел работает либо через всякие API, либо через прерывание int 21, а мне надо чисто на аsм`e. Почему я пишу сюда, а не в раздел asm? Потому, что код должен работать в Visual С++, то есть как вставка (см. снизу). Я нашел вот такой пример (ну то есть примерно такой, я на нем хочу показать, что я хочу):

unsigned char *BUFFER;
BUFFER = new unsigned char[24];
_asm
{
mov ah, 0x69
mov al, 0 // This is where you 1 set serial, 0 to get serial number
mov bl, 3 // drive number 0 = default, 1 = A, 2 = B , 3 = C
mov edx, BUFFER
int 21
}

Не исключаю, что в нем есть ошибочки - проверить я не смог. Так вот он содержит прерывание, а мне надо без и без всяких функций. Посдкажите что-нибудь полезное, а то что-то я все облазил, а ничего дельного не нашел. Еще раз подчеркиваю без прерываний (так как они в Visual С++ не проходят) и без функций по типа GetVolumeInformation.
Всем спасибо!


--------------------
Немецкая оппозиция потребовала упростить натурализацию иммигрантов
В моем блоге: Разные истории из жизни в Германии

"Познание бесконечности требует бесконечного времени, а потому работай не работай - все едино".  А. и Б. Стругацкие
PM   Вверх
shedon
Дата 14.3.2004, 00:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Экс. модератор
Сообщений: 1209
Регистрация: 17.1.2003
Где: Нижнiй Новгородъ

Репутация: 4
Всего: 11



этот код не сработает т.к. винда не даёт пользовательским программам прямой доступ к прерыванием, такое право имеют, только проги режима ядра(читай драйверы). можно использовать WinIO, а чем не нравятся прерывания или апи функции ?
Я конечно в асме не силён, но вот не понятно что это такое mov edx, BUFFER. Почему ты тут используешь 32разрядный регистр ? И как я понимаю, в регистр dx должна сливаться сер/ном. диска ? Тогда почему ты копируешь некое содержимое BUFFER(который, не чего не содержит) в edx ?


--------------------
Programming is like sex: One mistake and you have to support it your lifetime
PM MAIL WWW ICQ   Вверх
cardinal
Дата 14.3.2004, 00:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Инженер
****


Профиль
Группа: Экс. модератор
Сообщений: 6003
Регистрация: 26.3.2002
Где: Германия

Репутация: 2
Всего: 99



Цитата
читай драйверы

Ой, не хочу smile.gif Столько о них понаслышал (сложного)...
Цитата
можно использовать WinIO, а чем не нравятся прерывания или апи функции ?

Да нравится мне все, только вот нужно примерчик мне написать чисто на asm. Хотя когда ты вот это написал мне стукнуло в голову взять туже API или что-нибудь такое, короче прочитать как угодно серийный номер диска, а потом сделать листинг и посмотреть, что там написано rolleyes.gif
Если есть какие мысли пишите, может я и сам чего придумаю за это время. Как что напишу.


--------------------
Немецкая оппозиция потребовала упростить натурализацию иммигрантов
В моем блоге: Разные истории из жизни в Германии

"Познание бесконечности требует бесконечного времени, а потому работай не работай - все едино".  А. и Б. Стругацкие
PM   Вверх
cardinal
Дата 14.3.2004, 00:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Инженер
****


Профиль
Группа: Экс. модератор
Сообщений: 6003
Регистрация: 26.3.2002
Где: Германия

Репутация: 2
Всего: 99



Цитата
Я конечно в асме не силён, но вот не понятно что это такое mov edx, BUFFER. Почему ты тут используешь 32разрядный регистр ? И как я понимаю, в регистр dx должна сливаться сер/ном. диска ? Тогда почему ты копируешь некое содержимое BUFFER(который, не чего не содержит) в edx ?

Блин, ты хоть это... пиши что редактируешь (пока я ответ пишу) smile.gif
Так вот в этом случае BUFFER - это указатель. Указатель 32разрядный и поэтому он идет в edx. Серийный номер диска и всякая инфа должна сливаться не в dx (edx), а по адресу, который прописан в edx.
p.s. написал ответ, смотрю, а ты уже сообщение отредактировал hehe.gif


--------------------
Немецкая оппозиция потребовала упростить натурализацию иммигрантов
В моем блоге: Разные истории из жизни в Германии

"Познание бесконечности требует бесконечного времени, а потому работай не работай - все едино".  А. и Б. Стругацкие
PM   Вверх
shedon
Дата 14.3.2004, 12:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Экс. модератор
Сообщений: 1209
Регистрация: 17.1.2003
Где: Нижнiй Новгородъ

Репутация: 4
Всего: 11



А разве на асме нельзя вызывать апи функции ?


--------------------
Programming is like sex: One mistake and you have to support it your lifetime
PM MAIL WWW ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0446 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.