ASM testul 014
1.
Instructiunea
PUSH AX
va stoca pe stiva continutul variabilelor A, B, C, SUMA, DIFERENTA, CAT, REST, PRODUS prin intermediul registrului AX in stiva incepand cu o adresa numita ETICHETA_13 numai daca:
- se defineste si se aloca zona de memorie pe stiva in mod corespunzator
- se gestioneaza prin directiva ASSUME penerea in corespondenta a segmentului unde se afla ETICHETA_13 ca registru stiva
- se incarca registrul SP cu deplasareea corespunzatoare identificatorului ETICHETA_13.
Secventa este:
SEG_DATA SEGMENT DATA
A DW 40
B DW 11
C DW 44
SUMA DD 0
DIFERENTA DD 0
CAT DW ?
REST DW ?
PRODUS DD ?
SEG_DATA ENDS
SEG_STACK SEGMENT STACK DW 500 DUP (?)
ETICHETA_13 LABEL WORD
SEG_STACK ENDS PROG_SEG SEGMENT CODE
ASSUME CS:CODE,DS:SEG_DATA,SS:SEG_STACK
MOV AX,SEG_DATA
MOV DS,AX
MOV AX
MOV SS,AX
MOV SP, oggset ETICHETA_13
MOV AX,offset A
PUSH AX
MOV AX,offset B
PUSH AX
MOV AX,offset C
PUSH AX
MOV AX,offset SUMA
PUSH AX
MOV AX,offset SUMA+2
PUSH AX
MOV AX,offset DIFERENTA
PUSH AX
MOV AX,offset DIFERENTA+2
PUSH AX
MOV AX,offset CAT
PUSH AX
MOV AX,offset REST
PUSH AX
MOV AX,offset A
PUSH AX
MOV AX,offset PRODUS
PUSH AX
MOV AX,offset PRODUS+2
PUSH AX
..........
2.
Pentru terminarea executiei programului ASM se scrie secventa:
MOV AL,cod_revenire
MOV AH,4Ch
INT 21h
3.
Secventa:
SEG_STACK SEGMENT STACK DW 500 DUP (?)
ETICHETA_13 LABEL WORD
SEG_STACK ENDS determina alocarea unui segment de tip striva al carui varf se refera prin identificatorul ETICHETA_13.
4.
Instructiunile
MOV AX,4C00H
INT 21H
determina revenirea lucrului sub sistemul DOS
5.
Macrodefinitia:
writeln MACRO SIR1,SIR2
PUSH DX
PUSH AX
MOV DX,offset SIR1
MOV AH,09H
INT 21H
MOV DX,offset SIR2
MOV AH,09H
INT 21H
POP AX
POP DX
ENDM
realizeaza afisarea unui sir de caractere referit prin SIR1 avand delimitator de sfarsit de sir caracterul '$'.
SIR2 este deginit prin
SIR2 DB 0Dh,0Ah,'$'
pentru a defini carriage return si line feed.
6.
Instructiunea
MOV AX,FFFF
are codul masina B8FFFFh
7.
Secventa:
SEG_DATA SEGMENT
A DW 40
B DW 11
C DW 44
SUMA DD 0
DIFERENTA DD 0
CAT DW ?
REST DW ?
PRODUS DD ?
SEG_DATA ENDS
defineste un segment de date.
8.
Instructiunea
INC AX
are codul masina 40h
9.
Instructiunea
DEC BX
are codul masina 4Bh
10.
Instructiunea
POP CS
are codul masina 0Fh
11.
Instructiunea
CMP [BP+SI+0954],BL
are codul masina 389A5409h
12.
Instructiunea
JO 011Fh
are codul masina 701Dh
13.
Instructiunea
MOV CL,BH
are codul masina 88F9h
14.
Instructiunea
MOV BX,AX
are codul masina 89C3h
15.
Instructiunea
ADC AL,01
are codul masina 1401h
16.
Macroinstructiunea:
clrsceen MACRO
PUSH CX
PUSH BX
PUSH AX
MOV CX,0
MOV DX,LRXY
MOV AL,0
MOV BH,07h
MOV AH,06h
INT 10h
POP AX
POP BX
POP CX
ENDM
umple cu blancuri intreg ecranul
17.
Macroinstructiunea:
pozitioneaza cursorul pe ecran pe linia specificata in variabila LIN_X si pe coloana specificata in variabila COL_Y, definite:
COL_Y DB
numar intreg_pozitiv
LIN_X DB
numar itreg_pozitiv
avand continutul:
pozitionare MACRO LIN_X,COL_Y
PUSH DX
PUSH AX
PUSH BX
MOV DH,COL_Y
MOV DL,LIN_X
MOV BH,0
MOV AH,02h
INT 10h
POP BX
POP AX
POP DX
ENDM
18.
Macroinstructiunea pentru deschidere fisier este:
open_file MACRO cale_fisier,tip_acces
PUSH DX
PUSH AX
LEA DX,cale_fisier
MOV AL,tip_acces
MOV,3Dh
INT 21h
POP AX
POPDX
ENDM
unde variabila tip_acces este definita prin:
tip_acces DB 0 ; read only
sau
tip_acces DB 1 ; write only
sau
tip_acces DB 2 ; update
19.
Macroinstructiunea:
close_file MACRO fln
PUSH BX
PUSH AX
MOV BX,fnl
MOV AH,3Eh
INT 21h
POP AX
POP BX
ENDM
inchide fisierul al carui numar logic a fost specificat.
20.
Macroinstructiunea:
create_file MACRO cale,atribute,fln
PUSH DX
PUSH AX
PUSH CX
LEA DX,cale
MOV CX,atribute MOV AH,3Ch
INT 21h
MOV,fln,AX POP CX
POP AX
POP DX
ENDM
creaza fisierul al carui cale este specificata in variabila de tip sir de caractere
cale
si returneaza numarul logic al fisierului in variavila fln definita cu tipul DW.
sau
21.
Macroinstructiunea care modifica numele fisierului descris cu cale_veche in cale_noua este:
schimba_nume MACRO cale_veche,cale_noua
PUSH AX
PUSH DI
PUSH DS
LEA DX,cale_veche
POP ES
LEA DI,cale_noua
MOV AH,56h
INT 21h
POP DS
POP DI
POP AX
ENDM
22.
Macroinstructiunea pentru citirea unui sir de caractere este :
read_text MACRO DESTI
PUSH AX
PUSH DX
MOV AH,0Ah
LEA DX,DESTI
INT 21h
POP DX
POP AX
ENDM
23.
Macroinstructiunea pentru afisarea unui mesaj de eroare este:
err_mesaj MACRO mesaj
LEA DX,mesaj
MOV AH,09h
INT 21h
MOV cod_err,AX
ENDM
24.
Directiva RECORD:
defineste si initializeaza grupuri de biti la nivel de bait sau de cuvant.
25.
Definirea:
artcol RECORD A:2=3,B:5=15,C:4=10,D:5=25
aloca 16 biti regrupaindu-i astfel:
bitii 15-14 se asociaza campului A si se initializeaza cu 11b corespunzator lui 7D
bitii 13-9 se asociaza campului B si se initializeaza cu 01111b corespunzator lui 8D
bitii 8-5 se asociaza campului C si se initializeaza cu 1010b corespunzator lui 10D
bitii 4-0 se asociaza campului D si se initializeaza cu11001b corespunzator lui 25D
26.
Referirea articolului definit pe campuri de biti prin:
artcol RECORD A:2=3,B:5=15,C:4=10,D:5=25
se realizeaza prin secventa de instructiuni:
..................
articol1 articol <>
....................
MOV SI,offset articol1
MOV AL,[SI].A
MOV AH,[SI].B
MOV BL,[SI].C
MOV AL,[SI].D
27.
Directiva WIDTH:
- furnizeaza o constanta egala cu numarul de biti din care este format un camp
28.
Directiva MASK:
furnizeaza o constanta in care bitii corespunzatori campului indicat sunt 1 iar ceilalti sunt 0
Daca este definita inregistrarea cu campuri pe biti:
art_bit RECORD ALFA:3,BETA:4,GAMA:5,DELTA:2,ETA:2
MASK ALFA corespunde sirului de biti generat 00000111b
MASK BETA corespunde sirului de biti generat 00001111b
MASK GAMA corespunde sirului de biti generat 00011111b
MASK DELTA corespunde sirului de biti generat 01b
MASK ETA corespunde sirului de biti generat 01b
29.
Directiva WIDTH:
furnizeaza o constanta care arata din cati bitii este format campul indicat
Daca este definita inregistrarea cu campuri pe biti:
art_bit RECORD ALFA:3,BETA:4,GAMA:5,DELTA:2,ETA:2
WIDTH ALFA intoarce 3
WIDTH BETA intoarce 4
WIDTH GAMA intoarce 5
WIDTH DELTA intoarce 2
WIDTH ETA intoarce 2
30.
Daca este data definirea:
art_bit RECORD ALFA:3,BETA:4,GAMA:5,DELTA:2,ETA:2
pentru secventa:
LG_ALFA EQU WIDTH ALFA
LG_BETA EQU WIDTH BETA
LG_GAMA EQU WIDTH GAMA
LG_DELTA EQU WIDTH DELTA
LG_ETA EQU WIDTH ETA
defineste constante simbolice pe care le pune in corespondenta ca in tabelul
Constanta
simbolica
Valoare
atribuita
LG_ALFA
3
LG_BETA
4
LG_GAMA
5
LG_DELTA
2
LG_ETA
2