This shows you the differences between two versions of the page.
|
iocla:cursuri:capitol-07:demo:01 [2016/11/21 11:48] 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> | ||
| - | |||
| - | <note> | ||
| - | Observați că sintaxa este asemănătoare, dar diferită față de ce ați folosit până acum în laborator. | ||
| - | </note> | ||
| - | |||
| - | ==== NASM vs. GAS ==== | ||
| - | ==== NASM ==== | ||