Of Assembler

800px-Usenix84_1Azi, dupa multă muncă și chin, fara să știu nici un registru – doar cu o vagă idee, am scris primul meu programel pentru 8086, nu sunt sigur, dar poate merge și pe 8080. Am compilat cu NASM, și apoi cu linkerul ld din linux am reușit să execut.

Mare bataie de cap până am afișat un mesaj, iar până la urmă nu am reușit ( în 2 ore ) să fac o funcție care să determine lungimea unui șir de caractere.

Iată codul meu care poate și compilat cu NASM, și care afișează Mesaj 1 și Mesaj 2 pe monitor.

global _start            ; global entry point export for ld

section .text
_start:
	mov edx,len1
	mov ecx, sir1
	call _concat

	mov edx, len1
	mov ecx, sir2
	call _concat

	;Exit normal
	mov ebx,0
	mov eax,1
	int 0x80

_concat:
	mov ebx, 1
	mov eax, 4
	int 0x80
	ret

section .data
    sir1: 	 db 'Mesaj 1',10,13
    sir2: 	 db 'Mesaj 2',10,13
    len1: equ $-sir2           ; NASM definition pseudo-instruction

Iar pentru ca să compilez, fac link și execut rapid mi-am facut acest mic script în BASH:

#!/bin/bash
nasm -f elf $1
ld -m elf_i386 -o $2 $2.o
./$2

Cu asta vroiam să spun că abia acum încep să înțeleg cât de important e aportul lui Dennis Ritchie în programare. De ar ști clienții sau utilizatorii de dispozitive ( laptopuri, tablete, telefoane ) câte operații se întămplă acolo, și câtă lumea a muncit pentru asta. Mie uneori îmi pare prea dezvoltat tot ce aveam, și chiar mă gândeam ( nu știu de ce ) că trebuie să am dispozitive cu putere de calcul mică.

Și dacă ar ști clienții cîtă programare trebuie să înveți și cîtă muncă trebuie să faci pentru a îndeplini tot ce vor ei, poate atunci ar întelege că prețurile din IT nu’s deloc mari, mai ales în zilele noastre.

Dacă sincer, primul meu program în Assembler  ( înafară de Hello World copiat de pe internet ) l-am făcut la tablă la o lecție de practică, spre sfârșit așa de tare mă pierdusem în adrese, în mutări și scoateri de pe stack încât aveam impresia că mă aflu într-o lume paralele iar toți ( cei care nu’s din IT ) trăiesc o altă viață.

PS: Nu am idee de ce am numit procedura concat dar nu print.

8 thoughts on “Of Assembler

  1. Da voi inca nu ati avut cursul Arhitectura Calculatorului?

    Adica noi anul trecut am avut obiectula cesta si am facut cite ceva in assambler doar ca pe registre de 16 biti, dar totusi intr-adevar un pic de assambler te face sa intzelegi cu adevarat cit e de complicat totul.

    • Noi anul acesta avem doar programarea concurenta la nivel inalt. In rest toate obiectele legate de asembler, Sisteme de operare si limbaje de asamblare, Echipamente Periferice, Structura calculatorului – la un obiect programam pentru arhitectura 8080, la EP – pentru 8086 folosim sistemul de operare DOS, si la SOLA – incepem cu 8086 si din cate am inteles o sa ajungem la i386.

  2. Super tare, noi nici pe aproape nu am studiat atit de profund.
    Pare interesant, dar din pacate noi cred ca mergem deja pe cursuri diferite. Cu toate ca avem si noi anul acesta un obiect care necesita programarea in assambler dar e doar unul in comparatie cu specialitatea voastra.

    • Iar noi credem ca la voi e mai interesant. In general in ASM este foarte putin productiv, chiar si programatorii avansati nu cred ca sunt foarte productivi in ASM.

      Consider ca ASM e bine de stiut, dar pana la urma vom utilza compilatoare de nivel inalt. Viata e prea scurta, si nu degeaba sau chinuit in trecut oameni ca sa scrie limbaje.

  3. ASM e suportabil cînd încă dispui de intreruperile OS, cînd treci pe BIOS devine un coșmar adevarat. 😀 Petrecut nopți nedormite asupra laboratoarelor la asm cînd am avut cursul de proiectare OS.

  4. nu, pe 8080 nu va merge, 8080 e 8bit si are cu totul alt set de registri si comenzi.
    de exemplu, NOP pe 8086 e 0x90 (xchg ax,ax daca nu ma insel), pe 8088 e 0x00 si e comanda absolut aparte fara echivalent.

    cu 8086 e compatibil 8088, care are aceeasi arhitectura interna ca si 8086.

    da 8080 seamana cu z80 (adica, de fapt, invers: z80 seamana cu 8080, pentru ca de fapt z80 e improvement peste 8080 plus ceva extensii de registri si comenzi).
    am programat pe z80 vreo trei ani prin 88-90, unele opcoduri si azi le mai tin minte pe de rost. 🙂

  5. da pe aestea pentium4 apu nopuri sint de care vrei si de ce lungime vrei – de la 1 byte pana la 8. si unele is pur si simplu nopuri folosite pentru alignment, altele se folosesc ca hints pentru conveer… karoce nebuneala mare. 🙂

Lasă un răspuns

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *

Acest site folosește Akismet pentru a reduce spamul. Află cum sunt procesate datele comentariilor tale.