Sunteți pe pagina 1din 5

Ministerul Educaţiei al Republicii Moldova

Universitatea Tehnică a Moldovei

Catedra Automatică şi Tehnologii Informaţionale

Raport
Lucrare de laborator Nr.5
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:
Se prezinta probleme legate de prelucrarea in limbaj de asamblare a șirurilor. Pentru aceasta se
recomanda utilizarea instrucțiunilor speciale pentru tratarea șirurilor. Se prezinta de asemenea tehnici
specifice limbajului de asamblare pentru realizarea conversiilor de coduri, bazate pe utilizarea tabelelor
de conversie.

Varianta propusă:
3. Se considera trei masive sir1, sir2, sir3 fiecare șir de caractere reprezentând o linie de text. Sa
se plaseze textele din aceste șiruri în sir4, astfel încât în textul rezultat. Afișati pe ecran toate șirurile.

Codul sursă:
INCLUDE Irvine32.inc
.data
sir1 Byte "aa aa a a",0
sir2 Byte "bb bb bbb b",0
sir3 Byte "c cc c c",0
sir4 Byte 20 dup (?)
.code

start proc ;procedura care copie cele 3 siruri in sirul4


mov al, [esi]
mov [edi],al
inc esi
inc edi
loop start
RET
START ENDP

main PROC ;programul principal


mov edx, offset sir1
call Writestring ;afisarea sir1
call Crlf; rind nou
mov edx, offset sir2
call Writestring ;afisarea sir2
call Crlf; rind nou
mov edx, offset sir3
call Writestring ;afisarea sir3
call Crlf; rind nou
;transferul din sir1 in sir 4
lea esi, sir1 ; de unde copiem
lea edi, sir4 ;unde copiem
mov ecx,sizeof sir1 ;dimensiunea
call start
;transferul din sir2 in sir 4
lea esi, sir2 ; de unde copiem

mov ecx,sizeof sir2 ;dimensiunea


mov edi,offset[sir4]+9 ;unde copiem
CALL start
;transferul din sir3 in sir 4
lea esi, sir3 ; de unde copiem
mov ecx,sizeof sir3 ;dimensiunea
mov edi,offset[sir4]+20 ;unde copiem
CALL start
mov edi, offset sir4
call caut

schimb proc ;procedura care schimba spatiu pe linie


mov al, "_"
mov [edi]-1,al
inc edi
jmp caut
schimb endp

caut proc ;procedura ce cauta spatii


mov al, " "
mov ecx, lengthof sir4
cld
repne scasb
jz schimb
caut endp
;afisarea sir4
mov edx, offset sir4
call Writestring ;afisarea sir4
call Crlf; rind nou
exit
main ENDP
END main

Fișierul -listing:
Microsoft (R) Macro Assembler Version 10.00.30319.01 11/16/15 09:59:22
lab5.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 61 61 20 61 61 sir1 Byte "aa aa a a",0
20 61 20 61 00
0000000A 62 62 20 62 62 sir2 Byte "bb bb bbb b",0
20 62 62 62 20
62 00
00000016 63 20 63 63 20 sir3 Byte "c cc c c",0
63 20 63 00
0000001F 00000014 [ sir4 Byte 20 dup (?)
00
]
00000000 .code

00000000 start proc ;procedura care copie cele 3 siruri in sirul4


00000000 8A 06 mov al, [esi]
00000002 88 07 mov [edi],al
00000004 46 inc esi
00000005 47 inc edi
00000006 E2 F8 loop start
00000008 C3 RET
00000009 START ENDP

00000009 main PROC ;programul principal


00000009 BA 00000000 R mov edx, offset sir1
0000000E E8 00000000 E call Writestring ;afisarea sir1
00000013 E8 00000000 E call Crlf; rind nou
00000018 BA 0000000A R mov edx, offset sir2
0000001D E8 00000000 E call Writestring ;afisarea sir2
00000022 E8 00000000 E call Crlf; rind nou
00000027 BA 00000016 R mov edx, offset sir3
0000002C E8 00000000 E call Writestring ;afisarea sir3
00000031 E8 00000000 E call Crlf; rind nou
;transferul din sir1
in sir 4
00000036 8D 35 00000000 R lea esi, sir1 ; de unde copiem
0000003C 8D 3D 0000001F R lea edi, sir4 ;unde copiem
00000042 B9 0000000A mov ecx,sizeof sir1 ;dimensiunea
00000047 E8 FFFFFFB4 call start
;transferul din sir2 in sir 4
0000004C 8D 35 0000000A R lea esi, sir2 ; de unde copiem
00000052 B9 0000000C mov ecx,sizeof sir2 ;dimensiunea
00000057 BF 00000028 R mov edi,offset[sir4]+9 ;unde copiem
0000005C E8 FFFFFF9F CALL start






















;transferul din sir3 in sir 4


00000061 8D 35 00000016 R lea esi, sir3 ; de unde copiem
00000067 B9 00000009 mov ecx,sizeof sir3 ;dimensiunea
0000006C BF 00000033 R mov edi,offset[sir4]+20 ;unde copiem
00000071 E8 FFFFFF8A CALL start
00000076 BF 0000001F R mov edi, offset sir4
0000007B E8 00000008 call caut

00000080 schimb proc ;procedura care schimba spatiu pe linie


00000080 B0 5F mov al, "_"
00000082 88 47 FF mov [edi]-1,al
00000085 47 inc edi
00000086 EB 00 jmp caut
00000088 schimb endp

00000088 caut proc ;procedura ce cauta spatii


00000088 B0 20 mov al, " "
0000008A B9 00000014 mov ecx, lengthof sir4
0000008F FC cld
00000090 F2/ AE repne scasb
00000092 74 EC jz schimb
00000094 caut endp
;afisarea sir4
00000094 BA 0000001F R mov edx, offset sir4
00000099 E8 00000000 E call Writestring ;afisarea sir4
0000009E E8 00000000 E call Crlf; rind nou
exit
000000AA main ENDP
END main
Microsoft (R) Macro Assembler Version 10.00.30319.01 11/16/15 09:59:22
lab5.asm Symbols 2 - 1

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


legate de prelucrarea în limbaj de asamblare a șirurilor, de asemenea tehnici specifice
limbajului de asamblare pentru realizarea conversiilor de coduri, bazate pe utilizarea
tabelelor de conversie. Am creat, rulat şi depănat aplicaţia propusă în limbaj de
asamblare MASM, am inclus în raportr ezultatele obținute.

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