dizzy Posted May 22, 2007 Report Posted May 22, 2007 Salutare voua cei insetati de asm. Asm e cel mai apropiat de sistem limbaj care exista (din cate stiu eu). Multora li se pare super complicat si de aia m-am gandit sa incep asa usor usor .. cu un tutorial ... si .. deocamdata ma gandesc sa fac si part 2 si 3 si etc ... dar sa vad ce timp am .. oricum .. here is part 1 i guess:Ce vom invata aici :- utilizarea unor functii DOS pentru afisarea pe ecran a unor mesaje;- evaluarea unor expresii aritmetice folosind operanzi intregi pe octet(byte) si pe cuvant (word) 1. Un program pentru afisarea unui mesaj pe ecran. a) format .EXE se va folosi functia de afisare pe ecran 40h functia scrie intr-un fisier sau pe un deviceParametrii (sa zicem asa) * BX = identificatorul fisierului * CX = numarul de octeti de scris * DS:DX -> textul (datele) 4C00h este functia de exit din programInt21h e intrerupere dos pentru executarea functiilor..MODEL SMALL (modelul de memorie folosit).STACK 100h (rezervam o stiva de 100h (256 in decimal).DATA (incepe zona de date)mesaj DB ‘Salut!’, 13, 10 (mesajul nostru terminat in crlf (13, 10)lmesaj EQU $-mesaj (lungimea mesajului).CODE (zona de cod)start: mov ax, @DATA mov ds, ax mov bx,1 mov cx, lmesaj mov dx, OFFSET mesaj mov ah, 40h int 21h mov ax, 4C00h int 21hEND startformat-ul COM este destul de diferit de EXE. el este in principiu o imagine a memoriei (un segment de memorie). format .COM_text SEGMENTORG 100hASSUME cs:_text, ds:_text, es:_text, ss:_textstart: jmp inceputmesaj DB ‘Salut!’, 13, 10lmesaj EQU $-mesaj inceput: mov bx,1 mov cx, lmesaj mov dx, OFFSET mesaj mov ah, 40h int 21h mov ax, 4C00h int 21h_text ENDSEND start2. Evaluare expresii:yy=x+y-24+zdata SEGMENT x DB -33 (se dau valorile, in decimal, octal si binar) y DB 14o z DB 110101b yy DB ?data ENDScod SEGMENTASSUME cs: cod, ds: data, ss:data start: mov ax, data mov ds,ax mov al,x add al,y (adaugare) sub al, 24 (scadere) add al, z (adaugare) mov yy, al mov ax, 4C00h int 21h cod ENDS END startIn acest ultim exemplu s-au folosit segmente de memorie (dupa cum se observa) . Ele trebuie inchise cu "<numesegment> ENDS". iar label-urile (start .. etc) trebuie inchise cu "END <numelabel>"dupa cum observati in toate se gaseste: mov ax, data mov ds,ax asta deoarece ds (data segment) trebuie sa pointeze spre zona de date Dupa cum vedeti nu este un tutorial mura in gura, las la latitudinea celor interesati sa citeasca despre ASSUME, despre MOV, ADD , SUB (sunt foarte usoare) si restul chestiilor care nu le-am prezentat. NU este un tutorial pentru incepatori in programare, este un tutorial pentru incepatori in ASM.Daca cineva vede ca am gresit ceva, il rog sa corecteze. Quote