2016-12-31 19 views
4

Я разрабатывал простой BIOS reseter, только для обучения. Итак, у меня есть основной файл, это меню, называемое Reseta.com, да, это модель, маленькая без стека. И у меня есть A.com, где код для сброса, поэтому мне нужно выполнить A.com с моей основной программой, Reseta.com, A.com был наложен в Debug DOS, и да, я в Windows 98 , но программа будет работать на MS-DOS. Я пробовал с Interrupt 21, вроде сервиса 4Bh, 3DH, но пока у меня еще нет успеха. Как самый простой способ сделать это? Просто позвоните в файл «A.com», он вернется в DOS с сервисом 0 от прерывания 21. Спасибо, чтобы было легче понять, я искал что-то вроде WinExec(); в WinAPI, но, конечно, в сборке 16 бит для MS-DOS.Как выполнить другой файл в сборке 16 бит

PS: Я использую TASM и TLINK/т для компиляции кода ...

+2

Возможный дубликат [Загрузка программ в оперативную память и их выполнение NASM 16b] (http://stackoverflow.com/questions/10006072/loading-programs-to-ram-and-executing-them-nasm-16b) –

+0

Я не использую NASM, я использую TASM, и этот пример в этой ссылке не работает для меня ... :( – user3587527

+2

Пожалуйста, покажите свой код. – fuz

ответ

2

Вы звук, как вы будете в состоянии сделать это самостоятельно, так что я просто дам вам советы.

A .com не намного больше, чем байт-код. Вы можете просто загрузить файл в ОЗУ и затем перейти к нему. Убедитесь, что код начинается с 4-байтовой границы.

В качестве альтернативы, если требуется мягкая перезагрузка, вы можете просто вызвать int 19h в своей программе, которая переходит к загрузчику и повторно загружает DOS.

(. Кроме того, здесь Ralf Brown's Interrupt List Это настоящий классический Это может пригодиться в какой-то момент Имейте в виду:... Это гигантский)