Assembly (AT&T) Instruktion Erklärung (and+2s complement)



  • Guten Tag,

    Unter Linux habe ich folgendes gesehen (objdump):

    and    $0xfffffff0,%esp
    

    Meine erste Frage ist, wie stelle ich fest was da passiert. Es wäre sehr freundlich, es kurz zu erklären. Denn ich blicke da nicht durch. Was es bringen soll. Was das Ziel ist. Wieso man sowas macht.

    2er komplementär (oder wies heisst) wirds sein, weil speicher allokiert wird.

    Gleich zum anderen Problem: Wenn ich mit Assembler zu tun habe (Binary normal oder 2's complement) muss ich ständig eine Liste schreiben, dass ich jeweils durchblicke. Kennt jemand eine Eselsbrücke wie man das besser macht? Z.b. Hex zu Binary, ich kenne nur f, welches 1111 ist, und logischerweise auch 0. Jedoch dazwischen gibts meistens eine Ninja-Übung.

    Ich bitte euch, mir eine Hilfe zu geben, wie ich das kapieren kann. Denn es ist echt tricky manchmal.

    Vielen Dank für eure Hilfe, und auch danke, dass ihr meine anfänger Frage beantwortet.

    Greetz ThirdFishli

    PS: Habe schon etliche Binary Tutorials gelesen, aber finde da nie nen "Trick", oder ähnliches. Eine Möglichkeit wäre mit z.b. python. oder bash printf.. jedoch, wie macht ihr das? DANKE! 😉



  • ThirdFishli schrieb:

    Guten Tag,

    Unter Linux habe ich folgendes gesehen (objdump):

    and    $0xfffffff0,%esp
    

    Ich würde mal schwer schätzen das entspricht einem

    esp & 0xfffffff0
    

    in C.
    D.h. ESP wird binär (jedes Bit für jedes) mit 0xfffffff0 geUNDet.
    Du weißt schon, 1 + 1 = 1, alle anderen Kombinationen wie 1 + 0 = 0 ergeben 0.
    Im Klartext heißt das: Die 4 untersten Bits werden auf 0 gesetzt, alles andere bleibt wie es ist.

    ThirdFishli schrieb:

    Gleich zum anderen Problem: Wenn ich mit Assembler zu tun habe (Binary normal oder 2's complement) muss ich ständig eine Liste schreiben, dass ich jeweils durchblicke. Kennt jemand eine Eselsbrücke wie man das besser macht? Z.b. Hex zu Binary, ich kenne nur f, welches 1111 ist, und logischerweise auch 0. Jedoch dazwischen gibts meistens eine Ninja-Übung.

    Höh? Also so schwer ist das doch nicht... Mit der Zeit klappt das schon.

    Eine HEX-Ziffer entspricht immer 4 Binärziffern (23+22+21+20 == 8er + 4er + 2er + 1er).

    Ab 10 geht's in HEX von A bis F (15) weiter.

    FE 51 2A 7C B3 2D ist also 1111 1110 0101 (5 = 1 x 4 + 1 x 1) 0001 0010 1010 (A = 10 = 8 + 2) 0111 ...

    Du gehst einfach die 8, 4, 2 und 1 durch und nimmst die größte die kleiner oder gleich als die gesuchte HEX-Zahl ist, und nimmst - falls noch was fehlt - sukkzessive folgende Zahlen hinzu.

    B = 11 = ?

    8 ? -> Ja

    8 + 4 ? -> Nein, das wäre schon 12

    8 + 2 ? -> Ja, fehlt aber noch eins

    8 + 2 + 1 ? -> Genau

    Ergo: B = 11 = 0x1011



  • Hallo Sgt. Nukem,

    Knopf ist gelöst. Vielen Dank für die genommene Zeit.

    Gruss ThirdFishli


Anmelden zum Antworten