Frage

Ich habe mit Assembler-Sprache gerade begonnen (fühlte sich an wie etwas Neues zu lernen), und haben in einigen Fragen laufen (bisher), dass alle Tutorials Ich habe durch gesucht nicht antworten, oder sind zu alt kennen.

1) Ich habe ein paar Recherchen versucht (vielleicht einfach nicht weiß, dass ich die richtigen Keywords), aber ich kann nicht eine aktualisierte Liste des Grafikmodus zum Ändern Bildschirmauflösungen, etc. Das Beste, was ich gefunden habe finden ist: Assembler Tutorial , und ich würde glaube kaum, dass 640x480 ist die beste Auflösung Assemblersprache verwenden kann. Kennt jemand eine aktualisierte Tutorial kann ich verwenden?

Edit: Interrupt 10h ist alt, und unterstützt nicht ganz mehr als 640x480

2) Ist es möglich, ein Wert aus einer Variablen auf eine andere Variable zu „mov“, ohne sie zuerst in ein Register zu verschieben? Beispiel:

jmp start
  n1     dw 0
  n2     dw 0
  res    dw 0
start:
  mov n1,5
  mov n2,6
  mov res,n1
  add res,n2
...etc...

Edit: Es ist nicht möglich. Sie können nicht aus dem Speicher in den Speicher gehen, ohne Register verwendet wird.

3) Möchten Sie die Frage 1, ist es eine Möglichkeit zu erkennen, welcher Grafikmodus ein Benutzer derzeit verwendet, so dass ich es ändern kann, und es zurück nach ändern? (Ich nehme an, es ist, aber ich bin nicht sicher, wie es zu tun.)

Edit:. Need OS für Grafikeinstellungen abfragen

War es hilfreich?

Lösung

Für Fragen # 1 und # 3, schauen Sie in den VESA BIOS-Erweiterungen . Das war so etwas wie ein Standard für den Umgang mit „Super VGA“ Modi, populär in den 90er Jahren.

Wie bei # 2, in der Regel die Antwort nein ist, können Sie den Speicher nicht MOV-Speicher. Aber es ist nicht ganz richtig: Es gibt MOVS (move string), die ein Byte, Wort bewegt, oder dword von DS: SI ES: DI. Normalerweise wird dieser Befehl in Verbindung mit einem REP-Präfix verwendet, um Speicherblocks zu bewegen. Auch vorausgesetzt, Sie haben einen Stapel einrichten, können Sie Speicher-zu-Speicher verschieben, ohne ein Register clobbering durch Drücken und knallen:

PUSH [mem1]
POP  [mem2]

Andere Tipps

In Bezug auf Ihre erste Frage, Interrupt 10 ist sehr alt, und wahrscheinlich nicht über Auflösungen von 640x480 verwendet. Ein anderer Teil des Software-Stacks wird nun verwendet; das heißt, würden Sie die aktuelle Bildschirmauflösung zu bekommen Windows verhören müssen.

Diese recht ausführlichen Beitrag eine Menge Einzelheiten enthält, wie Assembler verwenden DirectX unter Windows zu fahren. DirectX ist der Schlüssel API Familie für Grafiken in diesen Tagen, werden Sie nicht weit mit DOS-Ära Interrupts und Programmierung des VGA-Framebuffer direkt kommen.

Interrupt 10h ist im Grunde ein Betriebssystem-Funktionsaufruf (eigentlich ist es BIOS-Code ausgeführt wird). Intern liest / Videospeicher sowie verschiedene Register auf der Grafikkarte schreibt. Um eine Vorstellung davon zu bekommen, was für Sachen passiert „innerhalb“ Interrupt 10h, überprüfen this aus.

Wenn Sie ein DOS-Programm unter Windows ausgeführt wird, wird in einer virtuellen DOS-Maschine laufen. Windows nicht wirklich lassen Sie es die Grafikkarte berühren, sondern lässt es mit einem virtuellen spielen. Normalerweise erstreckt sich nur bis zu VGA-Bildschirm-Modi (und manchmal nur Textmodus), das heißt, was Sie haben, ist eine virtuelle VGA-Karte (keine moderne Grafikkarte). Aus diesem Grunde in 16-Bit-Assembler-Sprache unter Windows, kann man einfach nicht die volle Leistungsfähigkeit moderner Grafikkarten verwenden.

Ja, sicher, kann Assemblersprache können Sie alles tun, die Grafikkarte tun. Aber nur, wenn entweder:

  • Ihr Programm hat uneingeschränkten Zugriff auf die Grafikhardware (zum Beispiel eines Windows oder Linux-Gerätetreiber schreiben, oder in reinem DOS oder einen eigenen Kernel ausgeführt wird), oder
  • Ihr Programm geht durch die entsprechenden Betriebssystem-Schnittstelle.

Wenn Sie immer noch interessiert in Assembler-Sprache sind, dann würde ich vorschlagen, Sie versuchen, ein Spielzeug-Kernel zu schreiben. Dadurch werden Sie einen Berg Dinge.

Lassen Sie einen Kommentar, wenn Sie weitere Informationen wünschen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top