Setzung der CMP-Flags in Pseudo-Code
-
Hallo
Ich finde im INet leider keine gute Dokumentation dafür, deshalb frage ich hier an: Mit welchem Pseudo-Code könnte man das Setzen der Flags bei der CMP-Funkion beschreiben?Bsp für sf, cf und zf, bei denen ich mir fast sicher bin, dass dieser Code stimmt:
sf = ((ARG2 - ARG1) < 0) zf = ((ARG2 - ARG1) == 0) cf = (ARG1 > ARG2)
ARG steht für Argument/ Parameter
Bitte nehmt als Operanten C++ ähnliche, soweit sie euch geläufig sind.
Vielen Dank schon mal im Vorraus
-
mov eax,4 cmp eax,8 ; Zero Flag: 0 cmp eax,4 ; Zero Flag: 1
#include <iostream> using namespace std; int main() { int a = 4; if(a==8) // Setzt Zero Flag auf 0 { } if(a==4) // Setzt Zero Flag auf 1 { } return 0; }
Pseudocode:
Setzt Variable a = 4
Wenn Variable a == 8 dann Zero Flag = 1 ansonsten Zero Flag = 0
Wenn Variable a == 4 dann Zero Flag = 1 ansonsten Zero Flag = 0Meinst du so?
-
Ja, genau so meine ich das. Die anderen wären natürlich auch nicht schlecht
-
int a=...,b=... //int == 32bit zf = (a-b==0)?1:0; sf = ((a-b<0)?1:0; unsigned int c=(unsigned int)a,d=(unsigned int)b; unsigned int64 result; result = c-d; cr = (result&0x100000000)?1:0;
-
Dann fehler jetzt nur noch die schwieriegen: of, af, cf, pf.
-
Mach deine Hausaufgaben gefälligst selbst!
-
Wenn man nicht auswendig weiss welche Flags gesetzt werden dann kann man das einfach ausm Debugger abschreiben.
Schau dir mal den Screenshot an:
http://www10.pic-upload.de/28.06.12/znmmedcywj3.jpgLad halt irgendein Programm in den Debugger und änder den Code um dann führst du einfach den Code im Debugger aus und beobachtest die Flags.
Ach wenn ich gerade schon mal dabei bin hier noch ein Screenshot:
http://www10.pic-upload.de/28.06.12/vfjl2inyj9u.jpg
Auf diesem Screen siehst du welche Flags gesetzt werden wenn folgendes ausgeführt wird:
mov eax,4 cmp eax,4
-
ptank schrieb:
Mach deine Hausaufgaben gefälligst selbst!
Na klar, aber ich konnte noch nicht erkennen das "coder216" seine Hausaufgaben von uns gemacht haben möchte und was spricht dagegen eine Frage dazu zu stellen, um lediglich eine Information darüber zu bekommen?
Weil so eine Frage um eine Informationen zu bekommen könnte ich ja auch stellen, nur bin ich gar kein Schüler mehr und mache deswegen auch keine Hausaufgaben.
Ich meine eine solche Kritik von dir war/ist hier fehl am Platz.
Dirk
-
Erst mal danke für den Tipp mit Olly.
Also ich bin kein Student und noch Schüler. Ich habe noch nicht einmal Informatik (aber bald, yeah). Ich denke mal, dass das metaphorisch gemeint ist, aber das ist ja auch eig egal.
Das Problem an Olly ist, dass man dafür ja den Case kennen muss, an dem der Flag gesetzt wird. Man kann zwar rumexperimentieren, aber ig nicht, dass ich den Case für zB den Bufferoverfloat-Flag finde.
Es wäre weiterhin sehr nett, wenn ihr mir weiterhelft. Ich probiere mal gleich mit Olly so viele wie möglich herauszufinden.
Kenn jmd einen guten quelloffenen ASM-Emu? Dann könnte ich ja im Code gucken.