Sunteți pe pagina 1din 8

Ministerul Educaţiei al Republicii Moldova

Universitatea Tehnică a Moldovei


Catedra Automatică şi Tehnologii Informaţionale

Raport
Lucrare de laborator Nr.3
Disciplina: Arhitectura calculatoarelor
Tema: Elaborare programelor în limbajul de asamblare MASM în Visual Studio

A efectuat : studentul grupei TI-181 F/R

A verificat:

Chişinău 2021

SCOPUL LUCRARII:
Lucrarea prezinta instructiunile pentru transferuri de date, instructiuni in aritmetica binara si
in aritmetica BCD.

Varianta propusă:
3. Z = { 2(Y - 120) - X, dacă Y > X/
X/4 - 95 + Y, dacă Y <= X/2}

Codul sursă comentat:


● Introducere automată (Random32, RandomRange)

INCLUDE Irvine32.inc
.data

mes3 byte "Rezutatul este:",0


vrx dword 0
vry dword 0
rez dd 0
.code
main PROC
call Random32 ;crearea lui X
mov vrx, eax
call RandomRange ;crearea lui Y
mov vry, eax
;verificam conditiile
;controlam conditiile
xor eax,eax
mov edx,0

mov eax,vrx
mov bx,2
Div bx ; calcul X/2
cmp vry,eax ;compararea Y cu 2/X
Jc con1 ; salt la con1, daca Y>2X

mov eax,vrx ;realizam expresia 2X-64+Y


mov bx,2
mul bx
sub eax,64
Add eax,vry
mov rez,eax
jmp ex ; salt neconditionat la ex

con1: ;realizam expresia 2*(Y-120)-X


mov eax,vrx ;
mov ebx, 120;
Sub eax, ebx;
Mov ebx, 2;
Mul ebx ;
Add eax, vrx;
sub eax,vry
mov rez,eax

ex: mov edx,OFFSET mes3


call WriteString ; afisarea mesajului mes3
call WriteInt ; afisarea rezultatului cu semn
call Crlf ; din rand nou

exit
main ENDP

● Introducere manuală
INCLUDE Irvine32.inc
.data
mes1 byte "Introduceti valoarea X:",0
mes2 byte "Introduceti valoarea Y:",0
mes3 byte "Rezutatul este:",0
vrx dword 0
vry dword 0
rez dd 0

.code
main PROC
mov edx,OFFSET mes1
call WriteString ; afisarea mes1
call ReadDec ; introducerea de la tastatura
mov vrx,eax ; salvarea valorii in variabila vrx

mov edx,OFFSET mes2


call WriteString ; afisarea mes2
call ReadDec ; introducerea de la tastatura
mov vry,eax ; salvarea valorii in variabila vry

;controlam conditiile
xor eax,eax
mov edx,0

mov eax,vrx
mov bx,2
Div bx ; calcul X/2
cmp vry,eax ;compararea Y cu 2/X
Jc con1 ; salt la con1, daca Y>2X

mov eax,vrx ;realizam expresia 2X-64+Y


mov bx,2
mul bx
sub eax,64
Add eax,vry
mov rez,eax
jmp ex ; salt neconditionat la ex

con1: ;realizam expresia 2*(Y-120)-X


mov eax,vrx ;
mov ebx, 120;
Sub eax, ebx;
Mov ebx, 2;
Mul ebx ;
Add eax, vrx;


sub eax,vry
mov rez,eax

ex: mov edx,OFFSET mes3


call WriteString ; afisarea mesajului mes3
call WriteInt ; afisarea rezultatului cu semn
call Crlf ; din rand nou

exit
main ENDP

Fișierele -listing:

● Introducere automată (Random32, RandomRange)

Microsoft (R) Macro Assembler Version 10.00.30319.01 10/28/15 13:29:10


lab3 auto.asm Page 1 - 1

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 52 65 7A 75 6C mes3 byte "Rezultatul este:", 0
74 61 74 75 6C
20 65 73 74 65
3A 00
00000011 00000000 vrx dword 0
00000015 00000000 vry dword 0























00000019 00000000 rez dword 0


00000000 .code
00000000 main PROC
00000000 E8 00000000 E call Random32 ;crearea lui X
00000005 A3 00000011 R mov vrx, eax
0000000A E8 00000000 E call RandomRange ;crearea lui Y
0000000F A3 00000015 R mov vry, eax
;verificam conditiile
00000014 A1 00000011 R mov eax,vrx
00000019 83 C0 64 add eax, 100 ;conform conditiei X+100
0000001C 3B 05 00000015 R cmp eax, vry ;comparam Y cu X+100
00000022 72 1A jc con1 ;salt dac Y>X+100

00000024 A1 00000015 R mov eax, vry


00000029 99 CDQ
;realizam expresia Y/X-91
0000002A F7 3D 00000011 R idiv vrx ;Y/X

00000030 BB 0000005B mov ebx, 91


00000035 2B C3 sub eax, ebx ;Y/X-91
00000037 A3 00000019 R mov rez, eax
0000003C EB 29 jmp ex; salt neconditionat la ex

0000003E con1: ;realizam expresia 2*(Y-4*X)+Y


0000003E A1 00000011 R mov eax, vrx
00000043 BB 00000004 mov ebx, 4
00000048 F7 E3 mul ebx ;4*X
0000004A 8B 1D 00000015 R mov ebx, vry
00000050 93 xchg eax,ebx ;interschimbam registrele eax si ebx
00000051 2B C3 sub eax, ebx
00000053 BB 00000002 mov ebx,2
00000058 F7 E3 mul ebx
0000005A 03 05 00000015 R add eax, vry ;2*(Y-4*X)+Y
00000060 A3 00000019 R mov rez, eax
00000065 EB 00 jmp ex

00000067 ex:
00000067 BA 00000000 R mov edx,OFFSET mes3
0000006C E8 00000000 E call WriteString; afisarea mes3
00000071 A1 00000019 R mov eax, rez
00000076 E8 00000000 E call WriteInt ;afisarea rezultatului cu semn
0000007B E8 00000000 E call Crlf; din rind nou
exit
00000087 main ENDP
END main
Microsoft (R) Macro Assembler Version 10.00.30319.01 10/28/15 13:29:10
lab3 auto.asm Symbols 2 - 1













































































● Introducere manuală
Microsoft (R) Macro Assembler Version 10.00.30319.01 10/28/15 13:21:19
lab3.asm Page 1 - 1

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 49 6E 74 72 6F mes1 byte"Introduceti valoarea X:", 0
64 75 63 65 74
69 20 76 61 6C
6F 61 72 65 61
20 58 3A 00
00000018 49 6E 74 72 6F mes2 byte"Introduceti valoarea Y:", 0
64 75 63 65 74
69 20 76 61 6C
6F 61 72 65 61
20 59 3A 00
00000030 52 65 7A 75 6C mes3 byte "Rezultatul este:", 0
74 61 74 75 6C
20 65 73 74 65
3A 00
00000041 00000000 vrx dword 0
00000045 00000000 vry dword 0
00000049 00000000 rez dword 0
00000000 .code
00000000 main PROC
00000000 BA 00000000 R mov edx, OFFSET mes1



















































00000005 E8 00000000 E call WriteString ;afisarea mes1


0000000A E8 00000000 E call ReadDec ;introducerea de la tastatura
0000000F A3 00000041 R mov vrx,eax ;salvarea valorilor in variavila vrx
00000014 BA 00000018 R mov edx, OFFSET mes2
00000019 E8 00000000 E call WriteString ;afisarea mes2
0000001E E8 00000000 E call ReadDec ;introducerea de la tastatura
00000023 A3 00000045 R mov vry,eax ;salvarea valorilor in variavila vry
;verificam conditiile
00000028 A1 00000041 R mov eax,vrx
0000002D 83 C0 64 add eax, 100 ;conform conditiei X+100
00000030 3B 05 00000045 R cmp eax, vry ;comparam Y cu X+100
00000036 72 1A jc con1 ;salt dac Y>X+100

00000038 A1 00000045 R mov eax, vry


0000003D 99 CDQ
;realizam expresia Y/X-91
0000003E F7 3D 00000041 R idiv vrx ;Y/X

00000044 BB 0000005B mov ebx, 91


00000049 2B C3 sub eax, ebx ;Y/X-91
0000004B A3 00000049 R mov rez, eax
00000050 EB 29 jmp ex; salt neconditionat la ex

00000052 con1: ;realizam expresia 2*(Y-4*X)+Y


00000052 A1 00000041 R mov eax, vrx
00000057 BB 00000004 mov ebx, 4
0000005C F7 E3 mul ebx ;4*X
0000005E 8B 1D 00000045 R mov ebx, vry
00000064 93 xchg eax,ebx ;interschimbam registrele eax si ebx
00000065 2B C3 sub eax, ebx
00000067 BB 00000002 mov ebx,2
0000006C F7 E3 mul ebx
0000006E 03 05 00000045 R add eax, vry ;2*(Y-4*X)+Y
00000074 A3 00000049 R mov rez, eax
00000079 EB 00 jmp ex
0000007B ex:
0000007B BA 00000030 R mov edx,OFFSET mes3
00000080 E8 00000000 E call WriteString; afisarea mes3
00000085 A1 00000049 R mov eax, rez
0000008A E8 00000000 E call WriteInt ;afisarea rezultatului cu semn
0000008F E8 00000000 E call Crlf; din rind nou
exit
0000009B main ENDP
END main
Microsoft (R) Macro Assembler Version 10.00.30319.01 10/28/15 13:21:19
lab3.asm Symbols 2 - 1




Concluzii: Efectuînd această lucrare de laborator am facut cunoștință cu


instrucțiuni pentru transferuri de date, instructiuni în aritmetica binară și in
aritmetica BCD. Am creat, rulat şi depănat două aplicaţii propuse în limbaj de
asamblare MASM, am inclus în raportr ezultatele obținute.

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