forked from blau_araujo/pbn
exemplos da aula 6
This commit is contained in:
parent
ee62511898
commit
4d701d4461
5 changed files with 304 additions and 0 deletions
66
curso/exemplos/06/args.asm
Normal file
66
curso/exemplos/06/args.asm
Normal file
|
@ -0,0 +1,66 @@
|
|||
; ----------------------------------------------------------
|
||||
; 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
|
Loading…
Add table
Add a link
Reference in a new issue