Was bedeuted npad



  • Hallo,

    ich stöbere gerade ein bissl in dem vom Visual C++ Compiler für AMD K7 erzeugten Listings rum und stoße dort auf einen Befehl

    npad	4
    

    Ich vermute, dass es ein Makro für die Ausrichtung der Daten o.ä. ist, kann den Befehl aber in keiner Referenz finden...
    Oder vielleicht doch ein Mnemonic?

    Weiß jemand mehr 😕


  • Mod

    schau doch mal im debugger, was der compiler an der betreffenden stelle tatsächlich getan hat. der befehl selbst ist mir auch noch nie untergekommen, ich würde auch tippen, dass es für sowas wie n-padding steht, also für das füllen mit nops o.ä. um den nächsten befehl auszurichten, wäre also in gewisser weise ein ersatz für align. ein mnemonic ist es jedenfalls nicht.



  • Hier mal die komplette Ausgabe:

    $L273:
    
    ; 10   : 		for (i=0; i<j; i++)
    
      00006	33 d2		 xor	 edx, edx
      00008	85 f6		 test	 esi, esi
      0000a	7e 29		 jle	 SHORT $L274
      0000c	8d 64 24 00	 npad	 4
    

    Aber müsste er dann nicht um 2 Aufrunden und nicht um 4 ?


  • Mod

    wieso 2? offenbar fügt
    npad n
    n bytes ein, die im grunde nichts tun, also weder register, flags, speicher etc. verändern. der sinn des ganzen dürfte die nächste operation, die darauf folgt, sein, eine ausrichtung auf 16 byte grenzen hat sinn, wenn es es sich um ein häufiges sprungziel handelt.
    in diesem fall praktisch equivalent zu .align 16



  • Ja, logisch,
    habe die Opcodes für sich selber gezählt 😉
    Aber die fangen ja bei 00006 an, dann hauts natürlich hin.

    Danke


Anmelden zum Antworten