So teilen Sie GCC mit, 16-Bit-Code für den Real-Modus zu generieren

8

Ich schreibe Real-Mode-Funktion, die normale Funktion mit Stackframes und so sein sollte, aber es sollte% sp anstelle von% esp verwenden. Gibt es einen Weg, es zu tun?

    
user2443423 27.09.2013, 16:22
quelle

3 Antworten

6

GCC 5.2.0 (und mögliche frühere Versionen) unterstützen 16-Bit-Codegenerierung mit dem -m16 -Flag. Der Code wird jedoch mit hoher Wahrscheinlichkeit auf 32-Bit-Prozessor-Features (z. B. 32-Bit-breite Register) angewiesen. Daher sollten Sie die generierte Assembly sorgfältig überprüfen.

Von den man Seiten:

  

Die Option -m16 ist die gleiche wie -m32, abgesehen davon, dass sie die Option   ".code16gcc" Assembly-Direktive am Anfang der Assembly-Ausgabe   damit die Binärdatei im 16-Bit-Modus ausgeführt werden kann.

    
linguamachina 08.10.2015 18:02
quelle
4

Soweit ich weiß, unterstützt GCC keine Code-Generierung für 16-Bit x86. Für Legacy-Bootloader und ähnliche Zwecke sollten Sie einen kleinen Stub in Assemblersprache schreiben, um die CPU in den 32-Bit-Modus zu versetzen und die Ausführung an 32-Bit-Code zu übergeben. Für andere Zwecke sollten Sie wirklich keinen 16-Bit-Code schreiben.

    
R.. 27.09.2013 16:33
quelle
2

GCC erzeugt keinen 8086-Code. Die GNU AS-Direktive .code16gcc kann verwendet werden, um die Ausgabe von GCC in einem 16-Bit-Modus zusammenzustellen. Setzen Sie asm(".code16gcc") am Anfang Ihrer C-Quelle, Ihr Programm ist auf 64 Kbyte begrenzt.

    
Timothy Baldwin 28.09.2013 06:37
quelle

Tags und Links