exemplos da aula 4
This commit is contained in:
parent
194e25f9de
commit
ccc9eda285
2 changed files with 63 additions and 0 deletions
29
curso/exemplos/04/mappings.asm
Normal file
29
curso/exemplos/04/mappings.asm
Normal file
|
@ -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
|
34
curso/exemplos/04/mappings.c
Normal file
34
curso/exemplos/04/mappings.c
Normal file
|
@ -0,0 +1,34 @@
|
|||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
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;
|
||||
}
|
Loading…
Add table
Reference in a new issue