Sunteți pe pagina 1din 5

Ministerul Educației al Republicii Moldova

Universitatea Tehnică a Moldovei

Facultatea Calculatoare, Informatică și Microelectronică

Departamentul Ingineria Software și Automatică

Raport
Lucrarea de laborator nr. 2
Disciplina: Arhitectura Calculatoarelor

A efectuat: st. gr. TI-154


Cebanu Andrei

A verificat: lect. univ. Colesnic V.

Chișinău – 2017
Tema: „Elaborarea programelor în limbajul de asamblare MASM în Visual Studio”

Scopul lucrării: Se prezintă problemele pincipale legate de conversii de date, reprezentarea datelor
întregi, reprezentarea întregilor în format BCD, reprezentarea caracterelor și a șirurilor de caractere,
reprezentarea valorilor reale, elemente de memorie, tipuri de date utilizate și modurile de adresare a
operanzilor.

1.1. Se cere obținerea fișierului executabil pentru următoarea porțiune de cod și rularea apoi pas
cu pas.
2. INCLUDE Irvine32.inc
3. C ; Include file for Irvine32.lib (Irvine32.inc)
4. C
5. C ;OPTION CASEMAP:NONE ; optional: make identifiers
case-sensitive
6. C
7. C INCLUDE SmallWin.inc ; MS-Windows prototypes,
structures, and constants
8. C .NOLIST
9. C .LIST
10. C
11. C INCLUDE VirtualKeys.inc
12. C ; VirtualKeys.inc
13. C .NOLIST
14. C .LIST
15. C
16. C
17. C .NOLIST
18. C .LIST
19. C
20. 00000000 .data
21. 00000000 00000003 [ alfa DW 3 DUP(?)
22. 0000
23. ]
24. 00000000 .code
25. 00000000 main proc
26. 00000000 66| B8 0011 mov ax,17 ;
adresare indirecta a operandului sursa
27. 00000004 66| B8 0015 mov ax,10101b ;
28. 00000008 66| B8 0003 mov ax,11b ;
29. 0000000C 66| B8 0011 mov ax,21o ;
30. 00000010 66| A3 mov alfa,ax ; Adresare
directa a operandului destinatie
31. 00000000 R
32. 00000016 66| 8B C8 mov cx,ax ;
Interschimba registrele ax si bx
33. 00000019 66| 8B C3 mov ax,bx ;
Folosind registrul cx
34. 0000001C 66| 8B C1 mov ax,cx ;
35. 0000001F 66| 93 xchg ax,bx ;
Interschimba direct cele 2 registre.
36. 00000021 66| BE 0002 mov si,2
37. 00000025 66| 89 04 35 mov alfa[si],ax ; Adresare
relativa cu registrul si
38. 00000000 R
39. 0000002D BE 00000002 mov esi,2
40. 00000032 BB 00000000 R mov ebx,offset alfa ; Adresare
imediata a operandului sursa
41. 00000037 8D 1D 00000000 R lea ebx,alfa ;
Acelasi efect
42. 0000003D 8B 0C 1E mov ecx,[ebx][esi] ; Adresare
bazata indexata a sursei
43. 00000040 66| 8B 0D mov cx,alfa[2] ;
Acelasi efect.
44. 00000002 R
45. 00000047 66| 8B 0D mov cx,[alfa+2] ; Acelasi
efect
46. 00000002 R
47. 0000004E 66| BF 0004 mov di,4
48. 00000052 C6 04 1F 55 mov byte ptr[ebx][edi],55h ;
49. 00000056 BE 00000002 mov esi,2
50. 0000005B BB 00000003 mov ebx,3
51. 00000060 66| C7 84 1E mov alfa[ebx][esi],33h ; Adresare
bazata indexata relativa a destinatiei
52. 00000000 R
53. 0033
54. 0000006A 66| C7 84 1E mov alfa[ebx+esi],33h ; Notatii
echivalente
55. 00000000 R
56. 0033
57. 00000074 66| C7 84 1E mov [alfa+ebx+esi],33h
58. 00000000 R
59. 0033
60. 0000007E 66| C7 84 1E mov [ebx][esi]+alfa,33h
61. 00000000 R
62. 0033
63. exit
64. 00000088 6A 00 * push +000000000h
65. 0000008A E8 00000000 E * call ExitProcess
66. 0000008F main ENDP
67. END main

1.2. Să se calculeze expresia aritmetică: e = ((a+b*c-d)/f+g*h)/i. Se cere obținerea fișierului


executabil și rularea apoi pas cu pas
INCLUDE Irvine32.inc
C ; Include file for Irvine32.lib (Irvine32.inc)
C
C ;OPTION CASEMAP:NONE ; optional: make identifiers
case-sensitive
C
C INCLUDE SmallWin.inc ; MS-Windows prototypes,
structures, and constants
C .NOLIST
C .LIST
C
C INCLUDE VirtualKeys.inc
C ; VirtualKeys.inc
C .NOLIST
C .LIST
C
C
C .NOLIST
C .LIST
C
00000000 .data
00000000 0005 a dw 5
00000002 06 b db 6
00000003 0A cd db 10
00000004 0005 d dw 5
00000006 0006 f dw 6
00000008 0A g db 10
00000009 0B h db 11
0000000A 0A i db 10
0000000B 0000 interm dw ?
0000000D 00 rez db ?
00000000 .code
00000000 main proc
00000000 B8 00000000 mov eax, 0
00000005 A0 00000002 R mov al, b
0000000A F6 2D 00000003 R imul cd
00000010 66| 03 05 add ax, a
00000000 R
00000017 66| 2B 05 sub ax, d
00000004 R
0000001E 66| 99 cwd
00000020 66| F7 3D idiv f
00000006 R
00000027 66| A3 mov interm, ax
0000000B R
0000002D A0 00000008 R mov al, g
00000032 F6 2D 00000009 R imul h
00000038 66| 03 05 add ax, interm
0000000B R
0000003F F6 3D 0000000A R idiv i
00000045 A2 0000000D R mov rez, al
exit
0000004A 6A 00 * push +000000000h
0000004C E8 00000000 E * call ExitProcess
00000051 main ENDP
END main

2. Să se calculeze expresia: z = (3+(c*c))/(6-(b*b))+((a*a-b*b)/(a*a+c*c))


INCLUDE Irvine32.inc
.data
a dw 2
b dw 2
cd dw 5
a2 dw ?
b2 dw ?
c2 dw ?
aux1 dw ?
aux2 dw ?
rez dw ?
.code
main proc
mov eax, 0
mov ax, a ; ax =
a
imul a ; ax =
a*a
mov a2, ax ; a2 =
a*a
mov ax, b ; ax =
b
imul b ; ax =
b*b
mov b2, ax ; b2 =
b*b
mov ax, cd ; ax =
cd
imul cd ; ax = c*c
mov c2, ax ; c2 = c*c
mov ax, 6 ; ax = 6
sub ax, b2 ; ax = 6-(b*b)
mov aux1, ax ; aux1 = 6-(b*b)
mov ax, 3 ; ax = 3
add ax, c2 ; ax = 3+(c*c)
idiv aux1 ; ax = (3+(c*c))/(6-(b*b))
mov aux1, ax ; aux1 = (3+(c*c))/(6-(b*b))
mov ax, a2 ; ax = a*a
add ax, c2 ; ax = a*a+c*c
mov aux2, ax ; aux2 = a*a+c*c
mov ax, a2 ; ax = a*a
sub ax, b2 ; ax = a*a-b*b
idiv aux2 ; (a*a-b*b)/(a*a+c*c)
add ax, aux1 ; ax = (3+(c*c))/(6-(b*b))+((a*a-b*b)/(a*a+c*c))
mov rez, ax ; rez = (3+(c*c))/(6-(b*b))+((a*a-b*b)/(a*a+c*c))
exit
main ENDP
END main

Concluzie:
În urma efectuării lucrării de laborator, am elaborat programe în limbajul de asamblare
MASM. Primul program reprezintă moduri de reprezentare a numerelor în diferite moduri. Al doilea
program este un exemplu de elaborare unei expresii aritmetice folosind funcții standard ale
limbajului de asamblare. Al treilea program este un lucru individual, de asemena pe elaborarea unei
expresii aritmetice.

S-ar putea să vă placă și