Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht Das deutsche QBasic- und FreeBASIC-Forum
Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
 
FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen  RegistrierenRegistrieren
ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin
Zur Begleitseite des Forums / Chat / Impressum
Aktueller Forenpartner:

[ASM] Hilfe bei JMP-Mnemonic

 
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Profi-Forum
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
PMedia



Anmeldungsdatum: 14.08.2006
Beiträge: 2847

BeitragVerfasst am: 10.07.2007, 11:25    Titel: [ASM] Hilfe bei JMP-Mnemonic Antworten mit Zitat

Wer sieht in folgender Gleichung, welche mit einem Disassembler angefertigt wurde, einen Zusammenhang?
Code:
0E9B301h = JMP 002B6h


Es handelt sich dabei um Code, der sogar läuft, und für den 8086 bestimmt ist.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
A.K.



Anmeldungsdatum: 02.05.2005
Beiträge: 467
Wohnort: HH

BeitragVerfasst am: 10.07.2007, 21:24    Titel: Antworten mit Zitat

Hi,

is ganz einfach, einmal hier:
http://www.iconsoft.de/index.php?show=tutorial_prozessor

und als Kurzerklärung:
Ein JMP (auch JZ, JL, JG, JA, JB......) ist immer ein relativer Sprung der sich an dem aktuellen Programmpointer orientiert.
Der Wert der dann im Hex-Format angegeben wird ist nicht die Adresse wohin das Programm springen soll, sondern nur eine Angabe um wieviel der Programmpointer erhöht oder verringert werden soll.

In deinem Beispiel:
0E9B301h = JMP 002B6h

bedeutet:
0E = JMP

B301 = jmp-"Betrag"
Dieser muß erstmal gedreht werden da bei einem Word immer die Bytes "verdreht" werden.
Der Betrag lautet dann 01B3h

0000-7FFF sind Sprünge in positive Richtung.
Ein JMP 0200 an dem Offset 0x0100 würde den Code 0E0001h erzeugen. Dieser bedeutet einfach nur Programmpointer +100h.

Werte von 8000-FFFF stellen negative Werte da, da das Sign-Flag, Bit 15 (Zählweise: 0-15) gesetzt ist.
Einfache Berechnung des jmp-"Betrags" wäre:

(FFFFh-B301h) * -1 (B301 nur als Beispiel bei Byte-Tausch!!)
Ergebnis wäre: -19711 (-4CFFh)

In deinem Fall heißt das einfach:
Da du JMP 02B6h angegeben hast, müßte dies theoretisch (!) heißen das dieser Befehl in deinem Assembler an Adresse (02B6h-01B3h) steht. Also an 0103h stehen. (+-3 wegen der Länge des JMP's, hab ich nicht mehr genau im Kopf)



MFG A.K.
_________________

http://forum.IconSoft.de
http://www.pnpbb.de - hol dir jetzt dein eigenes kostenloses Forum *NEU*
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen Yahoo Messenger MSN Messenger
PMedia



Anmeldungsdatum: 14.08.2006
Beiträge: 2847

BeitragVerfasst am: 11.07.2007, 11:06    Titel: Antworten mit Zitat

aka ( durchgeknallt grinsen ), danke happy

Was ich aber merkwürdig fand, das Programm wurde danach wirklich an Adresse 02B6h weitergeführt.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Profi-Forum Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.

 Impressum :: Datenschutz