AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Erklärung der Flags und CMP instruction in Assembler

Erklärung der Flags und CMP instruction in Assembler

Ein Thema von milos · begonnen am 12. Apr 2018 · letzter Beitrag vom 12. Apr 2018
Antwort Antwort
Benutzerbild von milos
milos

Registriert seit: 14. Jul 2008
Ort: Bern (CH)
486 Beiträge
 
Delphi 10.1 Berlin Professional
 
#1

Erklärung der Flags und CMP instruction in Assembler

  Alt 12. Apr 2018, 02:47
Hi,

der Titel ist leider nicht so glücklich gewählt, dafür entschuldige ich mich...

Ich arbeite gerade an einer kleinen VM mit eigenem instruction set und bin eigentlich so gut wie fertig... Ich habe fast alle move-, arithmetic-, stack- und control-flow-instructions implementiert und benötige nur noch conditional jumps. In assembler werden ja bei eine CMP befehl die Flags gesetzt welche dann bei einem conditional jump abgefragt werden um zu entscheiden ob gesprungen werden soll oder nicht. Die Liste die mit den vorausgesetzten Flags findet man hier in der "Flags" splate: http://unixwiz.net/techtips/x86-jumps.html

Nun möchte ich dieses Verhalten nachprogrammieren, jedoch verstehe ich leider die Beschreibung der Flags, bzw das genaue verhalten der CMP instruction nicht... Zu den Flags habe ich im Developer Manual von Intel im Kapitel "3.4.3.1 Status Flags" Beschreibungen gefunden, aber ganz habe ich das nun auch nicht verstanden... Vorallem wird der CMP befehl gar nicht erwähnt.

Gibts irgendwo eine genauere Beschreibung was genau passiert wenn ein CMP befehl zwei Werte vergleicht? Wie werden die Flags genau gesetzt? Gibts irgendwo vielleicht Pseudo- oder echten Code den ich mir ansehen könnte und nicht allzu kompliziert ist?

Freundliche Grüsse
Milos

Geändert von milos (12. Apr 2018 um 02:50 Uhr)
  Mit Zitat antworten Zitat
Whookie

Registriert seit: 3. Mai 2006
Ort: Graz
422 Beiträge
 
Delphi 10.3 Rio
 
#2

AW: Erklärung der Flags und CMP instruction in Assembler

  Alt 12. Apr 2018, 07:25
Es wird eine Subtraktion durchgeführt.
Whookie

Software isn't released ... it is allowed to escape!
  Mit Zitat antworten Zitat
Benutzerbild von milos
milos

Registriert seit: 14. Jul 2008
Ort: Bern (CH)
486 Beiträge
 
Delphi 10.1 Berlin Professional
 
#3

AW: Erklärung der Flags und CMP instruction in Assembler

  Alt 12. Apr 2018, 08:11
Hi Whookie,

Es wird eine Subtraktion durchgeführt.
Das ist mir auch Klar...

Zitat:
Im Gegensatz zum Subtraktionsbefehl wird das Ergebnis jedoch nicht gespeichert, sondern es werden nur die Prozessor-Flags entsprechend dem Ergebnis gesetzt.
Meine Frage ist eher wie genau die Flags gesetzt werden und was die Bedingungen der einzelnen Flags sind.

Z.b. folgendem Code:

Code:
  mov eax, 10
  mov ebx, 12
  cmp eax, ebx ; vergleiche eax, ebx
CMP führt eine Subtraktion durch, aber auf was werden die Flags dann gesetzt?

Freundliche Grüsse
Milos
  Mit Zitat antworten Zitat
Whookie

Registriert seit: 3. Mai 2006
Ort: Graz
422 Beiträge
 
Delphi 10.3 Rio
 
#4

AW: Erklärung der Flags und CMP instruction in Assembler

  Alt 12. Apr 2018, 08:37
SUB Befehl: OF, SF, ZF, AF, PF, CF

Overflow flag
Sign flag
Zero flag
Auxillary (carry) flag
Parity flag
Carry flag

Die Funktion der Flags findest du hier
Whookie

Software isn't released ... it is allowed to escape!
  Mit Zitat antworten Zitat
Benutzerbild von Neutral General
Neutral General

Registriert seit: 16. Jan 2004
Ort: Bendorf
5.165 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#5

AW: Erklärung der Flags und CMP instruction in Assembler

  Alt 12. Apr 2018, 09:14
Bei sowas solltest du zumindest zusätzlich zu deinen anderen Quellen das offizielle Manual von Intel nehmen:

https://software.intel.com/sites/def...abcd-3abcd.pdf

Es klingt nämlich so als hättest du mit Flags bisher noch gar nichts gemacht. Und die schlechte Nachricht ist dass nicht nur "cmp" die Flags verändert,
sondern noch ein ganzer Haufen anderer Instruktionen.
Und welche Instruktion in welchen Fällen welches Flag setzt steht genau da in diesem PDF.
Michael
"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."
  Mit Zitat antworten Zitat
Benutzerbild von Zacherl
Zacherl

Registriert seit: 3. Sep 2004
4.629 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#6

AW: Erklärung der Flags und CMP instruction in Assembler

  Alt 12. Apr 2018, 12:27
Falls du ein einfach zu parsendes Dokument suchst, kannst du gerne mal hier vorbeischauen:
https://github.com/zyantific/zydis-d...tructions.json

Die Datenbasis ist anhand der Intel Dokumentation, den Datafiles von Intel XED, den Tabellen von LLVM und der Website "sandpile.org" zusammengestellt und sollte - bis auf die ganz neuen Instructions aus der "Tremont" Microarchitektur (Edit: Jetzt auch vorhanden, im Future Branch) - sämtliche momentan verfügbaren ISA-Extensions beinhalten. Das JSON-File dient als Input für einen Generator, der dann die Decoder Tabellen für unseren Zydis Disassembler erzeugt; wird von uns also auch regelmäßig auf den neusten Stand gebracht.

Edit:
Dass CMP eine Subtraktion durchführt, wurde ja schon erwähnt. Dadurch impliziert werden die Flags CF, OF, SF, ZF, AF und PF entsprechend der Regeln für Subtraktion gesetzt. Also CF, wenn es einen Übertrag gab; OF, wenn ein Overflow stattgefunden hat, etc. Im Intel SDM gibt es unter dem Stichwort "Jcc — Jump if Condition Is Met" eine Seite mit allen konditionalen Sprüngen. Hier steht an der Seite auch immer dabei, welches Flag auf welche Bedingung geprüft wird. Z.B. im Falle von JNE wäre das "Jump short if not equal (ZF=0)" (Ergebnis der Subtraktion über CMP ergab nicht 0 -> also waren die verglichenen nicht Werte identisch -> zero-flag wurde nicht gesetzt (=0)).
Projekte:
- GitHub (Profil, zyantific)
- zYan Disassembler Engine ( Zydis Online, Zydis GitHub)

Geändert von Zacherl (12. Apr 2018 um 14:00 Uhr)
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +2. Es ist jetzt 04:27 Uhr.
Powered by vBulletin® Copyright ©2000 - 2021, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2021 by Daniel R. Wolf