This shows you the differences between two versions of the page.
iocla:cursuri:capitol-07:demo:01 [2016/10/26 16:10] laura.vasilescu [C to Assembly] |
— (current) | ||
---|---|---|---|
Line 1: | Line 1: | ||
- | ===== 1. Variabile globale ===== | ||
- | Dorim să înțelegem rolul variabilelor globale și să învățăm cum le putem folosi. | ||
- | |||
- | ==== C to Assembly ==== | ||
- | |||
- | Vom scrie programe în C pe care le vom compila folosind consola MINGW pentru a putea observa assembly-ul generat. | ||
- | |||
- | Deschideți consola MINGW. (''C:\MinGW\msys\1.0\msys.bat'') | ||
- | |||
- | <code c test.c> | ||
- | #include <stdio.h> | ||
- | |||
- | int my_g = 1000; | ||
- | |||
- | int main(void) | ||
- | { | ||
- | return 0; | ||
- | } | ||
- | </code> | ||
- | Pentru generarea fișierului assembly folosiți: ''gcc -S -O0 -masm=intel -o test.asm test.c''.\\ | ||
- | Observați următoarea secțiune: | ||
- | <code> | ||
- | .globl _my_g | ||
- | .data | ||
- | .align 4 | ||
- | _my_g: | ||
- | .long 1000 | ||
- | </code> | ||
- | Adăugați, pe rând, câte o variabilă globală de tip ''char'', ''short'', ''long'' și ''long long''.\\ | ||
- | Ar trebui să observați ceva similar cu: | ||
- | <code> | ||
- | .globl _my_hhg | ||
- | .data | ||
- | _my_hhg: | ||
- | .byte 10 | ||
- | .globl _my_hg | ||
- | .align 2 | ||
- | _my_hg: | ||
- | .word 100 | ||
- | .globl _my_g | ||
- | .align 4 | ||
- | _my_g: | ||
- | .long 1000 | ||
- | .globl _my_lg | ||
- | .align 4 | ||
- | _my_lg: | ||
- | .long 10000 | ||
- | .globl _my_llg | ||
- | .align 8 | ||
- | _my_llg: | ||
- | .quad 100000 | ||
- | </code> | ||
- | <hidden> | ||
- | Variabilele apar în ordinea în care au fost definite, însă acest lucru nu e standard afaik. | ||
- | </hidden> | ||
- | ==== SASM ==== |