Professional Documents
Culture Documents
Se cere sa se afiseze nr de
oct care au tetr inf mai mica decat tetr sup,nr de octeti
care au nr de oct care au tetr inf mai mare decat tetr
sup si nr de octeti care au tetr egale.
asm:
title problema
.model small^.stack 100h
extrn _sir:byte^extrn _nr
extrn _nxe^extrn _nxmare
extrn _nxmic^extrn _citire:near
extrn _afisare:near^public _main
.code^;procedura tetrade
tetr proc^push cx
mov cl, 4^mov ah, al
ror al, cl^cmp ah, al
jne dif^inc word ptr[di]
jmp exit^dif:mov al, ah
and ah, 0f0h^ror ah, cl
and al, 0fh^cmp ah, al
jg maiMare^inc bx
jmp exit^maiMare:inc dx
exit:nop^pop cx
ret^tetr endp
;macro pt pregatire apel
apel macro s, n, nxe, nxmare, nxmic
local bucla^mov cx, n
xor si, si^lea di, nxe ;in [di] nr octetilor ce au
tertradele egale^xor dx, dx
xor bx, bx^bucla:mov al, s[si]
call tetr
mov nxmare, dx ;in dh nr octetilor ce au tetrada
superioara > tetrada inferioara
mov nxmic, bx ;in dl nr octetilor ce au tetrada
superioara < tetrada inferioara
inc si^loop bucla
endm
_main proc
call near ptr _citire
apel _sir,_nr,_nxe,_nxmare,_nxmic
call near ptr _afisare
mov ax, 4c00h^int 21h
ret^_main endp^end
c:
#include <stdio.h>
#include <conio.h>
char sir[25];
int nr, nxe, nxmare, nxmic;
void citire(void){int i;
printf("Dati nr de elemente= ");
scanf("%d",&nr);
for(i=0;i<nr;i++){
printf("sir[%d]= ", i);
scanf("%s", &sir[i]);}}
void afisare(void){
printf("\nNr oct cu tetr egale=%d",nxe);
printf("\nNr oct cu tetr sup>tetr inf=%d",nxmare);
printf("\nNr oct cu tetr sup<tetr inf=%d",nxmic);
getch();}
2.
title problema
.model small
.stack 100h
data segment
mes_er db 'Nu''i codul unei instr de salt conditionat',
13,10, '$'
tab0 db 'jo',13,10,'$'
tab1 db 'jno',13,10,'$'
tab2 db 'jb sau jnae',13,10,'$'
tab3 db 'jnb sau jae',13,10,'$'
tab4 db 'jz sau je',13,10,'$'
tab5 db 'jnz sau jne',13,10,'$'
tab6 db 'jbe sau jna',13,10,'$'
tab7 db 'ja sau jnbe',13,10,'$'
tab8 db 'js',13,10,'$'
tab9 db 'jns',13,10,'$'
tab10 db 'jp sau jpe',13,10,'$'
tab11 db 'jnp sau jpo',13,10,'$'
tab12 db 'jl sau jnge',13,10,'$'
tab13 db 'jnl sau jge',13,10,'$'
tab14 db 'jle sau jng',13,10,'$'
tab15 db 'jg sau jnle',13,10,'$'
tab dw tab0, tab1, tab2, tab3, tab4, tab5, tab6, tab7,
tab8, tab9, tab10, tab11, tab12, tab13, tab14, tab15
octet db 01110100b
data ends^cod segment
assume cs:cod, ds:data
start:mov ax, data
mov ds, ax^mov al, octet
mov ah, al
xor al, 74h; verif dc prima tetrada e 0111
jnz eroare^mov al, ah
and al, 00001111b ;extrage a doua tetrada
mov bl, al ;in bl scrie cond de salt
xor bh, bh^add bx, bx
mov dx, tab[bx]^mov ah, 09h
int 21h^jmp sfarsit
eroare:lea dx, mes_er
mov ax, 09h^int 21h
sfarsit:mov ah, 01h
int 21h^mov ax, 4c00h
int 21h^cod ends
end start
//prg.cpp
#include <stdio.h>
long int sir[30];
int nr_elem;
int i;
void citire(){
printf("Dati numarul de elemente:");
scanf("%d",&nr_elem);
for (i=0;i<nr_elem;i++){
printf("elem[%d] ",i); scanf("%ld",&sir[i]);}}
jmp exit
descrescator:mov cx, n3 ;in cx nr de elemente
mov bx, 1^lea dx, descr
exit:mov ah, 40h^int 21h
mov ah, 01h^int 21h
pop bx^ret
p2 endp
start:mov ax, data^mov ds, ax
;pregatire apel p1^lea bx, cuv
push bx^mov bx, n
push bx^lea bx, oct
push bx^call p1
;pregatire apel p2
lea bx, oct^mov bloc, bx
mov bx, n^mov [bloc+2], bx
lea bx, bloc^call p2
mov ah, 01h^int 21h
mov ax, 4c00h^int 21h
cod ends^end start
loop bucla1
pop cx ^ pop si ^ pop bx
pop dx ^ pop ax ^ ret
determina endp
afisare proc
;conversie in zecimal
lea si,sir;sirul rezultat
mov ax,rez1 ^ mov dx,0
mov bl,10 ^ mov bh,0
repeta: div bx
;restul in ax, catul in dl
add dl,'0' ^ mov [si],dl ^ inc si
mov dx,0 ^ cmp ax,0
jne repeat ^ mov byte ptr [si],0
;inverseaza
push cx ^ push ax
push si ^ push bx ^ xor si,si
mov cx,5 ^ lea bx,sir
bucla4:mov ah,0
mov al,bx[si] ^ push ax
inc si ^ loop bucla4
mov cx,5 ^ xor si,si
bucla5: pop ax
mov bx[si],al ^ inc si
loop bucla5
mov bx,1 ^ lea dx,sir
mov cx,5 ^ mov ah,40h ^ int 21h
pop bx ^ pop si ^ pop ax
pop cx ^ ret
afisare endp
_main proc
call near ptr _citire
returneaza _sir1,_sir2,_nsir1,_nsir2,rez1
call afisare
mov ax,4c00h
int 21h ^ ret
_main endp
end
//c.cpp
#include <stdio.h>
long int sir1[30];
long int sir2[30];
int nsir1;
int nsir2;
void citire(){ int i;
printf("Dati numarul de elem din sirul 1");
scanf("%d",&nsir1);
for (i=0;i<nsir1;i++){ printf("sir1[%d]",i);
scanf("%ld",&sir1[i]); }
printf("Dati numarul de elem din sirul 2");
scanf("%d",&nsir2);
for (i=0;i<nsir2;i++){
printf("sir2[%d]",i);
scanf("%ld",&sir2[i]);}}
//pb.pp
#include <stdio.h>
long int sir[30];
int nr_elem;
void citire(){int i;
printf("Numarul de elemente:");
scanf("%d",&nr_elem);
for (i=0;i<nr_elem;i++){
printf("elem[%d]:",i); scanf("%ld",&sir[i]);}}