Gast
#3187609
Hi, Ich programmiere hier mit nasm, 32 bit. Ich 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: mov eax, [esp-4] push ebp push ebx mov ebp, esp mov ebx, 32 _loop: cmp ebx, 0 je _end dec ebx bt eax, ebx jc _print1 _print0: push m0 push mstr call _printf jmp _loop _print1: push m1 push mstr call _printf jmp _loop _end: mov eax, 0 mov esp, ebp pop ebx pop ebp ret ----------------------------------------------------------------------- Die bt (=bit test) Anweisung in _loop testet ein bit an Position ebx in eax, 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 zur Routine _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 eax 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 eax einsetze, das Ergebnis ist immer 00000000000000000000000000000001. Die jc-Anweisung scheint nie zu springen, außer beim letzten bit. Wo liegt der Fehler?