Lowlevel

Lowlevel => Lowlevel-Coding => Thema gestartet von: Rookie am 10. January 2017, 08:20

Titel: FAR-Jump in NASM
Beitrag von: Rookie 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
Titel: Re: FAR-Jump in NASM
Beitrag von: kevin 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.
Titel: Re: FAR-Jump in NASM
Beitrag von: Rookie 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 !
Titel: Re: FAR-Jump in NASM
Beitrag von: kevin 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
Titel: Re: FAR-Jump in NASM
Beitrag von: Cjreek 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