A.C. Lab 1 Cerlat P. Faf192 [PDF]

  • 0 0 0
  • Gefällt Ihnen dieses papier und der download? Sie können Ihre eigene PDF-Datei in wenigen Minuten kostenlos online veröffentlichen! Anmelden
Datei wird geladen, bitte warten...
Zitiervorschau

Raport Arhitectura calcuatoarelor Laborator Numarul #1

La Tema: Elaborarea programelor în limbajul de asamblare MASM în Visual Studio

Creat de: Student FAF-192 - Cerlat Pavel Controlat: lec. Superior

- Postovan Dumitru

Tema: Dezvoltarea a programelor Visual Studio. Scopul: Familiarizarea studenților cu regiştrii microprocesoarelor pe 16, 32 şi 64 de biți. Codul 16 biti: INCLUDE Irvine16.inc .code main PROC mov mov mov add sub call

;Inceputul segmentului de cod. ;Procedura cu numele main. ;Initializarea segmentelor de date ds si es ;cu adresa primului byte de date -@data

ax,@data ds,ax eax,10000h eax,40000h eax,20000h DumpRegs

; EAX = 10000h ; EAX = 50000h ; EAX = 30000h

exit main ENDP END main

;Procedura de iesire din Irvine16.inc ;Terminarea procedurii main ;Punctul de terminare a programului

Codul 32 biti; INCLUDE Irvine32.inc .data a dw 5 b db 6 cd db 10 d dw 5 f dw 6

;valoarea ;valoarea ;valoarea ;valoarea ;valoarea

5 de marimea de 2 biti pentru a 6 de tipul bit pentru b 10 de tipul bit pentru cd 5 de marimea de 2 biti pentru d 6 de marimea de 2 biti pentru f

g db 10 h db 11 i db 10 interm dw ? rez db ? .code main proc mov eax,0 mov al, b imul cd add ax, a sub ax, d cwd

;valoarea 10 de tipul bit pentru g ;valoarea 11 de tipul bit pentru h ;valoarea 10 de tipul bit pentru i ;valoare de marimea 2 biti ;bit cu valoarea nealeasa

;registru eax mutam in valoarea 0 ;in registru al mutam b ; in ax avem b*c ; ax=b*c+a ; ax=b*c+a-d ; am convertit cuvantul din ax, in dublu cuvantul , retinut in dx:ax

idiv f mov interm, ax mov al, g imul h add ax, interm idiv i mov rez, al exit main ENDP END main

; obtinem câtul în ax ; interm=(a+b*c-d)/f

si restul în dx ax=(a+b*c-d)/f

; ax=g*h ; ax=(a+b*c-d)/f+g*h ; se obtine catul în al si restul în ah

;Procedura de iesire din Irvine16.inc ;Terminarea procedurii main ;Punctul de terminare a programului

Codul 64 biti; ExitProcess proto .data sum qword 0 .code main PROC mov add mov mov call main endp end

rax,5 rax,6 sum,rax ecx,0 ExitProcess

;Inceputul segmentului de cod. ;Procedura cu numele main. ;in registru rax se include valoarea 6 ;adaugarea 6 la valoarea din registru rax ;includera in sum valorii din registru rax ;includerea in registru ecx valorii 0 ; chemarea procedurii ExitProcess ; Terminarea procedurii main ; Punctul de terminare a programului

Listing la codul 64 biti ExitProcess proto 00000000 00000000

.data sum qword 0

;directiva ce arata inceputul segmentului de cod

0000000000000000 00000000 00000000 00000000

48/ C7 C0 00000005 00000007 48/ 83 C0 06 0000000B 48/ 89 05 00000000 R 00000012 00000017 0000001C

B9 00000000 E8 00000000 E

.code main proc mov rax,5 add mov

; procedura main ; in registru rax se include valoarea 6

rax,6 ; adaugarea 6 la valoarea din registru rax sum,rax ; includera in sum valorii din registru rax

mov ecx,0 call ExitProcess main endp end

; ; ; ;

includerea in registru ecx valorii 0 chemarea procedurii ExitProcess Terminarea procedurii main Punctul de terminare a programului

Register la debug codulu de 64 biti;

Concluzie: In laboratorul dat am invatsat despre lucrul limbazjului assembler. Au fost cercetate unele registre, precum si carateristicile de lucru cu registrele. Programarea în limbaj de asamblare presupune o bună cunoaștere a structurii procesorului și a componentelor sale adiacente. De obicei limbajele de asamblare oferă și posibilitatea alcătuirii de așa numite macrouri, după necesitățile programului.