ASM testul 030



1.

Macroinstructiunea:
schimb1 MACRO a,b
PUSH AX
PUSH BX
MOV AL,a
MOV BL,b
MOV a,BL
MOV b,AL
POP BX
POP AX
ENDM

a) copiaza continutul registrului zonei de memorie a in zona de memorie de un bait b si invers
b) interschimba continutul zonei de memorie de un bait a cu continutul zonei de memorie tot de un bait b
c) muta continutul lui a in b si invers
d) nu pozitioneaza indicatorii de conditie AF,CF,IF,OF,DF dar pozitioneaza indicatorii PF, SF,TF,ZF
e) interschimbacontinutul doi baiti intre ei prin intermediul registrilor AL si BL


2.

Instructiunea VAR DW ALFA,BETA,GAMA realizeaza:

a) initializarea zonei de memorie VAR cu valorile operanzilor ALFA, BATA si GAMA
b) alocarea a 6 batiti, cate doi baiti pentru cele trei zone de memorie
c) alocarea a doi baiti pentru variabila ALFA, alocarea a doi baiti pentru variabila BETA
si alocarea a inca doi baiti pentru variabila GAMA pe care ii initializeaza cu adrese
d) definirea unui vector de pointeri cu trei componente pe care il initializeaza
cu deplasarile variabilelor ALFA, BETA si GAMA
e) definirea a trei cuvinte, adica 6 baiti; primul cuvant il initializeaza cu deplasarea variabilei ALFA, al doilea cuvant il initializeaza cu deplasarea variabilei BETA si
ultimul cuvant il initializeaza cu deplasarea variabilei GAMA, fara a pozitiona
indicatori de conditie fiind din aceeasi clasa cu instructiunea MOV

3.

Daca se considera definita macrodefinitia pentru adunarea a doua numere definite cu DW, iar rezultatul sete memorat tot intr-o variabila definita cu DW, pentru realizarea macrodefinitiei de adunare a patru numere:
a) exista cel putin doua macroapeluri
b) se definesc cinci parametri in lista
c) se memoreaza pe stiva rezultate intermediare astfel incat sa se obtina rezultatul corect
d) se scriu urmatoarele macroapeluri:
aduna2 t1,t2,suma1
aduna2 t3,t4,suma2
aduna2 suma1,suma2,total
stiind ca macrodefinitia a fost definita cu
aduna4 MACRO t1,t2,t3,t4,suma1,suma2,total
e) se construieste liniile sursa ale macrodefinitiei:
aduna4 MACRO t1,t2,t3,t4,total
aduna2 t1,t2,total
aduna2 total,t3,total
aduna2 rotal,t4,total
ENDM
fara sa fie nevoie de salvare sau restaurare de registri.

4.

Instructiunea NOP:
a) este instructiunea vida definita cu codul 9Ah
b) nu realizeaza nicio prelucrare dar necesita un numar fix de cicluri masina; se eticheteaza obligatoriu
c) ocupa un bait si permite o implementare flexibila a structurii alternative multiple
d) nu pozitioneaza indicatorii de conditie si trebuie sa fie etichetata
e) se executa in 3 cicluri masina, ocupa un bait, nu executa nicio prelucrare si este utilizata numai pentru a delimita secvente fiind obligatorie etichetarea ei


5.

Macrodefinitia pentru inversarea unui sir1 in sirul sir2 este:
inversare MACRO sir1,sir2,lung
LABEL ciclu
PUSH AX
PUSH SI
PUSH DI
PUSH CX
MOV CX,lung
MOV DI,CX
DEC DI
XOR SI,SI
ciclu:
MOV AL,sir1[SI]
MOV sir2[DI],AL
INC SI
DEC DI
LOOP ciclu
POP CX
POP DI
POP SI
POP AX
ENDM

a) presupune traversarea lui sir1 si lui sir2 in aceeasi directie
b) impune decrementarea lui DI si deplasarea spre stanga cu o pozitie pentru a referi corect ultimul element
c) presupune inversarea rolului registrilor SI si DI
d) defineste doi registri index cand trebuia utilizat numai unul dintre ei
e) utilizarea unui singur registru index presupunea efectuarea unui calcul de adresa cu utilizarea in acel calcul a valorii registrului CX dar prelucrarea devine foarte costisitoare


6.

Macroinstructiunea:
schimb1 MACRO a,b
PUSH AX
PUSH BX
MOV AX,a
MOV BX,b
MOV a,BX
MOV b,AX
POP BX
POP AX
ENDM


a) interschimba continutul a doua zone de memorie folosind registri AX si BX
b) salveaza doi registri pe stiba, memoreaza continuturi si restaureaza registri AX si BX
c) modifica variabilele a si b; dupa executie a are ce avea b si b are ce avea a
d) interschimba doua zone de memorie si restaureaza registri
e) prelucreaza prin stocare din si i registri si pe stiva


7.

Pentru a interschimba soua siruri de aceeasi lungime se scrie macrodefinitia:
schimb_sir MACRO sir1,sir2,lung
LABEL ciclu,salt
PUSH AX
PUSH BX
PUSH SI
PUSH CX
XOR SI,SI MOV CX,lung
ciclu: MOV AL,sir1[SI]
MOV BL,sir2[SI]
MOV sir1[SI],BL
MOV sir2[SI],AL
INC SI LOOP ciclu
POP CX
POP SI
POP BX
POP AX
ENDM

a) folosind cei doi registri
b) folosind numai registrul AL
c) folosind o variabila tampon definita DB
d) trebuie sa testeze sfarsitul de sir cu instructiunea CMP sir1[SI],'$'
e) nefiind necesara incremetarea registrului SI intrucat instructiunile LODSMB si STOSB care este recomandat sa fie utilizate in aceasta macrodefinitie, opereaza pe registri SI si DI


8.

Macroinstructiunea:
cstring MACRO sir,lung,char,contor
LABEL ciclu,salt
PUSH AX
PUSH SI
PUSH CX
PUSH BX
XOR AX,AX
XOR BX,BX
XOR SI,SI
MOV CX,lung
MOV AL,char
ciclu:
CMP AL,sir[SI]
JNE salt
INC BX
salt:
INC SI
INC SI
LOOP ciclu
MOV contor,BX
POP BX
POP CX
POP SI
POP AX
ENDM


a) numara aparitiile caracterului specificat in variabila char
b) nu modifica indicatorii de conditie decat prin instructiunea CMP
c) compara elementele unui sir numit sir cu un caracter memorat in variabila char si ori de cate ori cele doua sunt identice se numara in registrul BX dupa care se memoreaza invariabila contor
d) efectueaza numararea caracterelor identice cu caracterul char si pozitioneaza indicatorii de conditie AF,CF,OF,PF,SF,ZF
e) doar numara caracterele identice dintr-un sir


9.

Instructiunea de comparare COMPARE TWO OPERANDS
CPM :
a) efectueaza evaluarea expresiei (operand_stanga) - (operand_dreapta) si pozitioneaza indicatorii de conditie AF,CF,OF,PF,SF si ZF
daca operandul sursa este definit pe 2 baiti si operandul destinatie este definit pe 1 bait
b) nu modifica continutul operanzilor 212 si 333 din instructiunea CMP 212,333 doar pozitioneaza indicatorii de conditie
c) compara cei doi operanzi, iar atunci cand operandul stang este definit pe 2 baiti iar operandul drept este definit pe 1 bait are loc extensia de semn a operandului drept pentru a se efectua o scadere intre operanzi de 2 baiti fiecare;
CMP AX,22 se executa in 4 cicluri masina
d) efectueaza compareare prin scadere a doi operanzi stocati in memorie si pozitioneaza indicatorii de conditie AF,CF,OF,PF,SF,ZF
e) doar pozitioneaza indicatorii de conditie dupa evaluarea expresiei (operand_stang):=(operand_stang)-(operand_drept) in care cei doi operanzi se refera si prin expresiile [SI], respectiv, [DI], ca in instructiunea CMP [SI],DI


10.

Instructiunea
CALL expresie de referirede
in urna din formele:
CALL aduna
CALL [SI]
CALL AX
CALL procedura[DI]
a) efectueaza evaluarea expresiilor:
(SP):=(SP)-2
((S)+1:(SP)):=(CS)
(CS):=adr-SEG
daca peocedura aduna se afla in alt segment decat unde se efectueaza apelul
b) modifica in acelasi fel SP si CS indiferent unde se afla procedura
c) initializeaza registrul IP cu adresa destinatiei, care in acest caz este adresa primei instructiuni executabile din procedura referita prin adresare indirecta cu expresia [SI]
d) efectueaza apelul procedurii a carei adresa de inceput este referita prin adresare indexata dintr-un vector de pointeri spre functii
e) nu pozitioneaza indicatorii de conditie


11.

Instructiunea de apel procedura inter-segment:
CALL sorteaza
a) ocupa 5 baiti dupa cum urmeaza:
primul bait: codul operatiei 10011010b
al doilea bait si al treilea bait: offsetul procedurii
al patrulea bait si al cincilea baita: adresa segmentului
b) nu modifica pozitionarea indicatorilor de conditie si necesita 20 cicluri masina in cazul adresarii directe indexate
c) modifica inaintea efectuarii saltului neconditionat registri SP, CS si IP dupa cum urmeaza:
(SP):=(SP)-2
((SP)+1:(SP)):=(CS)
(CS):=adresaSEGMENT
(SP):=(SP)-2
((SP)+1(SP)):=(IP)
(IP):=adresa(sortarea)
d) efectueaza apelul procedurii sortearea si executa instructiunile acesteia pana la aparitia primei
instructiuni RET; nu pozitioneaza indicatorii de conditie AF,CF,OF,PF,SF,ZF
e) modifica registrul IP in sensul ca la revenirea din procedura asigura introarcerea la instructiunea de dupa CALL


12.

Instructiunea ADD WITH CARRY, ADC dest,sursa
a) afecteaza indicatorul de conditie CF
b) executa evaluarea expresiilor:
(dest):=(dest)+(sursa)+1 daca CF=1
(dest):=(dest)+(sursa)+0 daca CF=0
c) aduna CF la operandul sursa
d) efectueaza adunarea lui CF la registrul acumulator
e) se foloseste numai la adunarea operanzilor definiti pe 4 baiti fiecare ca in secventa:
MOV AX,OPERAND_1
ADD AX,OPERAND_2
MOV DX,OPERAND_1+2
ADC DX,OPERAND_2+2


13.

Instructiunea :
UNITATE DW 7 DUP(7 DUP (?))
defineste:
a) fara initializare o matrice unitate
b) cu initializare nedefinita o matrice unitate
c) determina alocarea unei zone de memorie de 49 de cuvinte
d) aloca 98 de baiti fara initializare dar care pot fi reinitializati
e) nu modifica indicatorii de conditie in acelasi fel in care actioneaza instructiunea MOV


14.

Secventa de instructiuni
MOV AX,BETA[SI]
MOV GAMA[SI],AX
realizeaza:
a) copierea elementelor BETA[i]ale unui masiv unidimensional in masivul unidimensional
GAMA[i], i=0,1,2,...,n
b) transferul intre doua zone de memorie
c) muta element cu element doua masive de memorie
d) nu pozitioneaza indicatorii de conditie AF,CF,IF,OF,DF dar pozitioneaza indicatorii PF, SF,TF,ZF
e) copiaza in registrul AX continutul zonei de memorie referite cu adresare indexata
BETA[SI];copiaza in zona de memorie referita prin GAMA[SI] a continutului registrului AX


15.

Pentru ca macroinstructiunea:
cstring MACRO sir,lung,char,contor
LABEL ciclu,salt
PUSH AX
PUSH SI
PUSH CX
PUSH BX
XOR AX,AX
XOR BX,BX
XOR SI,SI
MOV CX,lung
MOV AL,char
ciclu:
CMP AL,sir[SI]
JNE salt
.........
salt:
INC SI
INC SI
LOOP ciclu
MOV contor,BX
POP BX
POP CX
POP SI
POP AX
ENDM
sa numere aparitiile caracterului memorat in variabila char, trebuie

a) inlocuite punctele cu instructiunea ADD contor,1
b) inserata instructiunea INC BX in locul punctelor
c) scrisa instructiune de modificare a registrului BX
d) incrementata variabila contor si eliminata instructiunea MOV contor, BX
e) initializata cu zero variabila contor, incrementata in locul punctelor si eliminata instructiunea MOV contor, BX


16.

Macrodefinitia pentru eliminarea aparitiilor unui caracter dat in variabila char dintr-un sir numit sir_1 definita prin:
Eliminchar MACRO sir_1,char,lung
LABEL ciclu,salt
PUSH AX
PUSH SI
PUSH DI
PUSH CX
XOR SI,SI
XOR DI,DI
MOV CX,lung
MOV AL,char
ciclu:
CMP sir_1[SI],AL
JE salt
MOV BL,sir_1[SI]
MOV sir_1[DI],BL
INC DI
salt:
INC SI
LOOP ciclu
POP CX
POP DI
POP SI
POP AX
ENDM
a) nu trebuie sa suprascrie folosind doi registri index
b) utilizeaza doi registri pentru a realiza suprascrierea care este echivalenta cu eliminarea caracterului memorat in variabila char, iar delimitatorul de sfarsit de sir este obligatoriu '$', iar caracterul memorat in variabila char nu va fi acesta
c) modifica sirul ceea ce nu este permis ca este parametru de intrare
d) necesita un parametru pentru restabilirea lungimii noului sir
e) trebuie sa contina un nou parametru prin care sa se defineasca delonitatorul de sfarsit de sir


17.

Instructiunea MOV AX,AX realizeaza:
a) copierea continutul registrului AX in el insusi
b) copierea unui operand numit sursa in alt operand numit destinatie
c) initializarea cu zero a registrului AX
d) fara sa pozitioneze indicatorii de conditie AF,CF,IF,OF,DF o operatie nenecesara
e) copiaza continutul registrului AX in zona de memorie de doi baiti AX definita anterior
fara a fi initializata; nu pozitioneaza indicatorii de conditie; continutul zonei
de memorie AX ramane nemodificat


18.

Instructiunea JMP ETA realizeaza:
a) salt neconditionat in avans
b) salt neconditionat inapoi
c) salt neconditionat inainte sau inapoi
d) salt neconditionat la instructiunea cu eticheta ETA si nu pozitioneaza
indicatorii de conditie AF,CF,IF,OF,DF dar pozitioneaza indicatorii PF, SF,TF,ZF
e) salt neconditionat la instructiunea cu eticheta ETA si nu pozitioneaza
indicatorii de conditie AF,CF,IF,OF,DF dar numarul de cicluri masina necesari depinde de:
- distanta de la JMP la instructiunea cu eticheta ETA
- daca JMP si instructiunea ETA se afla in acelasi segment sau in segmente diferite
- daca ETA se refera indirect bazat




19.

Instructiunile:
MOV AX,-1
JLZ ETA
realizeaza:
a) salt conditionat in avans spre instructiunea cu eticheta ETA intrucat registrul AX are valoarea -1
b) salt conditionat inapoi catre instructiunea cu eticheta ETA pentru ca registrul AX are valoarea -1
c) salt conditionat catre instructiunea cu eticheta ETA numai daca o instructiune precedenta pozitioneaza indicatorii de consditie ceruti de acest tip de salt;
instructiunea MOV nu pozitioneaza indicatorii de conditie
d) salt conditionat la instructiunea cu eticheta ETA si nu pozitioneaza
indicatorii de conditie AF,CF,IF,OF,DF dar pozitioneaza indicatorul SF
e) salt conditionat la instructiunea cu eticheta ETA si nu pozitioneaza
indicatorii de conditie insa implementeaza structura repetitiva conditionata anterior




20.

Macrointructiunea:
cstring MACRO sir,lung,char1,char2,contor
LABEL ciclu,salt
PUSH AX
PUSH SI
PUSH CX
PUSH BX
XOR AX,AX
XOR BX,BX
XOR SI,SI
MOV CX,lung
MOV AL,char1
MOV DL,char2
ciclu:
CMP AL,sir[SI]
JNE salt
INC BX
MOV sir[SI},DL
INC BX
salt:
INC SI
INC SI
LOOP ciclu
MOV contor,BX
POP BX
POP CX
POP SI
POP AX
ENDM

a) schimba ori de cate ori este intalnic caracterul memorat in variabila char1 cu caracterul memorat in variabila char2
b) numara aparitiile caracterului memorat in variabila char1 in variabila contor
c) numara si schimba caracterul memorat in variabila char1
d) schimba si numara caracterul memorat in variabila char1
e) inlocuieste in sir aparitia caracterului memorat in variabila char1 cu caracterul memorat in variabila char2 dupa care numara in registrul BX aparitiile in sir a caracterului memorat in char1




21.

Instructiunea SUB ETA,TETA realizeaza:
a) scaderea operandului sursa TETA din operandul destinatie ETA, definiti prin:
ETA DW 100
TETA DW 75
obtinand valoarea 25
b) efectuarea scaderii dupa relatia (ETA):=(ETA)-(TETA)
c) generarea unei erori de executie intrucat ambii operanzi sunt variabile definite in memorie
d) scaderea daca unul dintre operanzi este pus in corespondenta cu unul dintre registri AX sau BX sau CX sau DX sau DI sau SI folosind EQU
e) scaderea a doi operanzi definiti implicit pe un bait fiecare




22.

Pentru ca macrointructiunea:
cstring MACRO sir,lung,char1,char2
LABEL ciclu,salt
PUSH AX
PUSH SI
PUSH CX
XOR AX,AX
XOR BX,BX
XOR SI,SI
MOV CX,lung
MOV AL,char1
MOV DL,char2
ciclu:
CMP AL,sir[SI]
JNE salt
MOV sir[SI},DL
INC BX
salt:
INC SI
INC SI
LOOP ciclu
MOV contor,BX
POP CX
POP SI
POP AX
ENDM
sa realizeaze inlocuirea cu caracterul memorat in variabila char2 acaracterului care urmeaza in sir unui caracter identic cu caracterul memorat in variabila char1 este necesar ca:
a) registrul CX sa fie decrementat inainte de a intra in structura repetitiva si referirea elementului din sir care se inlocuieste ssa se faca prin MOV sir[SI+1]
b) referirea vecin caracterului sa fie realizata corect
c) sa nu se iasa din sir prin intermediul registrului CX fapt pentru care sirul va avea delimitatorul '$'
d) pozitionarea pe caracterul urmator se va efectua prin incrementarea registrului SI
e) o operatie de incrementare a registrului SI si copierea in sir[SI] a caracterului char2 sa fie urmata de decrementarea registrului SI pentru a pastra concordanta dintre lungimea sirului traversat si adresele baitilor supusi prelucrarii




23.

Registrul AX se utilizeaza pentru:
a) stocarea de rezultate intermediare ca in instructiunea ADD AX,X[SI]
b) memorarea de constante simbolice in exclusivitate
c) initializare numai cu instructiunea XOR AX,AX
d) furnizare ca sursa de valori care se memoreaza ca in instructiunea MOV ALFA,AX
e) comparare de valori ca in instructiunea CMP AX,7 sau CMP 7,AX




24.

Registrul AX se utilizeaza pentru:
a) ajustare aritmetica, fiind operand explicit
b) conversie de la bait la cuvant, ca operand explicit
c) conversie de la cuvant la cuvant dublu, ca operand explicit, impreuna cu registrul DX
d) calcule ca registru acumulator
e) comparare de valori ca in instructiunea CMP AX,7 sau CMP 7,AX


25.

Registrul CX se utilizeaza pentru:
a) stocarea de rezultate intermediare ca in instructiunea ADD CX,X[SI]
b) memorarea de constante care indica numarul mai mare ca 10 a pozitiilor cu care se efectueaza deplasarea spre stanga sau spre dreapta a continutului unei zone de memorie sau a continutului unui registru
c) gestionarea sub forma DEC CX a numarului de repetari in structura repetitiva implementata cu instructiunea LOOP
d) stabilirea lungimilor diferite ale sirurilor de baiti utilizate in instructiunile de lucru cu siruri de caractere
e) comparare de valori ca in instructiunea CMP CX,7 sau CMP 7,CX




26.

Instructiunea MUL ETA realizeaza:
a) inmultirea unui operand stocat intr-un registru cu operandul stocat in memorie si referit cu identificatorul ETA
b) inmultirea atunci cand deinmultitul se afla in registrul AX si inmultitorul se afla in zona de memorie definita pe cuvant ETA
c) inmultirea numai daca deinmultitul este memorat in registrul AX si inmultitorul se memoreaza
in registrul BX prin instructiunea MOV BX, ETA, dupa care instructiunea de inmultire devine MUL BX
d) inmultirea binara a doi operanzi, din care unul este stocat intr-un registru si altul este in memorie;
rezultatul se afla in registrul dublu DX:AX
e) calculul unei expresii de forma (DX:AX):=(AX)*(ETA)
nu se pozitioneaza indicatori de conditie




27.

Instructiunile:
JG ETA_1
JZ ETA_2
JL ETA_3
JMP ETA_4
realizeaza:
a) salt conditionat spre trei directii diferite
b) salt neconditionat spre eticheta ETA_4 si trei salturi conditionate
c) filtrarea executiei a patru secvente de program functie de trezultatul testarii
d) salturi conditionate functie de cum au fost pozitionati indicatorii de conditie anterior;
instructiunea JMP ETA_4 trebuie etichetata, altfel nu va fi executata niciodata
e) salturi neconditionate si conditionate spre 4 secvente de program




28.

Instructiunea PUSH ETA realizeaza:
a) salvarea pe stiva a continutului unui cuvant referit cu identificatorul ETA
b) salvarea pe o stiva referita cu registrul SS
c) copierea continutului zonei de memorie referita cu identificatorul ETA in zona de memorie avand deplasarea referita cu registrul SP, dupa ce registrul acesta a fost majorat cu 2
d) copierea continutului zonei de memorie referita cu identificatorul ETA in zona de memorie avand deplasarea referita cu registrul SP, dupa ce registrul acesta a fost diminuat cu 2
e) este echivalenta cu instructiunea MOV [SP],ETA


29.

Instructiunea MOV AX,offset BETA realizeaza:
a) incarca in registrul AX deplasarea zonei de memorie BETA
b) nu pozitioneaza indicatori de conditie dar este singurul mod de a incarca adresa unui operand
c) muta continutul zonei de memorie BETA in registrul AX
d) nu pozitioneaza indicatorii de conditie dar incarca in registrul AX o deplasare, registrul AX fiind utilizat in adresarea indexata
e) incarcarea in registrul AX a unei deplasari, fiind obligatorie instructiunea MOV SI,AX pentru a lucra in continuare in modul de adresare indirect cu operandul BETA




30.

Instructiunea MOV DI,offset BETA realizeaza:
a) incarca in registrul DI deplasarea zonei de memorie BETA
b) nu pozitioneaza indicatori de conditie dar este singurul mod de a incarca adresa unui operand
c) muta continutul zonei de memorie BETA in registrul DI
d) nu pozitioneaza indicatorii de conditie dar incarca in registrul AX o deplasare, registrul DI fiind utilizat in adresarea indexata
e) incarcarea in registrul DI a unei deplasari, fiind obligatorie instructiunea MOV AX,[DI] pentru a lucra in continuare in modul de adresare indirect cu operandul BETA, iar registrul DI trebuie incrementat prin:
INC DI
INC DI




1. Sa se construiasca macrodefinitia pentru normalizarea completa a unui text.
2. Sa se construiasca macrodefinitia pentru numararea caracterelor cifrice dintr-un text parcurgandu-l de la dreapta spre stanga.
3. Elaborati schema logica pentru interschimbul a doua cuvinte de lungimi diferite.
4. Daca o matrice cu elemente dispuse pe 3 linii si 4 coloane definitie prin:
matr DB 'abcdefghijkm'
scrieti procedura de interschimb a elementelor matr[1][1] si matr[2][2] cu transmitere parametri pe stiva.