TIMES 510-($-$$) db 0x00 ?



  • Hallo,

    ich habe mal eine Frage:
    Was bewirkt diese Zeile Code?

    TIMES 510-($-$$) db 0x00
    

    Ich weiß, dass damit eine bestimmte Anzahl an Bytes mit Nullen beschrieben wird, aber wie genau dieser Code das bewirkt weiß ich nicht.
    Was bewirkt TIMES? Und wofür stehen $ und $$ ?

    Mit ratlosen Grüßen
    DerRatlose



  • http://www.csc.depauw.edu/~bhoward/asmtut/asmtut9.html ist ganz unten erklärt was $ und $$ sind.

    "TIMES x Befehl" bedeutet der Befehl wird x mal ausgeführt. (-) ist die größe deines Codes. 510-(-$$) ist somit der Rest bis 510 bytes. Letztendlich wird also einfach solange mit 0 aufgefüllt bis die 510 byte erreicht werden.



  • Danke für die Erklärung. Hab es jetzt verstanden.

    Ist TIMES eigentlich ein schneller Befehl oder könnte man das ganze auch schneller ablaufen lassen, so wie man besser xor ax, ax nehmen sollte als mov ax, 0 ?



  • Das ist nur ein Befehl für den Assembler, der folgendermaßen ungefähr ausgewertet werden sollte:

    Assembler liest Source-File ein, wertet den Assemblercode davor aus, sieht jetzt das "times 510-(-)db0x00",wertet510() db 0x00", wertet 510-(-$$) aus und weiß: Aha! Im Programm soll später also x mal "db 0x00" stehen, und schreibt das letztendlich dann auch so.

    Mit der Ausführungsgeschwindigkeit des Programms hat das Ganze am Ende also nichts zu tun, da kommts dann halt drauf an, was genau geschrieben werden soll.

    times 510-($-$$) mov ax, 0
    

    ist natürlich langsamer als

    times 510-($-$$) xor ax, ax
    

    Also einfach eine Erleichterung für den Programmierer, wenn bestimmte Befehle wiederholt werden sollen. 😉


  • Mod

    wie hoch kann man dieses times eigentlich drehen?



  • Danke für die schnelle Hilfe.
    Hatte mir eigentlich auch nur Gedanken um die Geschwindigkeit gemacht, weil ich den Code Teil in einem Tutorial für einen Boot Loader gesehen hatte.
    Aber stimmt. Ist im Endeffekt ja eigentlich kein Befehl der später im Programm ausgeführt wird, sondern nur die Angabe, dass der Befehl später so und so oft im Programm hintereinander stehen soll.



  • Erhard Henkes schrieb:

    wie hoch kann man dieses times eigentlich drehen?

    21474836471)

    ~1) http://repo.or.cz/w/nasm.git?a=blob;f=nasm.h;hb=HEAD#l744~



  • Schablone schrieb:

    Erhard Henkes schrieb:

    wie hoch kann man dieses times eigentlich drehen?

    21474836471)

    Schön, man kann damit ganze DVD Images erstellen... 😃



  • abc.w schrieb:

    Schablone schrieb:

    Erhard Henkes schrieb:

    wie hoch kann man dieses times eigentlich drehen?

    21474836471)

    Schön, man kann damit ganze DVD Images erstellen... 😃

    Hab ich auch schon gedacht, das klingt wie ein guter dd Ersatz für Windows 😃

    Falls man größere Dateien will nimmt man statt bytes dann quadwords oder man schreibt mehrere Zeilen mit TIMES 😃



  • Dieser Thread wurde von Moderator/in Nobuo T aus dem Forum Assembler in das Forum Projekt: OS-Development verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.


Log in to reply