Sunteți pe pagina 1din 9

Ministerul Educatiei si Cercetarii al Republicii Moldova

Lucarea de laborator nr:5


Catedra: Calculatoare
Disciplina:Limbaje de asamblare

A elaborat:Lazariuc Vladislav
Gr.C-0119
A verificat:Ciurari Marcela

Chisinau 2023
Tema:
Utilizarea instrucţiunilor logice NOT, AND, OR, XOR.

Scopul lucrării: Familiarizarea elevilor cu instrucţiunile


logice şi utilizarea lor în
cadrul programelor scrise în limbaj de asamblare

Repere teoretice:
Instrucţiunile logice sunt destinate pentru a efectuat operaţiile definite
în
algebra booleană cum a fi negarea logică (inversarea NOT), înmulţirea
logică ŞI
(AND, & sau ∙) adunarea logică SAU (OR, +) şi operaţie specifică
algebrei
booleene: echivalenţă SAU-Exclusiv (XOR, +). Operaţiile specificate sunt
definite
pentru variabile (numere) care pot lua numai una din cele două valori: 0
sau 1.
Pentru sistemele de calcul operaţiile logice sunt definite asupra unor
datelor care
sînt reprezentate prin intermediul numerelor binare de o lungime
specificată 1,2,4
byte (1 byte = 8 biţi), cum operaţiile booleene sunt definite pentru un
bit –
rezultatul instrucţiunilor logice va avea lungimea operanzilor iniţiali,
însă operaţia

Chisinau 2023
booleană specificată se va efectua bit cu bit asupra datelor
reprezentate binar.

.model tiny
.stack 100h
.data
msgintro db "Program Demonstrativ pentru instructiunile logicesi de deplasare",
13, 10, "Datele introduse vor fi in format binar (de ex: 01011001)", 13, 10, '$'
msgreada db "Introduceti octetul A: ", '$'
msgreadb db 13,10, "Introduceti octetul B: ", '$'
msgcrlf db 13,10, '$'
msgaandb db 13,10, "A and B : ", '$'
msgaorb db 13,10, "A or B : ", '$'
msgaxorb db 13,10, "A xor B : ", '$'
msgend db 13,10, "Ap", 134,"sati orice tast", 134," pentru atermina...",13,10,'$'
msgtypo db 13,10, "V", 134, " rug", 134, "m s", 134, " tastati 0 sau 1!",13,10,'$'
vara db 0
varb db 0
aux db 0
.code
start:
mov ax, @data ; ds, es -> .data
mov ds, ax
mov es, ax
call cls ; apelare procedura stergere
; ecran
mov dx, offset msgintro ; dx -> "Program Dem...
mov ah, 09h ; functia afisare string
Chisinau 2023
; terminat cu $
int 21h ; apel intrerupere
mov dx, offset msgreada ; dx -> "\nIntroduceti oc..
mov ah, 09h
int 21h
call readbinar ; citire numar binar in aux
mov al, aux
mov vara, al ; variabila A = aux
mov dx, offset msgreadb ; dx -> "\Introduceti oc..
mov ah,09h
int 21h
call readbinar ; citire numar binar in aux
mov al, aux
mov varb, al ; variabila B = aux
mov dx, offset msgaandb
mov ah, 09h
int 21h ; Afisare 'A and B:'
mov al, vara
and al, varb
mov aux, al ; Valoarea A and B stocata
; in AUX
call printbinar ; Afisare AUX
mov dx, offset msgaorb
mov ah, 09h
int 21h ; Afisare 'A or B:'
mov al, vara
or al, varb

Chisinau 2023
mov aux, al ; Valoarea A or B stocata in
; AUX
call printbinar ; Afisare AUX
mov dx, offset msgaxorb
mov ah, 09h
int 21h ; Afisare 'A xor B:'
mov al, vara
xor al, varb
mov aux, al ; Valoarea A xor B stocata
; in AUX
call printbinar ; afisare AUX
mov dx, offset msgend
mov ah, 09h
int 21h ; Afisare mesaj sfarsit
mov ah, 01h ; functia citire caracter
; (valoarea ; este ignorata)
int 21h ; apel intrerupere
call cls
mov al, 0h ; error code = 0
jmp iesi ; salt catre eticheta iesi
; (se iese din program)
typo: mov dx, offset msgtypo ; se afiseaza cererea de
; tastare a 0 si 1
mov ah, 09h ; se asteapta o tasta si
; apoi se iese din program
int 21h
mov ah, 01h ; readkey

Chisinau 2023
int 21h
call cls
mov al, 01h ; error code = 1
iesi:mov ah, 4ch ; dos exit, error code=0(ok)
; sau 1(input invalid)
int 21h
printbinar proc ; Procedura pentru afisare
; binar
mov cx, 8 ; lungime 8 biti (octet)
burm: mov dl, '0'
test al, 128 ; Se afiseaza valoarea
; B.C.M.S
; (se testeaza si salt in
; functie de ZF)
jz d0 ; apoi se face shift left
; bit cu bit pina cx = 0
; (toti 8 bitii au
mov dl, '1' ; fost afisati)
d0: push ax
mov ah, 02h ; functia 02, afisare
; caracter stocat in dl
int 21h
pop ax
shl al, 1
loop burm
ret
printbinar endp

Chisinau 2023
readbinar proc ; Procedura Citire binar
mov aux, 0 ; valoarea este stocata in
; AUX
mov cx, 8 ; lungime 8 biti
bit: mov ah, 01h ; functia 01h, citire
; caracter in al
int 21h
sub al, 48 ; se scade 48 din codul
; ascii
; (48 = '0', 49 = '1') -> al
; = 0/1
jb typo ; cod ascii < 48 ->
; caracter invalid
cmp al, 2 ; al > 2 -> caracter invalid
jae typo
shl ax, cl
shr ax, 1
or aux, al ; se seteaza bit cu bit AUX
loop bit
ret
readbinar endp
cls proc ; Procedura stergere ecran
mov ax,0b800h ; Ecranul se sterge prin
; scrierea memoriei
; video cu valori de 0
mov es,ax
mov ax,0700h

Chisinau 2023
mov cx,2000
xor di,di
cld
rep stosw
mov dx,10 ; se repozitioneaza cursorul
; la 10:0
xor bh,bh
mov ah,2 ; cu ajutorul functiei 2,
; intreruperea 10h
int 10h
ret
cls endp
end start

Chisinau 2023
Chisinau 2023

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