Jump to content
cp/m

Hello World, ASM, Linux

Recommended Posts

Posted (edited)

In acest tutorial voi descrie formatul executabil ELF, comenzile folosite si un program care afiseaza stringul "Hello World!".

Formatul ELF

Spre deosebire de executabilele din MS DOS si bootloader-ul prezentat anterior, executabilele in Linux nu au variabilele si codul executabil la gramada, ci, ordonate existand mai multe categorii:

 
.data=reprezinta sectiunea in care se afla datele initializate
.bss=reprezinta sectiunea in care se afla datele neinitializate
.text=reprezinta sectiunea in care se afla partea executabila

Comenzile folosite:

 
mov a,b = muta b in a
add a,b = aduna a cu b si pune rezultatul in a
push a = adauga a in varful stivei
pop a = scoate elementul din vf stivei si il pune in a
int = Prostii pot sa-le considere ca niste functii predefinite. Cei mai curiosi sa viziteze http://en.wikipedia.org/wiki/Interrupt

Si acum programul:


section .text
global _start
_start:
mov eax,0x04 ; 0x04 = sys_write
mov ebx,0x01 ; filehandle=stdout
mov ecx,msg1 ; Adresa la care se afla stringul. Pentru continut, adaugati [ si ]
mov edx,0xD ; Lungimea stringului
int 0x80 ; Strigam intu 80 (kernelul)
mov eax,0x01 ; 0x01 = sys_exit
mov ebx,0x00 ; return 0
int 0x80 ; Strigam intu 80 (kernelul)
section .data
msg1: db 'Hello World!',10

Compilare si rulare:

 
nasm -f elf name.asm
ld -s -o name name.o
./name

Inca un exemplu, necomentat(arata numarul argumentelor, nr. argumentelor < 10)


section .text
global _start
_start:
pop eax
mov edi,eax
add edi,0x2F
mov [msg1],edi
mov eax,0x04
mov ebx,0x01
mov ecx,msg1
mov edx,0x2
int 0x80
mov eax,0x01
mov ebx,0x00
int 0x80
section .data
msg1: db 0

Edited by cp/m
Posted

Offtopic: First of all, de ce inveti ASM? Singurul lucru la care mai e bun este driver development-ul. Iar daca il inveti ca sa legi partea soft de partea hard (un robot sau alt produs electronic), invata C. Am vazut ca foarte multa lume dezvolta librarii pentru asta.

Ontopic: Cat despre tutorial, reinventing the wheel...

P.S. Torvalds cand era mic, s-a apucat de programare pentru ca nu se gaseau foarte multe jocuri. A facut primul joc in BASIC, si al 2-lea in cod masina, pentru ca nu ii spusese nimeni de ASM =))

Posted

nice. ASM pentru mine e lb chineza :)) notiunile de baza le stiu, si doar atat... nu am fost nevoit niciodata sa fac un program intreg in el... folosesc doar pentru a scrie functii in c++ pentru folosirea mouseului, video, etc...

Posted
cati oameni crezi ca stiu c ? si cati crezi ca stiu asm ? fa un raport si inmulteste salariul cu acel raport. atat va castiga cp/m daca continua pe partea de asm. cel ce stie asm e mult mai valoros (fiind mai rar de intalnit) decat unul care stie c.

Nu conteaza! C-ul are o mare arie de cuprindere: software (aplicatii desktop, jocuri, programare de sistem), algoritmica, virusologie, driver development. ASM a ramas bun doar la driver development, domeniu care nu ii este strain C/C++ului ;)

eJobs este cel mai mare site de recrutare online din Romania. Daca dam search dupa programator Assembly, vom vedea ca sunt doar 3 rezultate. Foarte putina lume mai face dezvoltare cu ASM. Singurele soft-uri sunt firmware.

Cat despre "Reinventing the wheel", eu sunt de acord cu tine. Dar doar ca sa exersezi, nu inteleg de ce trebuie sa postezi al 10000-lea tutorial de genul? Pastreaza pentru tine. Am inteles, reinvetarea rotii de mai multe ori duce la inovatie. Putem face roata mai rezistenta, mai rotunda, dar asta ti se pare ca asta face acest tutorial?

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



×
×
  • Create New...