Autor Thema: FAR-Jump in NASM  (Gelesen 2507 mal)

Rookie

  • Beiträge: 11
    • Profil anzeigen
Gespeichert
« am: 10. January 2017, 08:20 »
Hallo,
ich hab mal eine Frage zu NASM : Wie schaff ich es, den JMP-Befehl mit ES und BX oder Variablen zu verwenden ?
Hab schon jmp [es:bx], jmp es:bx und jmp [JmpSeg:JmpOff] versucht, alles ohne Erfolg. Das einzige was geht, ist eine feste Adresse ala :
jmp 0x1000:0x0000oder über retf : push es, push bx, retf.

Irgendwie ging es, dass man den JMP-Befehl in Verbindung mit ES und BX verwenden kann, nur weiß leider nicht mehr wie.
Könnt ihr mir helfen ?

Vielen Dank,
osdever

kevin

  • Administrator
  • Beiträge: 2 767
    • Profil anzeigen
Gespeichert
« Antwort #1 am: 10. January 2017, 10:49 »
Nein, ging nicht. Lies die Beschreibung zu JMP im Intel-Manual und du wirst feststellen, dass es Far Jumps nur mit Immediate-Werten oder einem Far Pointer im Speicher gibt. Was anderes kann dein Prozessor nicht, also hat nasm auch keine Syntax dafür.
Thou shalt not follow the NULL pointer, for chaos and madness await thee at its end.

Rookie

  • Beiträge: 11
    • Profil anzeigen
Gespeichert
« Antwort #2 am: 10. January 2017, 11:48 »
Hallo,
ähm mit immediate-Werten meinst du sowas wie Hard-codierte-Adressen, also
jmp 0x1000:0x0000oder ?

Mit dem "Far Pointer im Speicher" hab ich dich nicht so recht verstanden. Meinst du damit das push es, push bx, retf ?
Oder mit dem Schlüsselwort far ?
Habs mit far versucht, aber ohne Erfolg.

Hättest du mir ne Zeile Beispielcode ?

Vielen Dank !

kevin

  • Administrator
  • Beiträge: 2 767
    • Profil anzeigen
Gespeichert
« Antwort #3 am: 11. January 2017, 10:25 »
ähm mit immediate-Werten meinst du sowas wie Hard-codierte-Adressen, also
jmp 0x1000:0x0000oder ?
Genau.

Zitat
Mit dem "Far Pointer im Speicher" hab ich dich nicht so recht verstanden. Meinst du damit das push es, push bx, retf ?
Wäre praktisch gesehen eine Option. Ich habe aber die Variante gemeint, wo tatsäcjhlich jmp einen Far Pointer als Operanden bekommt. Mit nasm und Real Mode kombinierst du alles, mit dem ich nicht viel Erfahrung habe, aber das würde irgendwie so aussehen:
mov [bla], bx
mov [bla + 2], es
jmp [bla]

bla:
    dw  0
    dw  0
Thou shalt not follow the NULL pointer, for chaos and madness await thee at its end.

Cjreek

  • Beiträge: 104
    • Profil anzeigen
Gespeichert
« Antwort #4 am: 02. March 2017, 15:30 »
Bin zwar etwas spät dran aber es gibt ja auch immer noch den trick segment + adresse auf den stack zu legen und dann über retf zu springen.

push bx
push es
retf
« Letzte Änderung: 02. March 2017, 15:32 von Cjreek »
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."

 

Einloggen