DUzun's Web
Programare, proiecte personale, divertisment

DUzun it's ME
 
\ 08 aprilie 2025, 22:21:14 \  
Conținut

asm_hex.PAS

 
Program Functii_ASM_in_Pascal;
uses crt;
var w: word;
    l: longint;
    r: real;
function sqr_(n: word): longint; assembler;
asm
   mov ax, n
   imul n
   {Rezultatul functiei este dx:ax, tocmai rezultatul inmultirii}
   {
(*Daka compilatorul e pe 32biti, trebuie de adaugat urmatorul cod:*)
   xchg ax, dx
   shl eax, 8
   mov ax, dx
   }
end;
function HexChr: Char; assembler; {Converteste valoarea din AL in cifra hexazecimala}
{Observati ca aceasta functie nu are nici un argument!
 De fapt argumentul este registrul al,
 care serveste si pentru returnarea rezultatului}
label next;
asm
      and al, 00Fh { Se taie doar ultimul semioctet }
      or  al, 030h { Se aduna Ord('0') }
      cmp al, 039h
      jle next     { Daca este cifra zecimala }
      add al, 7    { Daca nu este cifra zecimala }
next:
 {AL este codul cifrei hex}
end;
function HEXByte(n: byte): word; assembler; {Obtine codul ASCII al cifrelor numarului n (2 cifre hex)}
{Orice octet poate fi reprezentat prin 2 cifre hexazecimale.
 Codul ASCII al acestor doua cifre se obtine in AH si AL (AH:AL = AX) }
asm
  mov al, n    {Citim argumentul functiei}
  xor ah, ah   {ah := 0}
  mov dh, 10h  {pentru separarea cifrelor se va folosi catul si restul impartirii la 16}
  div dh       {Semioctetul de sus si de jos se obtin, respectiv, in AH si AL}
  call HexChr; {Obtinem codul ASCII pentru AL in AL}
  xchg ah, al  {AL este cifra hexazecimala}
  call HexChr; {Obtinem codul ASCII pentru a doua cifra}
  {AX contine codul a doua cifre hexazecimale ale n}
end;
function HexStr(p: Pointer; size: word): string;
{Obtine reprezentarea hexazecimala a size octeti din zona de memorie p}
var w: word;
    pc: PChar;
    s: string;
begin
  s := '';
  pc := p;
  pc := pc + size;
  while pc <> p do begin {Prelucrarea se face de la coada}
    pc := pc - 1;
    w := HexByte(ord(pc^));
    s := s + Chr(Hi(w)) + Chr(Lo(w)) + ' ';
  end;
  HexStr := s;
end;
label loop, term;
begin
     clrscr;
     writeln('Dati un nr intreg!');
     write('w = ');
     readln(w);
     l := sqr_(w);
     r := sqrt(w);
     writeln('w^2   = ', l);
     writeln('w^0.5 = ', r:5:2);
     writeln;
     writeln('In memorie:');
     writeln('w: ', HexStr(@w, sizeof(w)) );
     writeln('l: ', HexStr(@l, sizeof(l)) );
     writeln('r: ', HexStr(@r, sizeof(r)) );
     {Afisarea codului tastei apasate pana cand nu se va apasa <ESC>}
     asm
     loop:        { repeat }
       xor AX, AX {   AX := 0 }
       int 16h    {   readkey }
       cmp AL, 27 { until AL = <ESC> }
       je term
       mov AH, 2  {GoToXY}
       XOR BX, BX
       mov DL, 0  {X = 0}
       mov DH, 10 {Y = 10}
       int 10h
       xor AH, AH
       mov DH, 10h
       div DH       {Semioctetul de sus si de jos se obtin, respectiv, in AH si AL}
       mov DH, AH   {salvam AH pentru mai tarziu}
       call HexChr; {Obtinem codul ASCII pentru AL in AL}
       mov AH, 0Eh; int 10h {Afisarea}
       mov AL, DH   {intoarcem valoarea salvata mai devreme in AH}
       call HexChr; {Obtinem codul ASCII pentru a doua cifra}
       mov AH, 0Eh; int 10h {Afisarea}
       jmp loop
     term:
     end;
end.

Aici acumulez programe şi algoritmi interesanti alcătuiţi de mine (cu mici excepţii) pe parcursul studierii unor limbaje de programare.

Cea mai mare parte din ele sunt realizate în Pascal. 

Nu am scopul creării unui curs specializat sau a descrierii detaliate a anumitor limbaje, ci doar prezint informaţii utile, plus ceva exemple interesante...

 

Răsfoitorul de fișiere (File Browser):

Codul sursă al programelor este organizat în mape şi fişiere.

Paginile care conțin cod sursă de programe de regulă au un răsfoitor de fișiere în partea stangă a paginii reprezentat de un bloc cu titlul „File Browser”.

Pentru a vizualiza un program sau conţinutul unei mape, faceţi click pe numele fişierului / mapei. Dacă fişierul nu este textual, el se va descărca automat, iar dacă este textual, conținutul lui se va afișa într-un bloc pe centrul paginii.

Pentru a descărca un fişier, faceţi click pe dimensiunea (size) lui.

arr_d Limba / Language


 


arr_r Login
 
 
Loading...