Здравствуйте, товарищи. Я пишу МФЦ-программы на С++ и прочую офисную лабуду. Но вот пришлось столкнутся с системным программироваием. Стали возникать вопросы. Мое знание ассемблера ограничивается прочтением нескольких глав из учебника. Вот например я хочу чтобы у меня динамик запиликал. Я пишу драйвер (я работаю под виндой) и пытаюсь сделать следующее Код (Text): volatile char *beeper = (void *)0x00000061; *beeper = 1000; Естесственно BSoD. Я хочу обратится к портам ввода/вывода. А узнаю я их так: My Computer->Properties->Hardware->Device Manager->System Devices->System Speaker->Properties->Resources. И вот там будет I/O Range = 0061-0061. Вот это проты железяки? И как мне обратится к ним? А еще у меня есть старая паскалевская прога которая напрямую обращается к памяти, но использует сегмент+смещение. Как это можно преобразовать в "линейный" вид? И смогу ли я из драйвера обратится к физическому адресу? Можете еще посоветовать почитать что-либо?
facelift Мда.. во первых Код (Text): __asm int 3 Во вторых: http://www.wasm.ru/forum/viewtopic.php?id=29640 Медитируем каждую букву до просветления. Как все пункты выполнишь - тогда сюда пиши.
GoldFinch А посмотреть ? Вообще то однобайтовая. Ладн в общем скомпилил чтоб небыло разногласий: Код (Text): ; 22 : __asm int 3; 0003b cc int 3 Как видим CC Ч.Т.Д.
facelift Конечно бсод, тыже не в порты пишешь, а в память, которая зарезервирована специально чтобы подобный код ловить )) К портам обращаются инструкциями in, out и тп.
И "__asm int 3" в драйвере конечно же будет давать BSOD если не установлен kernel-mode отладчик. А ты хотел чтоб что случилось? Однобайтовую, но какая разница? Двухбайтовая будет работать точно так же.
cppasm не совсем, винда очень криво реагирует на CD 03. Можешь проверить хотя бы в юзермоде READ_PORT_UCHAR WRITE_PORT_UCHAR или как уже сказали in/out а зачем тебе бряк? если хочешь его поймать то либо ставь отладчик либо ставь _try/_except
А в чём кривизна? Olly по крайней мере нормально отрабатывает, за исключением того что останавливается на следующей команде. А она на DebugAPI основана вроди.