section .data
prompt db "Enter a number (0 to exit): ", 0
binary db 10, "Binary: ", 0
newline db 10, 0
section .bss
input resb 10
section .text
global _start
_start:
; Display prompt
mov eax, 4
mov ebx, 1
mov ecx, prompt
mov edx, 26
int 0x80
; Read input
mov eax, 3
mov ebx, 0
mov ecx, input
mov edx, 10
int 0x80
; Null-terminate input safely
mov esi, eax
dec esi
mov byte [input + esi], 0
; Convert input string to integer
mov esi, input
call str_to_int
cmp eax, 0
je exit
mov ebx, eax
; Display "Binary:"
mov eax, 4
mov ebx, 1
mov ecx, binary
mov edx, 9
int 0x80
; Print binary representation
call print_binary
; Print newline
mov eax, 4
mov ebx, 1
mov ecx, newline
mov edx, 1
int 0x80
jmp _start
exit:
mov eax, 1
xor ebx, ebx
int 0x80
; -----------------------------------------
; Convert string at [esi] to integer in eax
str_to_int:
xor eax, eax
xor ecx, ecx
.loop:
mov cl, byte [esi]
cmp cl, 0
je .done
sub cl, '0'
imul eax, eax, 10
add eax, ecx
inc esi
jmp .loop
.done:
ret
; -----------------------------------------
; Print binary representation of EBX
print_binary:
mov eax, ebx
mov ecx, 32
mov edx, 0
mov esi, 1
shl esi, 31 ; Highest bit mask
mov edi, 0 ; Flag: first 1 printed
.loop:
test eax, esi
jz .maybe_skip
mov edi, 1
mov dl, '1'
jmp .print
.maybe_skip:
cmp edi, 0
je .skip
mov dl, '0'
.print:
mov [input], dl
mov eax, 4
mov ebx, 1
mov ecx, input
mov edx, 1
int 0x80
.skip:
shr esi, 1
dec ecx
jnz .loop
ret
c2VjdGlvbiAuZGF0YQogICAgcHJvbXB0IGRiICJFbnRlciBhIG51bWJlciAoMCB0byBleGl0KTogIiwgMAogICAgYmluYXJ5IGRiIDEwLCAiQmluYXJ5OiAiLCAwCiAgICBuZXdsaW5lIGRiIDEwLCAwIAoKc2VjdGlvbiAuYnNzCiAgICBpbnB1dCByZXNiIDEwCgpzZWN0aW9uIC50ZXh0CiAgICBnbG9iYWwgX3N0YXJ0Cgpfc3RhcnQ6CiAgICA7IERpc3BsYXkgcHJvbXB0CiAgICBtb3YgZWF4LCA0CiAgICBtb3YgZWJ4LCAxCiAgICBtb3YgZWN4LCBwcm9tcHQKICAgIG1vdiBlZHgsIDI2CiAgICBpbnQgMHg4MAoKICAgIDsgUmVhZCBpbnB1dAogICAgbW92IGVheCwgMwogICAgbW92IGVieCwgMAogICAgbW92IGVjeCwgaW5wdXQKICAgIG1vdiBlZHgsIDEwCiAgICBpbnQgMHg4MAoKICAgIDsgTnVsbC10ZXJtaW5hdGUgaW5wdXQgc2FmZWx5CiAgICBtb3YgZXNpLCBlYXgKICAgIGRlYyBlc2kKICAgIG1vdiBieXRlIFtpbnB1dCArIGVzaV0sIDAKCiAgICA7IENvbnZlcnQgaW5wdXQgc3RyaW5nIHRvIGludGVnZXIKICAgIG1vdiBlc2ksIGlucHV0CiAgICBjYWxsIHN0cl90b19pbnQKICAgIGNtcCBlYXgsIDAKICAgIGplIGV4aXQKICAgIG1vdiBlYngsIGVheAoKICAgIDsgRGlzcGxheSAiQmluYXJ5OiIKICAgIG1vdiBlYXgsIDQKICAgIG1vdiBlYngsIDEKICAgIG1vdiBlY3gsIGJpbmFyeQogICAgbW92IGVkeCwgOQogICAgaW50IDB4ODAKCiAgICA7IFByaW50IGJpbmFyeSByZXByZXNlbnRhdGlvbgogICAgY2FsbCBwcmludF9iaW5hcnkKCiAgICA7IFByaW50IG5ld2xpbmUKICAgIG1vdiBlYXgsIDQKICAgIG1vdiBlYngsIDEKICAgIG1vdiBlY3gsIG5ld2xpbmUKICAgIG1vdiBlZHgsIDEKICAgIGludCAweDgwCgogICAgam1wIF9zdGFydAoKZXhpdDoKICAgIG1vdiBlYXgsIDEKICAgIHhvciBlYngsIGVieAogICAgaW50IDB4ODAKCjsgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KOyBDb252ZXJ0IHN0cmluZyBhdCBbZXNpXSB0byBpbnRlZ2VyIGluIGVheApzdHJfdG9faW50OgogICAgeG9yIGVheCwgZWF4CiAgICB4b3IgZWN4LCBlY3gKLmxvb3A6CiAgICBtb3YgY2wsIGJ5dGUgW2VzaV0KICAgIGNtcCBjbCwgMAogICAgamUgLmRvbmUKICAgIHN1YiBjbCwgJzAnCiAgICBpbXVsIGVheCwgZWF4LCAxMAogICAgYWRkIGVheCwgZWN4CiAgICBpbmMgZXNpCiAgICBqbXAgLmxvb3AKLmRvbmU6CiAgICByZXQKCjsgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KOyBQcmludCBiaW5hcnkgcmVwcmVzZW50YXRpb24gb2YgRUJYCnByaW50X2JpbmFyeToKICAgIG1vdiBlYXgsIGVieAogICAgbW92IGVjeCwgMzIKICAgIG1vdiBlZHgsIDAKICAgIG1vdiBlc2ksIDEKICAgIHNobCBlc2ksIDMxICAgICAgIDsgSGlnaGVzdCBiaXQgbWFzawogICAgbW92IGVkaSwgMCAgICAgICAgOyBGbGFnOiBmaXJzdCAxIHByaW50ZWQKCi5sb29wOgogICAgdGVzdCBlYXgsIGVzaQogICAganogLm1heWJlX3NraXAKICAgIG1vdiBlZGksIDEKICAgIG1vdiBkbCwgJzEnCiAgICBqbXAgLnByaW50CgoubWF5YmVfc2tpcDoKICAgIGNtcCBlZGksIDAKICAgIGplIC5za2lwCiAgICBtb3YgZGwsICcwJwoKLnByaW50OgogICAgbW92IFtpbnB1dF0sIGRsCiAgICBtb3YgZWF4LCA0CiAgICBtb3YgZWJ4LCAxCiAgICBtb3YgZWN4LCBpbnB1dAogICAgbW92IGVkeCwgMQogICAgaW50IDB4ODAKCi5za2lwOgogICAgc2hyIGVzaSwgMQogICAgZGVjIGVjeAogICAgam56IC5sb29wCiAgICByZXQK