26 0 95KB
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.