From ccc9eda2858185abe0a59ff9705c01ae1ad9ad6f Mon Sep 17 00:00:00 2001 From: Blau Araujo Date: Wed, 21 May 2025 14:01:26 -0300 Subject: [PATCH] exemplos da aula 4 --- curso/exemplos/04/mappings.asm | 29 +++++++++++++++++++++++++++++ curso/exemplos/04/mappings.c | 34 ++++++++++++++++++++++++++++++++++ 2 files changed, 63 insertions(+) create mode 100644 curso/exemplos/04/mappings.asm create mode 100644 curso/exemplos/04/mappings.c diff --git a/curso/exemplos/04/mappings.asm b/curso/exemplos/04/mappings.asm new file mode 100644 index 0000000..053d633 --- /dev/null +++ b/curso/exemplos/04/mappings.asm @@ -0,0 +1,29 @@ +section .rodata + msg db `Salve, simpatia!\n` + len equ $ - msg + +section .data + global_data dq 42 + +section .bss + uninit_data resq 1 + +section .text + global _start + +_start: + ; Fazer algo com os dados em .data e .bss + mov rax, [rel global_data] ; acessando .data + mov rcx, [rel uninit_data] ; acessando .bss + + ; Imprimir a mensagem em .rodata + mov rax, 1 ; syscall: write + mov rdi, 1 ; fd 1 = stdout + mov rsi, msg ; endereço da mensagem + mov rdx, len ; tamanho da mensagem + syscall + + ; Encerrar processo + mov rax, 60 ; syscall: exit + xor rdi, rdi ; status 0 + syscall diff --git a/curso/exemplos/04/mappings.c b/curso/exemplos/04/mappings.c new file mode 100644 index 0000000..7a85937 --- /dev/null +++ b/curso/exemplos/04/mappings.c @@ -0,0 +1,34 @@ +#include +#include + +int global_var = 42; // .data +static int static_var = 7; // .data +int uninit_var; // .bss +const int const_var = 99; // .rodata + +int main() { + int local_var = 10; // stack + static int static_main = 5; // .data + int *heap_var = malloc(sizeof(int)); // heap + + *heap_var = 123; + + printf("local_var : %p : %d\n", &local_var, local_var); + printf("*heap_var : %p : %d\n", heap_var, *heap_var); + printf("uninit_var : %p : %d\n", &uninit_var, uninit_var); + printf("static_main: %p : %d\n", &static_main, static_main); + printf("static_var : %p : %d\n", &static_var, static_var); + printf("global_var : %p : %d\n", &global_var, global_var); + printf("const_var : %p : %d\n", &const_var, const_var); + + // Código da função main (.text)... + printf("main() : %p\n", &main); + + // Pausa para análise na linha de comandos... + puts("Tecle algo para terminar..."); + getchar(); + + free(heap_var); + + return 0; +}