пишу программу вот по этой статье http://wasm.ru/article.php?article=ia32int сначала написал без загрузки с диска(все в пределах одного сектора) в секции защишенного режима реализована функция, печатающая строку по такому то адресу-все работает как надо. теперь в реальном режи начинаю догружать сектора в память(код привиден в статье),перехожу в pm и вызываю ту функцию-реакции никакой,если код функции вставить пеед зацикливанием-все работает таким образом,в пм не вызывается функции(хотя обработчики прерываний в том же сегменте нормально рабают) зы к статье прикреплен исходник-попробавал вызывать там свою функцию-результат такой же. есть мнение что компилятор неправльно вычисляет адреса переходов,но почему тогда работают прерывания?
Исходник будет или пора запасаться кофейной гущей? ) И скажи на чём тестишь (реальный комп, если виртуалка, то какая)
0) Try to call this "print" function after segement registers initialization, at least after line 133 (mov es,ax); 1) Write some tiny subprogram - beep - based on direct access to PC speaker (ports 0x60/61h) to implement some "checkpoints" - such subprogram doesn't depend on current CPU mode/etc.
причина была найдена-надо было указать виртуалке грузиться с флоповода, а не имеджа но теперь другая проблема-если под VB оно работает, то на самом железе стартовать отказывается(при заргрузке обращение к дискете есть, но такое ощушение, что биос не считывает бут сектор) на всякий случай прикрепил инфо по процу и биосу компилирую так:yasm -m x86 -fbin memtest.asm(под виртуалкой работает)
Недочетов в коде много, но BIOS на реальном железе скорее всего отказывается грузить бутсектор из-за того, что ты неправильно прописал загрузочную сигнатуру. Правильный порядок: 0x55, 0xAA.