Laborator 4
Test...
Exercitii pregatitoare
Problema 1
citeste a,b;
daca(a>b)
atunci mem[60]=a-b;
altfel
daca (b>a)
atunci mem[60]=b-a;
altfel mem[59]=mem[60];
INP
STA a
INP
STA b
LDA a
SUB b
BRZ equal
BRP first
LDA b
SUB a
STA 60
OUT
HLT
equal LDA 60
STA 59
OUT
HLT
first LDA a
SUB b
STA 60
OUT
HLT
a DAT
b DAT
Problema 2
Stocheaza la adresele 99 si 98 valorile deimpartitului si respectiv impartitorului, iar la adresele 96 si 97 valorile catului si respectiv restului impartirii intregi dintre deimpartit si impartitor.
INP
STA 99
INP
STA 98
loop LDA 98
SUB 99
BRZ equal
BRP end
LDA 99
SUB 98
STA 99
LDA cat
ADD one
STA cat
BRA loop
equal LDA cat
ADD one
STA cat
STA 96
OUT
LDA rest
STA 97
OUT
HLT
end LDA cat
STA 96
OUT
LDA 98
SUB 99
STA rest
STA 97
OUT
HLT
cat DAT 0
rest DAT 0
one DAT 1
Problema 3
Scrie la iesirea standard(OUT) valorile primilor n termeni ai sirului lui Fibbonaci, valoarea lui n fiind stocata in adresa 99.
INP
STA 99
BRP positive
HLT
positive LDA 99 //verificam daca numarul dat este pozitiv, altfel nu are rost sa continuam
BRZ special // cazul special in care nu vrem sa afisam niciun numar
SUB one
loop LDA primulTermen
OUT
ADD alDoileaTermen
STA sum
LDA alDoileaTermen
STA primulTermen
LDA sum
STA alDoileaTermen
LDA 99
SUB one
BRZ end
STA 99
BRA loop
end HLT
special HLT
primulTermen DAT 0
alDoileaTermen DAT 1
sum DAT
one DAT 1
Problema 4
Cititi doua numere si afisati-le in ordinea inversa citirii lor.
INP
STA 99
INP
STA 98
OUT
LDA 99
OUT
HLT
Problema 5
Cititi doua numere x si y. Daca x este cu exact 1 mai mare decat y sa se printeze 11, in caz contrar 22.
INP
STA x
INP
STA y
LDA x
SUB y
SUB one
BRZ first
LDA number2
OUT
HLT
first LDA number1
OUT
HLT
x DAT
y DAT
number1 DAT 11
number2 DAT 22
one DAT 1
Problema 6
Calculati valoarea absoluta a diferentei dintre doua numere.
INP
STA x
INP
STA y
LDA x
SUB y
BRP positive
LDA y
SUB x
OUT
HLT
positive LDA x
SUB y
OUT
HLT
x DAT
y DAT
Problema 7
Afisati primele 5 numere divizibile cu 3.
LDA limit
BRP positive
HLT
positive LDA limit
BRZ zeroCase
loop LDA start
OUT
ADD increment
STA start
LDA limit
SUB one
STA limit
BRZ end
BRA loop
HLT
zeroCase HLT
end HLT
start DAT 0
limit DAT 5
increment DAT 3
one DAT 1
Problema 8
Cititi un numar n. Calculati si afisati patratul lui.
INP
STA n
loop LDA SUM
ADD n
STA SUM
LDA COUNT
ADD one
STA COUNT
LDA n
SUB COUNT
BRZ end
BRA loop
end LDA SUM
OUT
HLT
n DAT
SUM DAT 0
COUNT DAT 0
one DAT 1
Problema 9
Verifica daca doua numere, stocate la adresele de memorie 99 si respectiv 98, reprezinta termeni consecutivi ai sirului lui Fibonacci, scriind valoarea 1 sau 0 la iesirea standard(OUT).
INP
STA X
STA 99
INP
STA Y
STA 98
LOOP LDA T1
SUB X
BRZ XOK
LDA T1
ADD T2
STA SUM
LDA T2
STA T1
LDA SUM
STA T2
LDA T1
SUB X
BRP END
BRA LOOP
XOK LDA T2
SUB Y
BRZ DONE
LDA ZERO
OUT
HLT
DONE LDA X
OUT
LDA Y
OUT
HLT
END LDA ZERO
OUT
HLT
T1 DAT 0
T2 DAT 1
SUM DAT 0
ONE DAT 1
X DAT
Y DAT
ZERO DAT 0
Problema 10
Se citesc n numere. Sa se afiseze suma nr impare.
INP
STA n
loop INP
STA nr
STA aux
subloop LDA two
SUB nr
BRZ equal
BRP addSum
LDA nr
SUB two
STA nr
BRA subloop
HLT
equal LDA n
SUB one
STA n
BRZ end
BRA loop
HLT
addSum LDA SUM
ADD aux
STA SUM
LDA n
SUB one
STA n
BRZ end
BRA loop
HLT
end LDA SUM
OUT
HLT
one DAT 1
SUM DAT 0
nr DAT
aux DAT
n DAT
two DAT 2
Problema 11
Se citeste un numar n si un numar special x. Se va citi o secventa de n numere. Sa se afiseze numarul de secvente in care x apare consecutiv.
INP
STA N
INP
STA X
LOOP INP
STA NR
SUB X
BRZ ADDX
LDA COUNTER
SUB TWO
BRP ADDSECV
LDA ZERO
STA COUNTER
LDA N
SUB ONE
STA N
BRZ END
BRA LOOP
HLT
ADDX LDA COUNTER
ADD ONE
STA COUNTER
LDA N
SUB ONE
STA N
BRZ END
BRA LOOP
HLT
ADDSECV LDA SECV
ADD ONE
STA SECV
LDA ZERO
STA COUNTER
LDA N
SUB ONE
STA N
BRZ END
BRA LOOP
HLT
END LDA COUNTER
SUB TWO
BRP FINAL
LDA SECV
OUT
HLT
FINAL LDA SECV
ADD ONE
OUT
HLT
COUNTER DAT 0
SECV DAT 0
ONE DAT 1
TWO DAT 2
N DAT
X DAT
NR DAT
ZERO DAT 0
Problema 12
Calculati a la puterea b.
INP
STA A
STA AUX
STA loopIncrement
INP
SUB ONE
STA B
LOOP1 LDA B
BRZ END
SUB ONE
STA B
LDA A
STA AUX
LOOP2 LDA AUX
BRZ OUTLOOP
SUB ONE
STA AUX
LDA oneLoopResult
ADD loopIncrement
STA oneLoopResult
BRA LOOP2
HLT
OUTLOOP LDA oneLoopResult
STA res
LDA oneLoopResult
STA loopIncrement
LDA ZERO
STA oneLoopResult
BRA LOOP1
HLT
END LDA res
OUT
HLT
A DAT
B DAT
AUX DAT
res DAT 0
loopIncrement DAT
oneLoopResult DAT 0
ONE DAT 1
ZERO DAT 0
Problema 13
Calculati partea intreaga a radicalului numarului x.
INP
STA X
LOOPN LDA VAL
STA LIMIT
LOOPSQUARE LDA SUMA
ADD VAL
STA SUMA
LDA LIMIT
SUB ONE
STA LIMIT
BRZ END
BRA LOOPSQUARE
END LDA SUMA
SUB X
BRP DONE
LDA VAL
STA PRECEDENT
LDA VAL
ADD ONE
STA VAL
LDA ZERO
STA SUMA
BRA LOOPN
HLT
DONE LDA PRECEDENT
OUT
HLT
X DAT
LIMIT DAT
SUMA DAT 000
ONE DAT 001
ZERO DAT 000
PRECEDENT DAT
VAL DAT 1
Problema 14
Sa se afiseze partea intreaga a radicalului de ordin 3.
INP
STA X
LDA B
SUB ONE
STA B
STA orgB
LOOP0 LDA A
STA AUX
STA loopIncrement
LDA orgB
STA B
LOOP1 LDA B
BRZ endPower
SUB ONE
STA B
LDA A
STA AUX
LOOP2 LDA AUX
BRZ OUTLOOP
SUB ONE
STA AUX
LDA oneLoopResult
ADD loopIncrement
STA oneLoopResult
BRA LOOP2
HLT
OUTLOOP LDA oneLoopResult
STA res
LDA oneLoopResult
STA loopIncrement
LDA ZERO
STA oneLoopResult
BRA LOOP1
HLT
endPower LDA res
SUB X
BRZ equalEND
BRP END
LDA A
STA PRECEDENT
LDA A
ADD ONE
STA A
LDA ZERO
STA oneLoopResult
STA res
BRA LOOP0
HLT
equalEND LDA A
OUT
HLT
END LDA PRECEDENT
OUT
HLT
A DAT 1
B DAT 3
orgB DAT
AUX DAT
res DAT 0
loopIncrement DAT
oneLoopResult DAT 0
ONE DAT 1
ZERO DAT 0
X DAT
PRECEDENT DAT