| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Общие вопросы > C/C++ и ASM |
| Автор: cardinal 13.3.2004, 15:47 |
| Всем привет! У меня вот такая проблемка появилась: Я не знаю как прочитать серийный номер диска (например 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. Всем спасибо! |
| Автор: shedon 14.3.2004, 00:19 |
| этот код не сработает т.к. винда не даёт пользовательским программам прямой доступ к прерыванием, такое право имеют, только проги режима ядра(читай драйверы). можно использовать WinIO, а чем не нравятся прерывания или апи функции ? Я конечно в асме не силён, но вот не понятно что это такое mov edx, BUFFER. Почему ты тут используешь 32разрядный регистр ? И как я понимаю, в регистр dx должна сливаться сер/ном. диска ? Тогда почему ты копируешь некое содержимое BUFFER(который, не чего не содержит) в edx ? |
| Автор: cardinal 14.3.2004, 00:35 | ||||
Ой, не хочу
Да нравится мне все, только вот нужно примерчик мне написать чисто на asm. Хотя когда ты вот это написал мне стукнуло в голову взять туже API или что-нибудь такое, короче прочитать как угодно серийный номер диска, а потом сделать листинг и посмотреть, что там написано Если есть какие мысли пишите, может я и сам чего придумаю за это время. Как что напишу. |
| Автор: cardinal 14.3.2004, 00:40 | ||
Блин, ты хоть это... пиши что редактируешь (пока я ответ пишу) Так вот в этом случае BUFFER - это указатель. Указатель 32разрядный и поэтому он идет в edx. Серийный номер диска и всякая инфа должна сливаться не в dx (edx), а по адресу, который прописан в edx. p.s. написал ответ, смотрю, а ты уже сообщение отредактировал |
| Автор: shedon 14.3.2004, 12:34 |
| А разве на асме нельзя вызывать апи функции ? |