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