; ---------------------------------------------------------- ; Arquivo : args.asm ; Descrição : Imprime argc e argv[0 .. (argc-1)] ; Montar com: nasm -f elf64 args.asm ; Ligar com : ls -o args args.o print_utils.o ; ---------------------------------------------------------- section .rodata pref_argc db "argc : ", 0 pref_argv db "argv[", 0 posf_argv db "]: ", 0 ; sub-rotinas do módulo print_utils.o extern print_int extern print_str extern print_char section .text global _start _start: ; ---------------------------------------------------------- ; Impressão de argc ; ---------------------------------------------------------- mov rdi, pref_argc ; endereço de pref_argc call print_str ; imprime pref_argc mov rax, [rsp] ; rax = argc call print_int ; imprime argc mov rdi, 10 ; rdi = \n call print_char ; imprime \n ; ---------------------------------------------------------- ; Impressão de argv ; ---------------------------------------------------------- mov rcx, 0 ; índice i = 0 lea rbx, [rsp + 8] ; rbx = endereço de argv[0] .print_argv_loop: cmp rcx, [rsp] ; enquanto i < argc jge .done_argv mov rdi, pref_argv ; imprime prefixo "argv[" call print_str mov rax, rcx ; rax = i call print_int ; imprime índice mov rdi, posf_argv ; imprime sufixo "]: " call print_str mov rdi, [rbx + rcx*8] ; rdi = argv[i] call print_str mov rdi, 10 ; imprime \n call print_char inc rcx jmp .print_argv_loop .done_argv: ; ---------------------------------------------------------- ; Termina o programa com exit(0) ; ---------------------------------------------------------- mov rax, 60 ; syscall: exit xor rdi, rdi ; status = 0 syscall