Sunteți pe pagina 1din 6

UNIVERSITATEA TEHNICĂ A MOLDOVEI

Facultatea: Calculatoare informatică Microelectronică

Referat
Disciplina:Arhitectura Calculatoarelor

Lucrare de laborator nr. 1

TEMA: Elaborare programelor în limbajul de


asamblare MASM în Visual Studio

A efectuat st. gr. TI-181 (FR)

A verificat

Chisinau 2021


Elaborare programelor în limbajul de asamblare MASM în Visual Studio

1.1 SCOPUL LUCRARII


Lucrarea urmărește familiarizarea studenților cu registrele microprocesoarelor de 16, 32 şi 64
biți, cu mediul de dezvoltare a programelor scrise pus la dispoziție de către produsul Visual
Studio al firmei Microsoft. Se prezinta setările mediului Visual Studio necesare pentru a crea,
rula şi depăna aplicaţii elaborate in limbaj de asamblare MASM utilizând registre pe 16, 32 şi 64
biţi.

Exemplu de program pe 16 biti


INCLUDE Irvine16.inc
.DATA
Promt DB 'Doresti sa devii programator?(da/nu)-[y/n]$'
Dad DB 13,10,'Vei deveni!',13,10,'$'
Nud DB 13,10,'Vei deveni filosof!',13,10,'$'
.CODE ;directivă ce declară începutul segmentului de cod
main PROC ;se indică procedura cu numele main
mov ax,@data ;Initializarea segmentului de date ds
mov ds,ax ;cu adresa datelor
mov dx,OFFSET Promt ;în dx- deplasamentul (offset) sirului Promt
mov ah,9 ;functia MSDOS, codul funcţiei 9 – afisarea sirului
Int 21h ; întreruperea 21h – apel la serviciul MSDOS
mov ah,1 ; functia MSDOS, codul funcţiei 1 – introducerea de la tastatură(codul tastei)
Int 21h ;codul tastei in registrul al
cmp al,'y' ;compararea conţinutului registrului al cu codul ASCII a literei y
jz IsDad ;salt condiţionat (jz-jump if zero), dacă rezultatul comparării este zero, salt la
eticheta IsDad
cmp al,'n' ;compararea- din al se scade codul ASCII a literei n
jz IsNud ;compararea- din al se scade codul ASCII a literei n
IsDad: mov dx,OFFSET Dad ; în dx- offsetul sirului Dad
Jmp SHORT Disp ; Salt necondiţionat la eticheta ”Disp”
IsNud: mov dx,OFFSET Nud ; în dx- offsetul șirului ”Nud”
Disp: mov ah,9 ;functia MSDOS – afisarea sirului
Int 21h ;apel la serviciul MSDOS
mov ah,1 ; asteptarea unui clic
Int 21h
Exit ; apel la procedura de iesirea din program, din fisierul
main ENDP ; sfârşitul procedurii main
END main ;finalizarea programului/ punctul de intrare in program

Exemplu de program pe 32 biţi:


INCLUDE Irvine32.inc
.data
Promt DB 'Doresti sa devii programator?(da/nu)-[y/n]',0
Dad DB 13,10,'Vei deveni!',13,10,0
Nud DB 13,10,'Vei deveni filosof!',13,10,0
.code
main PROC

mov edx,OFFSET Promt


call WriteString
call ReadChar

cmp al,'y'
jz IsDad
cmp al,'n'
jz IsNud

IsDad: mov edx,OFFSET Dad


call WriteString
jmp ex
IsNud: mov edx,OFFSET Nud
call WriteString

ex:
exit
main ENDP
END main

Microsoft (R) Macro Assembler Version 12.00.31101. 03/18/15 11:15:4


Source.as Page 1 -

INCLUDE Irvine32.in
C ; Include file for Irvine32.lib
(Irvine32.inc
C
C ;OPTION CASEMAP:NON ; optional: make identi-
fiers case-sensitiv
C
C INCLUDE SmallWin.in ; MS-Windows prototypes,
structures, and constant
C .NOLIS
C .LIS
C
C INCLUDE VirtualKeys.in
C ; VirtualKeys.in
C .NOLIS
C .LIS
C
C
C .NOLIS
C .LIS
C
0000000 .dat
00000000 44 6F 72 65 7 Promt DB 'Doresti sa devii programator?(da/nu)-[y/n]',
74 69 20 73 6
20 64 65 76 6
69 20 70 72 6
67 72 61 6D 6
74 6F 72 3F 2
64 61 2F 6E 7
29 2D 5B 79 2
6E 5D 0
0000002B 0D 0A 56 65 6 Dad DB 13,10,'Vei deveni!',13,10,
20 64 65 76 6
6E 69 21 0D 0
0
0000003B 0D 0A 56 65 6 Nud DB 13,10,'Vei deveni filosof!',13,10,
20 64 65 76 6
6E 69 20 66 6
6C 6F 73 6F 6
21 0D 0A 0
0000000 .cod
0000000 main PRO

00000000 BA 00000000 mov edx,OFFSET Promt


00000005 E8 00000000 call WriteStrin
0000000A E8 00000000 call ReadCha

0000000F 3C 7 cmp al,'y'


00000011 74 0 jz IsDa
00000013 3C 6 cmp al,'n'
00000015 74 0 jz IsNud

00000017 BA 0000002B IsDad: mov edx,OFFSET Dad


0000001C E8 00000000 call WriteStrin
00000021 EB 0 jmp e
00000023 BA 0000003B IsNud: mov edx,OFFSET Nud
00000028 E8 00000000 call WriteStrin

0000002 ex
0
0
0
D
m
0

9
4
E
C
A
0

3
9
9
R
E
E
R
E
R
E
s

E
c
c

0
1

exi
0000002D 6A 0 push +000000000
0000002F E8 00000000 E call ExitProces
0000003 main END
END mai
_Microsoft (R) Macro Assembler Version 12.00.31101. 03/18/15 11:15:4
Source.as Symbols 2 -

4
m
0
*
*
n

0
s

pe 64 biţi:
; AddTwoSum_64.asm - Ch3 example.

ExitProcess proto

.data
sum qword 0

.code
main proc
mov rax,5
add rax,6
mov sum,rax

mov ecx,0
call ExitProcess

main endp
end

Concluzie:
În aceasta lucrare am învățat instrucțiunile de bază ale limbajul de programare MASM în VS, a
fost realizat scopul de scriere a programelor in MASM pe 16, 32 și 64 de biți, după care sa anal-
izat offseturile și verificat logica de lucru a asemblerului.

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