Binärzahl eines Wertes ausgeben
-
Hi,
Ich programmiere hier mit nasm, 32 bit unter WindowsIch versuche einen 32-bit Wert bit für bit auszulesen und die sich daraus ergebende Binärzahl auf der Konsole auszugeben.
Der ursprüngliche Zweck des ganzen war, eine Floating-Point-Zahl in Binärform auszugeben.Hier mein bisheriger Code:
extern _printf global _foo section .data m0: db "0", 0 m1: db "1", 0 mstr: db "%s" section .text _foo: push ebp mov ebx, [esp-4] mov ecx, 32 _loop: cmp ecx, 0 je _end dec ecx bt ebx, ecx jc _print1 _print0: mov ebp, ecx push m0 push mstr call _printf add esp, 8 mov ecx, ebp jmp _loop _print1: mov ebp, ecx push m1 push mstr call _printf add esp, 8 mov ecx, ebp jmp _loop _end: mov eax, 0 pop ebp ret
Die bt (=bit test) Anweisung in _loop testet ein bit an Position ecx in ebx, und setzt das carry flag CF wenn das geprüfte bit gesetzt ist.Die bedingte Sprunganweisung jc liest dann CF aus und springt falls CF gesetzt ist zurRoutine _print1, die eine 1 auf der Konsole ausgibt. Ansonsten geht es weiter mit der Routine _print0, die eine 0 auf der Konsole ausgibt.
Auf diese Weise wollte ich alle bits von ebx lesen und auf dem Bildschirm ausgeben, so dass ich dann die binäre Darstellung beliebiger 32-bit Werte gewinne.Leider klappt das ganze irgendwie nicht. Egal welchen Wert ich in ebx einsetze, das Ergebnis ist immer 00000000010000000001100010100000.Ich habe schon verschiedene Register zur Speicherung des Wertes benutzt, aber als Ergebnis erhalte ich immer eine stets gleichbleibende Binärzahl, unabhängig vom Wert den ich ins Register einspeise. Was mache ich falsch?
-
section .text _foo: push ebp mov ebx, [esp-4] ;; Wieso -4? Wie wärs mit +8? mov ecx, 32
-
Stimmt..danke. Oh man, das hab ich jetzt total verplant. Ich glaub die Ausgabe stimmt jetzt sogar. Die letzen 8 Stunden die an dem Teil gehockt bin hätt ich mir schenken können.
-
Ich glaube du solltest dich mal mit einem Debugger vertraut machen. Dann hättest du gemerkt, dass in ebx nicht das drin steht, was du übergeben hast.
-
Ich werd mal nach sowas suchen.