section .bss
buffer resb 256 ; lưu chuỗi nhập vào
buffer_len resb 20 ; lưu chuỗi số để in ra
section .data
msg db "Hãy nhập chuỗi: ", 0
msg_len equ $ - msg
section .text
global _start
_start:
; ===== In thông báo =====
mov rax, 1 ; syscall write
mov rdi, 1
mov rsi, msg
mov rdx, msg_len
syscall
; ===== Đọc chuỗi từ bàn phím =====
mov rax, 0 ; syscall read
mov rdi, 0
mov rsi, buffer
mov rdx, 256
syscall
; rax = số byte đọc được (bao gồm cả newline nếu có)
mov rcx, rax
dec rcx ; bỏ qua newline '\n' ở cuối
; ===== Chuyển số (rcx) sang chuỗi =====
mov rax, rcx
mov rdi, buffer_len + 19
mov byte [rdi], 10 ; newline
dec rdi
itoa_loop:
mov rdx, 0
mov rbx, 10
add dl, 48
mov [rdi], dl
dec rdi
test rax, rax
jnz itoa_loop
inc rdi
; ===== In độ dài =====
mov rax, 1
mov rsi, rdi
mov rdi, 1
mov rdx, buffer_len + 20 ; rdx = địa chỉ outbuf + 20
sub rdx, rdi ; rdx = rdx - rdi
syscall
; ===== Thoát =====
mov rax, 60
mov rdi, 0
syscall
c2VjdGlvbiAuYnNzCiAgICBidWZmZXIgcmVzYiAyNTYgICAgICAgICA7IGzGsHUgY2h14buXaSBuaOG6rXAgdsOgbwogICAgYnVmZmVyX2xlbiByZXNiIDIwICAgICAgICAgIDsgbMawdSBjaHXhu5dpIHPhu5EgxJHhu4MgaW4gcmEKc2VjdGlvbiAuZGF0YQogICAgbXNnIGRiICJIw6N5IG5o4bqtcCBjaHXhu5dpOiAiLCAwCiAgICBtc2dfbGVuIGVxdSAkIC0gbXNnCnNlY3Rpb24gLnRleHQKICAgIGdsb2JhbCBfc3RhcnQKCl9zdGFydDoKICAgIDsgPT09PT0gSW4gdGjDtG5nIGLDoW8gPT09PT0KICAgIG1vdiByYXgsIDEgICAgICAgICAgICAgICAgICA7IHN5c2NhbGwgd3JpdGUKICAgIG1vdiByZGksIDEKICAgIG1vdiByc2ksIG1zZwogICAgbW92IHJkeCwgbXNnX2xlbgogICAgc3lzY2FsbAoKICAgIDsgPT09PT0gxJDhu41jIGNodeG7l2kgdOG7qyBiw6BuIHBow61tID09PT09CiAgICBtb3YgcmF4LCAwICAgICAgICAgICAgICAgICAgOyBzeXNjYWxsIHJlYWQKICAgIG1vdiByZGksIDAKICAgIG1vdiByc2ksIGJ1ZmZlcgogICAgbW92IHJkeCwgMjU2CiAgICBzeXNjYWxsCgogICAgOyByYXggPSBz4buRIGJ5dGUgxJHhu41jIMSRxrDhu6NjIChiYW8gZ+G7k20gY+G6oyBuZXdsaW5lIG7hur91IGPDsykKICAgIG1vdiByY3gsIHJheAogICAgZGVjIHJjeCAgICAgICAgIDsgYuG7jyBxdWEgbmV3bGluZSAnXG4nIOG7nyBjdeG7kWkKCiAgICA7ID09PT09IENodXnhu4NuIHPhu5EgKHJjeCkgc2FuZyBjaHXhu5dpID09PT09CiAgICBtb3YgcmF4LCByY3gKICAgIG1vdiByZGksIGJ1ZmZlcl9sZW4gKyAxOQogICAgbW92IGJ5dGUgW3JkaV0sIDEwICAgICAgOyBuZXdsaW5lCiAgICBkZWMgcmRpCgoJCml0b2FfbG9vcDoKICAgIG1vdiByZHgsIDAKICAgIG1vdiByYngsIDEwCiAgICBkaXYgcmJ4CiAgICBhZGQgZGwsIDQ4CiAgICBtb3YgW3JkaV0sIGRsCiAgICBkZWMgcmRpCiAgICB0ZXN0IHJheCwgcmF4CiAgICBqbnogaXRvYV9sb29wCgkKCWluYyByZGkKCiAgICAKICAgIDsgPT09PT0gSW4gxJHhu5kgZMOgaSA9PT09PQogICAgbW92IHJheCwgMQogICAgbW92IHJzaSwgcmRpCiAgICBtb3YgcmRpLCAxCiAgICBtb3YgcmR4LCBidWZmZXJfbGVuICsgMjAgICA7IHJkeCA9IMSR4buLYSBjaOG7iSBvdXRidWYgKyAyMAoJc3ViIHJkeCwgcmRpICAgICAgICAgICA7IHJkeCA9IHJkeCAtIHJkaQoKICAgIHN5c2NhbGwKCQogICAgOyA9PT09PSBUaG/DoXQgPT09PT0KICAgIG1vdiByYXgsIDYwCiAgICBtb3YgcmRpLCAwCiAgICBzeXNjYWxsCgoK