Differences

This shows you the differences between two versions of the page.

Link to this comparison view

iocla:cursuri:capitol-07:demo:01 [2016/11/21 12:03]
laura.vasilescu [NASM vs. GAS]
— (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 ==== 
- 
-Pentru început să ne uităm la un program simplu care se termină cu codul 2, pentru a putea observa structura generală a sintaxei. 
-^ NASM ^ GAS ^ 
-| <code asm> ​ 
-; Text segment begins 
-section .text 
-   ​global _start 
- 
-; Program entry point 
-_start: 
-   ; Put the code number for system call 
-   ​mov ​  eax, 1  
-   ; Return value  
-   ​mov ​  ebx, 2 
-   ; Call the OS 
-   ​int ​  80h 
-</​code>​ | <code asm> ​ 
-# Text segment begins 
-.section .text 
-   ​.globl _start 
- 
-# Program entry point 
-_start: 
-   # Put the code number for system call 
-   ​movl ​ $1, %eax 
-   /* Return value */ 
-   ​movl ​ $2, %ebx 
-   # Call the OS 
-   ​int ​  $0x80 
-</​code>​ | 
- 
-Principala diferență dintre NASM și GAS este sintaxa. GAS folosește sintaxa AT&T, o sintaxă arhaică specifică GAS și asambloarelor vechi, în timp ce NASM folosește sintaxa Intel, folosită de majoritatea asambloarelor cum ar fi TASM și MASM. Versiunile moderne de GAS suportă directia ''​.intel_syntax''​ ce permite folosirea unei sintaxe Intel cu GAS. 
- 
-Mai multe detalii [[https://​www.ibm.com/​developerworks/​library/​l-gas-nasm/​|aici]]. 
- 
-==== NASM ==== 
iocla/cursuri/capitol-07/demo/01.1479722582.txt.gz · Last modified: 2016/11/21 12:03 by laura.vasilescu
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0