Documente Academic
Documente Profesional
Documente Cultură
MOV AX, A
CWD ; DX:AX = A
SUB AX, CX
SBB DX, BX ; DX:AX = A-B*C
.CODE
START:
MOV AX, @DATA
MOV DS, AX
MOV AX, B
IMUL C ; DX:AX = B*C
MOV BX, DX
MOV CX, AX ; BX:CX = B*C
IDIV F ; AX = ((A-B*C)/(D+15))/F
MOV R, AX
MOV CX, D
ADD CX, 15 ; CX = D+15
IDIV CX ; AX = (A-B*C)/(D+15)
CWD ; DX:AX = (A-B*C)/(D+15)
MOV AX,VECT+4
MOV VECT+2,AX
MOV VECT+4,DX
MOV AH, 04CH
INT 21H
END START
MOV AX,0
MOV AL,VAL1
MUL VAL2
MOV BX,AX
START:
MOV AX,@DATA
MOV DS,AX
MOV AH,4CH
INT 21H
END START
MOV DX,0
MOV AX,VAL3
MUL VAL4
MOV AL,VAL2
DIV VAL1
MOV BX,AX
MOV AX,VAL3
DIV VAL4
MOV AH,4CH
START:
MOV AX,@DATA
MOV DS,AX
6)
INT 21H
END START
unde a,b,c si d sunt numere intregi fara semn pe 16 biti. Se va tine cont de faptul ca
inmultirea a doua numere pe 16 biti va fi un numar pe 32 de biti. Programul se va
asambla incapand de la adresa 100H.
.MODEL SMALL
MOV BX,AX
.STACK 100H
MOV CX,DX
.DATA
A DW 400
MOV AX,C
B DW 300
MUL D
C DW 200
D DW 100
ADD BX,AX
.CODE
ADC CX,DX
START:
MOV AX,@DATA
MOV AH,4CH
MOV DS,AX
INT 21H
ORG 100H
END START
MOV AX,A
MUL B
7)
unde a,b,c si d sunt numere intregi fara semn pe 16 biti. Se va tine cont de faptul ca
inmultirea a doua numere pe 16 biti va fi un numar pe 32 de biti. Programul se va
asambla incapand de la adresa 100H.
.MODEL SMALL
MOV BX,AX
.STACK 100H
MOV CX,DX
.DATA
A DW 400
MOV AX,C
B DW 300
MUL D
C DW 200
D DW 100
ADD BX,AX
.CODE
SBB CX,DX
START:
MOV AX,@DATA
MOV AH,4CH
MOV DS,AX
INT 21H
ORG 100H
END START
MOV AX,A
MUL B
8) Sa se scrie un program in assembler care citeste in fereastra dos o litara mica si o
converteste in litera mare. In tabelul ASCII diferenta intre codul unei litere mici si codul
unei litere mari este 32. In fereastra dos se vor afisa mesajele: Introduceti litera mica:
si Litera mare este:
.MODEL SMALL
.STACK 100H
.DATA
MSG1 DB 'Introduceti litera mica : $'
MSG2 DB 13,10,'Litera mare este: $'
CHAR DB ?,13,10,'$'
.CODE
START:
MOV AX,@DATA
MOV DS, AX
Scrieti un program in assembler care utilizeaza o bucla pentru a afisa intreg setul de
caracterea ASCII. Se va folosi funtia de asifare in fereastra dos a unui character ascii.
Programul va incepe asamblarea la adresa 50H
.MODEL SMALL
.STACK 100H
.DATA
.CODE
START:
ORG 50H
MOV AH, 2
MOV CX, 256
MOV DL,00H
LOOP_HERE:
INT 21H
INC DL ; INCREMENTS ASCII CODE
LOOP LOOP_HERE
MOV AH, 04CH
INT 21H
END START
ET1:
MOV AL, [SI]
PUSH AX
INC SI
LOOP ET1
MOV CX,LSIR
ET2:
START:
MOV AX, @DATA
MOV DS, AX
XOR AX,AX
MOV SI,OFFSET SURSA
MOV DI,OFFSET DEST
MOV CX,LSIR
POP AX
MOV [DI],AL
INC DI
LOOP ET2
MOV AH, 04CH
INT 21H
END START
12) Fie a si b doua numere naturale pe 8 biti, a si b se citesc de la tastura. Daca a=b
depasire:
inc si
cmp si,5
jne inceput
xor si,si
mov cx,ax
mov ax,dx
mov bl,5
div bl
inceput:
add dl,vector[si]
jnc depasire
inc dh
mov ah,4ch
int 21h
END start
caractere. Programul va cauta in acest sir de caractere de cate ori apare litera
s. Rezultatul se va memora in registru BX.
Sirul va fi definit incepanda de la adresa 0000H si se va folosi o constanta
pentru lungimea sirului.
.MODEL SMALL
.STACK 10h
.DATA
sir DB 'acesta este un sir!'
l EQU $-sir
.CODE
urm:
inc si
cmp al,sir[si]
jne ne_gasit
gasit:
inc bx
begin:
mov ax,@DATA
mov ds,ax
ne_gasit:
loop urm
mov cx,l
mov si,-1
mov ah,4ch
int 21h
mov al,'s'
END begin
15) Scrieti pun program in assembler care defineste si initialize doi vectroi de
inceput:
mov al,v1[si]
add al,v2[si]
mov v3[si],al
inc si
loop inceput
mov ah,4ch
int 21h
END begin
16) Scieti un program in assembler care cauta intr-un vector de numere naturale pe
8 biti, cel mai mic element. Rezultatul se va memora in registrul DL. Se va utiliza
o bucla prin care se va parcurge sirul de la primul pana la ultimul element.
.MODEL SMALL
.STACK 10h
inceput:
inc si
.DATA
v1 DB 8,7,3,9,1,6
sf DB ?
.CODE
begin:
mov ax,@DATA
mov ds,ax
mov cx, offset sf - offset v1
mov si,0
mov bl,v1[si]
cmp v1[si],bl
jnc negasit
mov bl,v1[si]
negasit:
loop inceput
mov dl,bl
mov ah,4ch
int 21h
END begin
17) Scrieti un program in assembler care citeste un numar natural N din fereastra DOS
(N<10). Apoi se va calcula suma numerelor de la 1 pana la N, iar rezultatul se va
memora in registrul DL. Pentru afisarea si citire in fereastra DOS se vor utiliza funtiile
corespunzatoare intreruperilor DOS.
.MODEL SMALL
.STACK 100H
.DATA
MSG1 DB 'DATI N:','$'
N DB 0
.CODE
START:
MOV AX,@DATA
MOV DS,AX
MOV DX, OFFSET MSG1
MOV AH,09H
INT 21H
MOV AH,01H
INT 21H
SUB AL,48
MOV N, AL
MOV DL,0
MOV AL,0
@LOOP :
INC AL
ADD DL,AL
CMP AL,N
JNE @LOOP
MOV AH,4CH
INT 21H
END START
18) Scrieti un program in assembler care citeste doua cifre de la tastrura in fereastra DOS.
Daca prima este mai mica decat a doua, in registrul CX se va memora produsul lor,
altfel, in registrul CX se va memora rezultatul impartirii primei cifre la a doua. Se vor
utilizata functiile corespunzatorea intreruperilor DOS.
.MODEL SMALL
.STACK 100H
.DATA
MSG1 DB 'A=','$'
MSG2 DB 'B=','$'
.CODE
START:
MOV AX,@DATA
MOV DS,AX
MOV AX,0
LEA DX,MSG1
MOV AH,09H
INT 21H
MOV AH,01H
INT 21H
SUB AL,48
MOV AH,01H
INT 21H
SUB AL,48
CMP BL,AL
JB @LABEL1
JMP @LABEL2
@LABEL1:
MUL BL
MOV CX,AX
JMP @SFARSIT
@LABEL2:
MOV AH,0
MOV BH,0
XCHG AX,BX
DIV BL
MOV CX,AX
MOV BL,AL
LEA DX,MSG2
MOV AH,09H
INT 21H
@SFARSIT:
MOV AH,4CH
INT 21H
END START
19) Scrieti un program in assembler care citeste cu ecou in fereastra DOS doua caractere.
Daca aceste caractere sunt egale, se va afisa in fereastra DOS caracterul corespunzator
sumei celor doua coduri ASCII ale caracterelor citite, daca sunt diferite se va afisa
caracterul corespunzator diferentei celor doua coduri ASCII.
.MODEL SMALL
.STACK 100H
.DATA
MSG1 DB 13,10,'Primul caracter=','$'
MSG2 DB 13,10,'Al doilea caracter=','$'
.CODE
START:
MOV AX,@DATA
MOV DS,AX
LEA DX,MSG1
MOV AH,09H
INT 21H
MOV AH,01H
INT 21H
MOV BL,AL
LEA DX,MSG2
MOV AH,09H
INT 21H
MOV AH,01H
INT 21H
CMP AL,BL
JE @egale
SUB BL,AL
MOV DL,BL
MOV AH,02H
INT 21H
JMP @sfarsit
@egale :
ADD AL,BL
MOV DL,AL
MOV AH,02H
INT 21H
@sfarsit :
MOV AH,4CH
INT 21H
END START
20) Scrieti un program in assembler care citeste un sir de caractere pana la intalnirea
caracterului #(codul ASCII al caracterului # este 35). Aflati la ce adresa de memorie
se gaseste primul spatiu din sirul citit si memoriti aceasta adresa in registrul CX.
.MODEL SMALL
.STACK 100H
.DATA
MSG1 DB 13,10,'Introduceti sirul care
se termina cu #:','$'
SIR DB ?
.CODE
START:
MOV AX,@DATA
MOV DS,AX
LEA DX,MSG1
MOV AH,09H
INT 21H
MOV CX,BX
MOV SI,0
@loop:
CMP SIR[SI],' '
JE @gasit
INC SI
LOOP @loop
@gasit:
LEA CX,SIR
ADD CX,SI
MOV AH,4CH
INT 21H
END START
LEA BX,SIR
@eticheta:
MOV AH,01H
INT 21H
MOV BYTE PTR [BX],AL
INC BX
CMP AL,35
JNE @eticheta