Вопрос по BIOSам Зачем во всех BIOS'ах в начале BOOTBLOCK'а идет переход на подпрограмму из двух строк - XOR AL,AL/RET - а потом проверяется - ноль или не ноль??? В каком-то случае может быть не ноль?
Во-первых, не надо обобщать. BIOSов много, и они все очень разные. Такое может возникнуть, например, из-за того, что есть специальная версия для отладки, и в ней основной код такой же, но некоторые процедуры занимаются логгингом, вопросами всякими к программисту и т.п., а в финальном варианте эти процедуры ничего не делают, возвращают всегда 0 и т.п.
diamond думаю ты прав. скорее всего во время отладки делали ловушку. А потом резанули но не до конца. Думаю в биосе полным полно мусорных мест.
Вряд ли - он проверяет на 0, а потом делится на две ветки - и обе длинные - и обе чего-то делают. Могу файл прикрепить если кому интересно...
Файл http://bookwave.narod.ru/bios.bin Искать так F000:FFF0 --> E05B --> E7A8 --> E7CA --> E067 Там происходит переход на F769, где сбрасывается AL, а потом на адресе E06f стоит JNZ и проверяет, ноль получился или не 0. Если 0 выполняетя подпрограмма EB1A, если нет - не выполняется.
Надо весь биос дизассемблировать. Там может идти запись в эту ячейку. Может быть так первый проход идет выполнение системного кода, всместо хоr стоит jmp короткий. После выполнения кода заместо jmp записывается xor - заглушка. И код небудет выполняться. Почему может выполняться повторно код? К примеру позапросу или по ресету. Т.е надо проинициировать систему только в мамент старта, а при перезагрузки нетрогать. Это только предположения. Просто в биосе нечто похожее уже видел.
Судя по следующиму коду, там идет запись пост кодов тут идет тестирование Shadow Ram. Но вот где идет запись в эту ячейку чето невижу. Залез в исходники там следующии строчки. Код (Text): ;[]==============================================================[] ;Check C0000-EFFFF shadow allowed or not ; Some chipset's shadow is dependent on F0000 shadowing, i.e. ; If F0000 was not shadowed, all other segment of ROM can't be ; shadowed. ;Input : none ;Output: zero set - shadow allow ; zero not set - shdow not allow ;[]==============================================================[] public Ct_Shadow_Alone_Check Ct_Shadow_Alone_Check proc near xor al,al ret Ct_Shadow_Alone_Check endp