+ All Categories
Home > Documents > Curs Virusologie - Part I

Curs Virusologie - Part I

Date post: 26-Jul-2015
Category:
Upload: cookie503
View: 102 times
Download: 2 times
Share this document with a friend
143
TEHNOLOGII VIRUS SI ANTI-VIRUS
Transcript
Page 1: Curs Virusologie - Part I

TEHNOLOGII VIRUS SI ANTI-VIRUS

Page 2: Curs Virusologie - Part I

Forma de organizare:

Activitate didactica: Curs 50% + Laborator 50%15 ore 15 ore

Limba de predare: Romana

Modalitate evaluare: Examen scris in sesiune (3 ore)

Obiectiv: Însuşirea elementelor teoretice si principiilor practice privind dezvoltarea tehnologiilor virus si anti-virus utilizând limbajul de asamblare 8086 si limbajul C

Page 3: Curs Virusologie - Part I

TEHNOLOGII VIRUS SI ANTI-VIRUS

SecŃiunea I – Limbaj de asamblare•Introducere in structura unui program assembler - Exemplu•Reprezentare interna si tipuri de date•Registrii microprocesor 8086 si mod de adresare real•Categorii de instrucŃiuni, tipuri de adresari•Codificarea instrucŃiunilor•InstrucŃiuni 8086•Structuri fundamentale de control•Proceduri•Macrodefinitii•Întreruperi si lucrul cu consola si discul•OperaŃii cu şiruri de caractere•(Coprocesorul matematic)

SecŃiunea II – Viruşi•Principii de dezvoltare virusi informatici•Virusi de fisiere:

–Fisiere sursa–Fisiere executabile – pe diferite platforme (DOS, Windows, Linux)

•Virusi de Boot•Tehnici avansate de construire virusi informatici (polimorfi, mecanisme anti anti-virus)

SecŃiunea III – Anti-Virus•Model de dezvoltare

Page 4: Curs Virusologie - Part I

BIBLIOGRAFIE

SecŃiunea I – Limbaj de asamblare• Microsoft MASM – Programmer’s Guide, Microsoft Corporation, 1992.

• Ion IVAN, Doru CAZAN, Paul POCATILU – “Practicadezvoltarii in limbaje de asamblare”, Editura Economica, 2004.

• Gheorghe MUSCA – “Programare în limbaj de Asamblare”, Editura Teora, Bucureti 1997.

SecŃiunea II – Viruşi• Mark LUDWIG – The Giant Black Book of Computer Viruses, Editura American Eagle Publications, 1995.

• Mark LUDWIG - The Little Black Book of Computer Viruses, Editura American Eagle Publications, 1994.

SecŃiunea III – Anti-Virus• Mark LUDWIG – The Giant Black Book of Computer Viruses, Editura American Eagle Publications, 1995.

Page 5: Curs Virusologie - Part I

I.1 INTRODUCERE IN STRUCTURA UNUIPROGRAM ASSEMBLER - EXEMPLU

#include<stdio.h>

void main(){

char a = 7, b = 9;short int c;c = a+b;

}

.model small

.stack 16

.dataa db 7b db 9c dw ?

.codestart:

mov AX, @datamov DS, AX

mov AL,aadd AL,bmov c,AX

mov AX, 4C00hint 21h

end start

MicroProcessor RAM

BUS

Paşi în dezvoltare unui program ASM 8086

1. Editare D:\CursV\P1ASM\P1.asm2. Compilare: D:\CursV\ P1ASM \TASM\TASM.exe P1.asm3. Link-editare:

D:\Temp\ CursV\ P1ASM\TASM\TLINK.exe Ex1.objD:\Temp\ CursV\ P1ASM \TASM\TLINK.exe /Tdc Ex1.obj

4. Depanare: D:\Temp\ CursV\ P1ASM\TASM\TD.exe Ex1.exeD:\Temp\ CursV\ P1ASM\TASM\TD.exe Ex1.com

Page 6: Curs Virusologie - Part I

I.2 REPREZENTARE INTERNĂ şi TIPURI de DATE

a) Întregi� Fără semn� Cu semn� BCD (Binary Code Decimal)

� Împachetat� Despachetat

b) Reale� Virgula fixă� Virgula mobilă

c) Alfanumerice

Page 7: Curs Virusologie - Part I

0010 000020h32

BINARHEXAZECIMAL

a)NUMERE ÎNTREGI

- Cu semn

1110 0000FFE0h-32

BINARHEXAZECIMAL

- BCD (Binary Code Decimal)

- Făra semn

- Împachetat

0011 001032h32

BINARHEXAZECIMAL

- Despachetat

0000 0011 0000 00100302h32

BINARHEXAZECIMAL

I.2 REPREZENTARE INTERNĂ şi TIPURI de DATE

Page 8: Curs Virusologie - Part I

b)NUMERE REALE

-1.11101*2101 semn

parte întreagă parte zecimală

exponent

- Forma binara

- Forma generala

(-1)S*M*2(E-Bias)

S – Bit de semn; are valoarea 0 pentru pozitiv si 1 pentru negativ;M – Mantisa; este normalizata; are valori cuprinse in intervalul [1.00…0 , 1.11…1]; primele 2 formate nu maireprezinta intern primul bit egal cu 1E – Exponent; reprezinta forma binara a exponentului; utilizat pentru a reface forma zecimala a numarului;Bias – permite reprezentarea valorilor negative ale exponentului; faciliteaza comparatia intre numere reale.

I.2 REPREZENTARE INTERNĂ şi TIPURI de DATE

Page 9: Curs Virusologie - Part I

b)NUMERE REALE (continuare)- Simpla precizie

- Dubla precizie

- Precizie extinsa

parte zecimalăexponentsemn

22 030 2331

parte zecimalăparte zecimalăexponentsemn

31 051 3262 5263

parte zecimalăparte zecimalăîntregexponentsemn

31 062 326378 6479

Bias = 127

Bias = 1023

Bias = 16383

I.2 REPREZENTARE INTERNĂ şi TIPURI de DATE

Page 10: Curs Virusologie - Part I

b)NUMERE REALE (continuare-exemplu)

00000000000000100110000011000011

MANTISAEXPONENTS

-134,25 formă zecimală

bit semn = 1

10000110,01

formă binară

1.000011001 x 27

formă binară normalizată

7 + 127 = 134

exponent = 10000110 mantisă = 000011001

I.2 REPREZENTARE INTERNĂ şi TIPURI de DATE

Page 11: Curs Virusologie - Part I

c)CARACTERE ALFA-NUMERICE- ASCII

6 cifra

6 + 30h = 36h

cod ASCII

cod ASCII caracter ’0’

formă binară

0 0 1 1 0 1 1 0

I.2 REPREZENTARE INTERNĂ şi TIPURI de DATE

Page 12: Curs Virusologie - Part I

a) Byte (1 octet) - DBb) Word (2 octeti) - DWc) Double-Word (4 octeti) - DDd) Quad-Word (8 octeti) - DQe) Ten-Bytes (10 octeti) - DT

I.2 REPREZENTARE INTERNĂ şi TIPURI de DATE

Page 13: Curs Virusologie - Part I

a)BYTE- Spatiu ocupat: 1 octet- Definire: a DB 10- Interpretare:

- Intreg pe 8 biti cu sau fara semn- Caracter ASCII

a DB 10 7 6 5 4 3 2 1 0

0 0 0 0 1 0 1 0

8 biŃi

b)WORD

- Spatiu ocupat: 2 octeti- Definire: a DW 1234h- Interpretare:

- Intreg pe 16 biti cu sau fara semn- Secventa de 2 caractere ASCII- Adresa de memorie pe 16 biti

a DW 1234h 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0

0 0 1 1 0 1 0 0 0 0 0 1 0 0 1 0 1000h 1001h

16 biŃi * partea cea mai putin semnificativa este stocata la adrese mari

adrese

I.2 REPREZENTARE INTERNĂ şi TIPURI de DATE

Page 14: Curs Virusologie - Part I

c)DOUBLE WORD- Spatiu ocupat: 4 octeti- Definire: a DD 12345678h- Interpretare:

- Intreg pe 32 biti cu sau fara semn- Numar real simpla precizie- Adresa de memorie pe 32 biti

32↔29 28↔25 24↔21 20↔17 16↔13 12↔9 8↔5 4↔0

7 8 5 6 3 4 1 2 1000h 1001h 1002h 1003h

h

32 biŃi

* partea cea mai puŃin semnificativa este stocata la adrese mari

adrese

12 34 56 78 A DD

I.2 REPREZENTARE INTERNĂ şi TIPURI de DATE

Page 15: Curs Virusologie - Part I

d)QUAD-WORD- Spatiu ocupat: 8 octeti- Definire: a DQ 123456789123- Interpretare:

- Intreg pe 64 biti cu sau fara semn- Numar real dubla precizie

a DW 123456789123

64? 61 60? 57 56? 53 52? 49 48? 45 … 20? 17 16? 13 12? 9 8?5 4? 0

8 3 1 A 9 9 B E 1 C 0 0 0 0 0 0 1000h 1001h 1002h 1003h 1004h 1005h 1006h 1007h

64 biŃi

* partea cea mai putin semnificativa este stocata la adrese mari

adrese

In hexa a are valoarea 1CBE991A83h

I.2 REPREZENTARE INTERNĂ şi TIPURI de DATE

Page 16: Curs Virusologie - Part I

e)TEN-BYTES- Spatiu ocupat: 10 octeti- Definire: a DT 1547.213- Interpretare:

- Intreg pe 80 biti cu sau fara semn- Numar real precizie extinsa- Valoare din registrul coprocesorului (ST)

I.2 REPREZENTARE INTERNĂ şi TIPURI de DATE

Page 17: Curs Virusologie - Part I

Pentru octetul 10010100 o aplicaŃie îl poate interpreta ca:- Număr zecimal pozitiv: 148- Număr zecimal negativ: -108- BCD împachetat: 94h- Codul ASCII: 64h – ‘A’

I.2 REPREZENTARE INTERNĂ şi TIPURI de DATE

4h9h

202122232425262700101001

01234567

Page 18: Curs Virusologie - Part I

I.3 REGIŞTRII MICROPROCESOR 8086 şi MOD de ADRESARE REAL

Mod de adresare real

Mod de adresare protejat implementat de la 80386

DI

SI

SP

BP

DLDH

CLCH

BLBH

ALAH

7 015 8

ES

SS

DS

CS

15 0

IP

Flag

15 0

TOATE PROCESOARELE80286-80486

CPAZSTIDOIOPN

0123456789101112131415

Procesor 8088 - 80286

DATE

COD

STIVA

RAMAX:

BX:

CX:

DX:

Page 19: Curs Virusologie - Part I

I.3 REGIŞTRII MICROPROCESOR 8086 şi MOD de ADRESARE REAL

MICROPROCESOR 8086

MEMORIE

1 MByte

SEGMENTE cu dimensiune = 64KB

ADRESE 20 biti

Spaţţţţiu de 64 KB

0FFFFh…0000

OFFSET SEGMENT

Microprocesorul 8086 are regiştrii pe 16 biŃi -> poate codifica adrese în domeniul 0000h : 0FFFFh ->poate gestiona zone de memorie de maxim 64 KB

Page 20: Curs Virusologie - Part I

I.3 REGIŞTRII MICROPROCESOR 8086 şi MOD de ADRESARE REAL

Pentru adresarea unui octet de memorie sunt necesare 2 informaŃii pe 16 biŃi:� adresa segmentului, conŃinuta intr-un registru de segment;� deplasamentul in cadrul segmentului, offset.

:OFFSET16 biti

SEGMENT16 biti

0FFFFh…18A3h…0000h

64KB…64KB…64KB

…0FFFFh…05B27h…0001h0000h…0FFFFh…0000h

Page 21: Curs Virusologie - Part I

3hAh8h1h

1100010100011000

0123456789101112131415Formarea adresei fizice pe 20 biti se realizeaza automat prin hardware de catre o componenta a procesorului:

I.3 REGIŞTRII MICROPROCESOR 8086 şi MOD de ADRESARE REAL

0h3hAh8h1h

00001100010100011000

012345678910111213141516171819

←←←← 4 biti

7h2hBh5h

1110010011011010

0123456789101112131415

7h5h5hEh1h

11101010101001111000

012345678910111213141516171819

+: OFFSETSEGMENT

ADRESA FIZICA

Page 22: Curs Virusologie - Part I

Utilizat in operaŃiile cu şiruri pentru a parcurge sursa.Destination IndexDI

Utilizat in operaŃiile cu şiruri pentru a parcurge sursa.Source IndexSI

REGISTRE INDEX

OperaŃii de intrare/ieşire, înmulŃire/împărŃire.Data RegisterDX

Utilizat in instrucŃiunile de ciclareCount RegisterCX

Utilizat ca indexBase RegisterBX

Calcule şi operaŃii de intrare/ieşireAccumulator RegisterAX

REGISTRE DE BAZĂ

I.3 REGIŞTRII MICROPROCESOR 8086 şi MOD de ADRESARE REAL

Page 23: Curs Virusologie - Part I

Utilizat pentru a transfera în/din stivă date.Base PointerBP

Număr pe 16-biŃi ce reprezintă offeset-ul din cadrul stivei.Stack PointerSP

Număr pe 16-biŃi ce reprezintă offeset-ul instrucŃiunii următoare de executat în cadrul segmentului de cod.

InstructionPointerIP

REGISTRE INDEX

Număr pe 16-biŃi ce reprezintă adresa segmentului suplimentar activ.Extra SegmentES

Număr pe 16-biŃi ce reprezintă adresa segmentului de stivă activ.Stack SegmentSS

Număr pe 16-biŃi ce reprezintă adresa segmentului de date activ. Data SegmentDS

Număr pe 16-biŃi ce reprezintă adresa segmentului de cod activ. Code SegmentCS

REGISTRE DE SEGMENT

I.3 REGIŞTRII MICROPROCESOR 8086 şi MOD de ADRESARE REAL

Page 24: Curs Virusologie - Part I

0Carry FlagCF

2Parity FlagPF

4Auxiliary CarryAF

6Zero FlagZF

7Sign FlagSF

8Trap FlagTF

9Interrupt FlagIF

10Direction FlagDF

11Overflow FlagOF

Nr. bitNumeAbr.

Registru de FLAG-uri

Un registru pe 16 biŃi numit registru FLAG este utilizat pentru a controla execuŃia instrucŃiunilor. Flag-urile reprezintă biŃi ce pot avea valoarea 1 (SET) sau 0 (NOT SET).

I.3 REGIŞTRII MICROPROCESOR 8086 şi MOD de ADRESARE REAL

Page 25: Curs Virusologie - Part I

Categorii de instructiuni:a) De transferb) Aritmetico-logicec) De deplasare si rotatied) De salt neconditionat si conditionate) Sir de caractere

Tipuri de adresare:a) Imediatab) Directac) Indirectad) Bazat sau indexatae) Bazat si indexata

I.4 CATEGORII de INSTRUCłIUNI, TIPURI de ADRESĂRI

Page 26: Curs Virusologie - Part I

a)INSTRUCTIUNI DE TRANSFER

I.4 CATEGORII de INSTRUCłIUNI, TIPURI de ADRESĂRI

MOV destinaŃie, sursa•copiază valoarea de la sursă la destinaŃie•sursa si destinaŃia nu sunt

•ambele operanzi in memorie•registrul de flag sau registrul IP•de dimensiuni diferite

•registrul CS nu poate apărea în destinaŃie

PUSH sursa•copiază valoarea pe stivă•sursa are valoare pe 16 biŃi

POP destinaŃie•extrage valoarea de pe stivă şi o salvează în destinaŃie•destinaŃia are valoare pe 16 biŃi

Page 27: Curs Virusologie - Part I

Procesor 8088 - 80286

I.4 CATEGORII de INSTRUCłIUNI, TIPURI de ADRESĂRI

CODSTIVĂDATE

DS:0000 :SPSS :IPCS

valoare adrese valoare adresevaloare adrese

EXEMPLU:

MOV AX, 1234hMOV BX, 5678hMOV CX, 9ABCh

PUSH AX (I)PUSH BX (II)PUSH CX (III)POP CX (IV)POP AX (V)POP BX (VI)

----

SS:1288SS:1286SS:1284SS:1282

CX

BX

AX

9ABCh

5678h

1234h

15 0

Page 28: Curs Virusologie - Part I

Procesor 8088 - 80286

I.4 CATEGORII de INSTRUCłIUNI, TIPURI de ADRESĂRI

CODSTIVĂDATE

DS:0000 :SPSS :IPCS

valoare adrese valoare adresevaloare adrese

EXEMPLU:

MOV AX, 1234hMOV BX, 5678hMOV CX, 9ABCh

PUSH AX (I)PUSH BX (II)PUSH CX (III)POP CX (IV)POP AX (V)POP BX (VI)

-3412h--

SS:1288SS:1286SS:1284SS:1282

CX

BX

AX

9ABCh

5678h

1234h

15 0

Page 29: Curs Virusologie - Part I

Procesor 8088 - 80286

I.4 CATEGORII de INSTRUCłIUNI, TIPURI de ADRESĂRI

CODSTIVĂDATE

DS:0000 :SPSS :IPCS

valoare adrese valoare adresevaloare adrese

EXEMPLU:

MOV AX, 1234hMOV BX, 5678hMOV CX, 9ABCh

PUSH AX (I)PUSH BX (II)PUSH CX (III)POP CX (IV)POP AX (V)POP BX (VI)

-1234h7856hBC9Ah

SS:1288SS:1286SS:1284SS:1282

CX

BX

AX

9ABCh

5678h

1234h

15 0

Page 30: Curs Virusologie - Part I

Procesor 8088 - 80286

I.4 CATEGORII de INSTRUCłIUNI, TIPURI de ADRESĂRI

CODSTIVĂDATE

DS:0000 :SPSS :IPCS

valoare adrese valoare adresevaloare adrese

EXEMPLU:

MOV AX, 1234hMOV BX, 5678hMOV CX, 9ABCh

PUSH AX (I)PUSH BX (II)PUSH CX (III)POP CX (IV)POP AX (V)POP BX (VI)

-3412h7856h-

SS:1288SS:1286SS:1284SS:1282

CX

BX

AX

9ABCh

5678h

1234h

15 0

Page 31: Curs Virusologie - Part I

Procesor 8088 - 80286

I.4 CATEGORII de INSTRUCłIUNI, TIPURI de ADRESĂRI

CODSTIVĂDATE

DS:0000 :SPSS :IPCS

valoare adrese valoare adresevaloare adrese

EXEMPLU:

MOV AX, 1234hMOV BX, 5678hMOV CX, 9ABCh

PUSH AX (I)PUSH BX (II)PUSH CX (III)POP CX (IV)POP AX (V)POP BX (VI)

-3412h--

SS:1288SS:1286SS:1284SS:1282

CX

BX

AX

9ABCh

5678h

5678h

15 0

Page 32: Curs Virusologie - Part I

Procesor 8088 - 80286

I.4 CATEGORII de INSTRUCłIUNI, TIPURI de ADRESĂRI

CODSTIVĂDATE

DS:0000 :SPSS :IPCS

valoare adrese valoare adresevaloare adrese

EXEMPLU:

MOV AX, 1234hMOV BX, 5678hMOV CX, 9ABCh

PUSH AX (I)PUSH BX (II)PUSH CX (III)POP CX (IV)POP AX (V)POP BX (VI)

----

SS:1288SS:1286SS:1284SS:1282

CX

BX

AX

9ABCh

1234h

5678h

15 0

Page 33: Curs Virusologie - Part I

a)INSTRUCTIUNI DE TRANSFER

I.4 CATEGORII de INSTRUCłIUNI, TIPURI de ADRESĂRI

XCHG destinaŃie, sursa•interschimbă valorile;•sursa si destinatia nu sunt registre de segment;•cel putin unul dintre operanzi trebuie sa fie registru;

IN registru acumulator, sursa•transferă un byte sau un word de la un port la registrul acumulator (AX, AL sau AH);•sursa este DX sau o constantă pe 8 biŃi (pentru porturi mai mici de 255);

OUT destinaŃie, registru acumulator•transferă un byte sau un word de la registrul acumulator (AX, AL sau AH) la un port;•portul destinaŃie este indicat de DX sau o constantă pe 8 biŃi (pentru porturi mai mici de 255);

Page 34: Curs Virusologie - Part I

a)INSTRUCTIUNI DE TRANSFER

I.4 CATEGORII de INSTRUCłIUNI, TIPURI de ADRESĂRI

LEA destinaŃie, sursa•transferă offset-ul sursei în destinaŃie;•destinaŃia trebuie sa fie registru;•este echivalenta cu instrucŃiunea: MOV destinaŃie, offset sursa;

LDS/LES destinaŃie, sursa•transferă offset-ul sursei în destinaŃie; adresa segmentului este salvată în registrul segment asociat (DS pentru LDS, ES pentru LES) •destinaŃia trebuie sa fie registru;

Page 35: Curs Virusologie - Part I

a)INSTRUCTIUNI DE TRANSFER

I.4 CATEGORII de INSTRUCłIUNI, TIPURI de ADRESĂRI

LAHF•transfera valoarea flag-urilor de la 0 la 7 in AH;

SAHF•transfera valoarea registrului AH in registrul de flag-uri pestebitii de la 0 la 7;

PUSHF•transfera valoarea registrului de flag-uri pe stiva;

POPF•transfera valoarea din varful stivei in registrului de flag-uri;

Page 36: Curs Virusologie - Part I

I.4 CATEGORII de INSTRUCłIUNI, TIPURI de ADRESĂRI

a)ADRESARE IMEDIATĂ

Registrele sunt iniŃializate cu valori constante

MOV AX,1 ;copiază în AX valoarea 1

b)ADRESARE DIRECTĂNumele variabilei este utilizat ca operand în instrucŃiune.

VB dw 10… ;copiază în AX valoarea variabilei vbMOV AX,vb ;la asamblare vb este inlocuit de deplasament

Valoarea offset-ului este utilizată pentru a citi date direct din segmentul de date.

.dataVB dw 10

.code…MOV AX,DS:[0000] ;copiază în AX valoarea 10

Page 37: Curs Virusologie - Part I

I.4 CATEGORII de INSTRUCłIUNI, TIPURI de ADRESĂRI

c)ADRESARE INDIRECTA

Utilizare registru baza sau index pentru a retine adresa zonei de date

.dataVB dw 10

.code…MOV SI,offset VB ;initializez SI cu adresa lui vbMOV AX,[SI] ;copiază în AX valoarea variabilei vb

sau

…MOV BX,offset VB ;initializez BX cu adresa lui vbMOV AX,[BX] ;copiază în AX valoarea variabilei vb

Page 38: Curs Virusologie - Part I

d)ADRESARE BAZATA sau INDEXATAUtilizare registru baza sau index si a unui deplasament pentru a accesazone de memorie aflate la o anumita distanta fata de un reper

.datavector dw 10,11,12

.code…MOV SI,offset vector ;initializez SI cu adresa vectoruluiMOV AX,[SI+2] ;copiază în AX valoarea 11

sau

…MOV BX,4 ;initializez BX cu valoarea 4 MOV AX,val[BX] ;copiază în AX valoarea 12

I.4 CATEGORII de INSTRUCłIUNI, TIPURI de ADRESĂRI

Page 39: Curs Virusologie - Part I

I.4 CATEGORII de INSTRUCłIUNI, TIPURI de ADRESĂRI

e)ADRESARE BAZATA si INDEXATAUtilizare registru baza si index pentru a accesa zone de memorie aflate la o anumita distanta fata de un reper

.datavector dw 10,11,12,13,14

.code…MOV BX,offset vector ;initializez BX cu adresa vectoruluiMOV SI, 2 ;initializez SI cu valoarea 2MOV AX,[BX][SI] ;copiază în AX valoarea 11

sau

…MOV SI,4 ;initializez SI cu valoarea 4MOV BX,offset vector ;initializez BX cu adresa vectoruluiMOV AX,[BX][SI][2] ;copiază în AX valoarea 13

Page 40: Curs Virusologie - Part I

b)INSTRUCTIUNI ARITMETICO-LOGICE

I.4 CATEGORII de INSTRUCłIUNI, TIPURI de ADRESĂRI

Instructiunile aritmetice modifica registrul de flag•CF = 1 daca e transport/imprumut din/in bitul cel maisemnificativ (bit 7 pentru BYTE sau 15 pentru WORD) al rezultatului;•AF =1 daca e transport/imprumut din/in bitul 4 al rezultatului(valabil pentru BCD);•ZF = 1 daca rezultatul operatiei este nul;•SF = 1 daca bitul de semn (bit 7 pentru BYTE sau 15 pentruWORD) este 1;•PF = 1 daca suma modulo 2 a celor 8 biti mai putinisemnificativi ai rezultatului este 0;•OF = 1 daca rezultatul operatiei este prea mare sau prea micpentru a fi stocat in destinatie;

DacaDaca sumasuma dintredintre 2 2 operanzioperanzi cu cu semnsemn de tip BYTE de tip BYTE depasestedepaseste 127 127 sausau esteeste maimai mica mica decatdecat --127 127 procesorulprocesorul seteazaseteaza OF. OF. DacaDaca sumasumadepasestedepaseste 255 255 procesorulprocesorul seteazaseteaza CF.CF.

Page 41: Curs Virusologie - Part I

b)INSTRUCTIUNI ARITMETICO-LOGICE

I.4 CATEGORII de INSTRUCłIUNI, TIPURI de ADRESĂRI

AL = 28 şi CF=1

AH = 142

AL = 142AL = -114 si OF=1

AL = 103AL = 103

AL = 27AL = 27

AL = 26AL = 26

Interpretare f ără semnInterpretare cu semn

REZULTAT.dataVb DB 39.code

MOV AL,26

INC AL

ADD AL,76

ADD AL, vb

MOV AH,AL

ADD AL,AH

Page 42: Curs Virusologie - Part I

AL = 86 si OF = 1

AH = 119

AL = 205 si SF=1AL = -51

AL = 71AL = 71

AL = 94AL = 94

AL = 95AL = 95

Interpretare f ără semnInterpretare cu semn

REZULTAT.dataVb DB 122.code

MOV AL,95

DEC AL

SUB AL,23

SUB AL, vb

MOV AH,119

SUB AL,AH

b)INSTRUCTIUNI ARITMETICO-LOGICE

I.4 CATEGORII de INSTRUCłIUNI, TIPURI de ADRESĂRI

Page 43: Curs Virusologie - Part I

b)INSTRUCTIUNI ARITMETICO-LOGICE

I.4 CATEGORII de INSTRUCłIUNI, TIPURI de ADRESĂRI

ADD destinaŃie, sursă•adună la operandul destinaŃie valoarea operandului sursă;•adunarea se realizează pe 16 biŃi;•operanzii sunt considerati fara semn;•permite multiple combinaŃii de tipuri ale sursei şi destinaŃiei (registru, valoare imediată, locaŃie de memorie) însă exclude situaŃiile:

•destinaŃia nu poate fi segmentul CS; •destinaŃia şi sursa nu pot fi în acelaşi timp operanzi din memorie (variabile definite în segmentul de date); •dacă sursa este o valoare imediată (constantă valorică), destinaŃia nu poate fi unul dintre registrele de segment (CS, DS, ES, SS); •destinaŃia nu poate fi un operand imediat (constantă valorică);

•daca rezultatul sumei este mai mare decat capacitatea destinatiei atuncieste setat CF; valoarea acestuia este preluata prin utilizarea instructiuniiADC (Add with carry).

Page 44: Curs Virusologie - Part I

b)INSTRUCTIUNI ARITMETICO-LOGICE

I.4 CATEGORII de INSTRUCłIUNI, TIPURI de ADRESĂRI

SUB destinaŃie, sursă•scade din operandul destinaŃie valoarea operandului sursă;•adunarea se realizează pe 16 biŃi;•operanzii sunt considerati fara semn;•permite multiple combinaŃii de tipuri ale sursei şi destinaŃiei (registru, valoare imediată, locaŃie de memorie) însă exclude situaŃiile:

•destinaŃia nu poate fi segmentul CS; •destinaŃia şi sursa nu pot fi în acelaşi timp operanzi din memorie (variabile definite în segmentul de date); •dacă sursa este o valoare imediată (constantă valorică), destinaŃia nu poate fi unul dintre registrele de segment (CS, DS, ES, SS); •destinaŃia nu poate fi un operand imediat (constantă valorică);

•daca rezultatul sumei este mai mare decat capacitatea destinatiei atuncieste setat CF; valoarea acestuia este preluata prin utilizarea instructiuniiSBC (Substract with carry).

Page 45: Curs Virusologie - Part I

b)INSTRUCTIUNI ARITMETICO-LOGICE

I.4 CATEGORII de INSTRUCłIUNI, TIPURI de ADRESĂRI

MUL operand•multiplică o valoare unsigned din AL (când operandul este de tip byte) sau din AX (când operandul este de tip word) cu valoarea operandului specificat; •rezultatul este returnat în AX când operandul este de tip byte şi în DX:AX (cei 2 octeŃi superiori în DX) când acesta este de tip word;•registru FLAG modificat: OF şi CF sunt setaŃi dacă partea superioară a rezultatului (DX dacă operandul este de tip word, sau AH este de tip byte) este diferită de 0;alte flag-uri SF, ZF, AF, PF;•operandul poate fi alt registru sau o variabilă;•dacă valoarea înmulŃită are semn atunci se utilizează IMUL;

Page 46: Curs Virusologie - Part I

b)INSTRUCTIUNI ARITMETICO-LOGICE

I.4 CATEGORII de INSTRUCłIUNI, TIPURI de ADRESĂRI

DIV impartitor•realizeaza impartire cu rest valoarea de la sursă la destinaŃie;•impartitorul poate fi alt registru sau o variabilă;•operanzii sunt considerati fara semn•pentru a realiza impartire cu operanzi cu semn se utilizeaza IDIV

DXAX16 bi ŃiDX:AX32 bi Ńi

AHAL8 bi ŃiAX16 bi Ńi

RestCâtImpartitorDeîmpartitTip operanzi

CBWCWD

Page 47: Curs Virusologie - Part I

b)INSTRUCTIUNI ARITMETICO-LOGICE

I.4 CATEGORII de INSTRUCłIUNI, TIPURI de ADRESĂRI

NEG operand•utilizat pentru a nega operandul, scăzând-ul din valoarea 0;•operandul trebuie să fie registru sau variabilă;

Page 48: Curs Virusologie - Part I

I.5 CODIFICAREA INSTRUCTIUNILOR

deplasament sau adresă directă

octet superior octet inferior

0, 1 sau 2 bytes

date imediate

octet superioroctet inferior

0, 1 sau 2 bytes

codul unei instrucŃiuni are minim 1 octet si maxim 6 octeŃi

identific ă al doilea operand de tip registru sau un registru care particip ă la formarea adresei efective

register/memoryr/m

identific ă registrul utilizat în instruc Ńiuneregisterreg

codific ă modul de adresaremodemod

pt. w = 1 operanzii sunt de tip wordpt. w = 0 operanzii sunt de tip byte

word/byte bitw

pt. d = 1 sensul opera Ńiei este memorie → registru (identificat de reg)pt. d = 0 sensul opera Ńiei este registru → memorie sau registru →registru (sursa este indicata de reg)

direction bitd

are valoare predefinit ăcod

r/mregmodwdcod instrucŃiune

1 sau 2 bytes

Page 49: Curs Virusologie - Part I

I.5 CODIFICAREA INSTRUCTIUNILOR

r/mregmodwdcod instrucŃiune

1 sau 2 bytes

deplasament sau adresă directă

octet superior octet inferior

0, 1 sau 2 bytes

date imediate

octet superioroctet inferior

0, 1 sau 2 bytes

codul unei instrucŃiuni are minim 1 octet si maxim 6 octeŃi

BHDIDS:[BX+deplas16]DS:[BX+deplas8]DS:[BX]111

DHSISS:[BP+deplas16]SS:[BP+deplas8]SS:[BP]110

CHBPDS:[DI+deplas16]DS:[DI+deplas8]DS:[DI]101

AHSPDS:[SI+deplas16]DS:[SI+deplas8]DS:[SI]100

BLBXSS:[BP+DI+deplas16]SS:[BP+DI+deplas8]SS:[BP+DI]011

DLDXSS:[BP+SI+deplas16]SS:[BP+SI+deplas8]SS:[BP+SI]010

CLCXDS:[BX+DI+deplas16]DS:[BX+DI+deplas8]DS:[BX+DI]001

ALAXDS:[BX+SI+deplas16]DS:[BX+SI+deplas8]DS:[BX+SI]000

w = 0w =1r/m

11*100100

mod

BHDI111

DHSI110

CHBP101

AHSP100

BLBX011

DLDX010

CLCX001

ALAX000

w = 0w =1reg

*pentru mod = 11, instrucŃiunea are doi operanzi de tip registru, iar r/m specifică registrul sursă.

Page 50: Curs Virusologie - Part I

I.6 CATEGORII de INSTRUCłIUNI

c)INSTRUCTIUNI de ROTATIE

•RCR – Rotate through Carry Right

←←←←←←←←←←←←←←←←←←←←←←←←←←←←←←←←

07

← 0CF

•SHL/SAL – Shift Left/Shift Arithmetic Left •SHR – Shift Right

→→→→→→→→

07

0 →CF

•SAR – Shift Arithmetic Right

→→→→→→→→

07

CF

•ROL – Rotate Left •ROR – Rotate Right

←←←←←←←←←←←←←←←←←←←←←←←←←←←←←←←←

07

CF→→→→→→→→

07

CF

•RCL – Rotate through Carry Left

←←←←←←←←←←←←←←←←←←←←←←←←←←←←←←←←

07

CF→→→→→→→→

07

CF

Page 51: Curs Virusologie - Part I

I.7 STRUCTURI DE CONTROL

a)InstrucŃiunea CMP– Compara doua valori prin intermediul unei sc ăderi virtuale;– Operanzii nu isi modifica valorile;– Flag-urile (din registrul de flag-uri) sunt seta Ńi pentru a reflecta

rezultatul opera Ńiei de sc ădere.

BiŃi de flag afectaŃi:– OF (overflow)– SF (sign)– ZF (zero)– PF (parity)– CF (carry)

Tipul operanzilor– register / register– register / memory– register / immediate– memory / register

Page 52: Curs Virusologie - Part I

Exemple instrucŃiunea CMP

AX = 10, BX = -12

• CMP AX, BX– AX – BX = +22

• CMP BX, AX– BX – AX = -22

• CMP AX, AX– AX – AX = 0

Stare flag-uri:

• SF=0, CF=1, OF=0, ZF=0

• SF=1, CF=0, OF=0, ZF=0

• SF=0, CF=0, OF=0, ZF=1

I.7 STRUCTURI DE CONTROL

Page 53: Curs Virusologie - Part I

b)Salturi condiŃionate

JNGE or JLJNAE<

JNGJNA<=

JNLE ori JGJNBE ori JA>

JNLJNB>=

JE ori JZJE or JZ= ori ==

JNE ori JNZJNE or JNZ<> ori !=

Unul dintre operanzi este cu semn

Ambii operanzi sunt consideraŃi fără semn

OperaŃie

I.7 STRUCTURI DE CONTROL

Page 54: Curs Virusologie - Part I

c)Tipuri de structuri logice

• IF-THEN• IF-THE-ELSE• REPEAT• DO-WHILE• WHILE-DO• CASE

In assembler se implementează utilizând instrucŃiunea CMP si salturi condiŃionate

I.7 STRUCTURI DE CONTROL

Page 55: Curs Virusologie - Part I

Structura de control IF-THEN

LIMBAJ EVOLUAT

if (op1 == op2) {

< expresie 1 >< expresie 2 >

}

ASSEMBLER

cmp op1, op2jne false<expresie 1><expresie 2>

false: <restul programului>

I.7 STRUCTURI DE CONTROL

Page 56: Curs Virusologie - Part I

Structura de control IF-THEN-ELSE

LIMBAJ EVOLUAT

if (op1 > op2){

< expresie 1 >< expresie 2 >

}else{

< expresie 3 >< expresie 4 >

}

ASSEMBLER

cmp op1, op2jle else< expresie 1 >< expresie 2 >jmp done

else: < expresie 3 >< expresie 4 >

done:

I.7 STRUCTURI DE CONTROL

Page 57: Curs Virusologie - Part I

Structura de control REPEAT

LIMBAJ EVOLUAT

for(initializare;op1<op2; iteratie)

{<expresie 1><expresie 2>

}

ASSEMBLER

<initializare>repeat:

cmp op1,op2jae final<expresie 1><expresie 2><iteratie>jmp repeat

final:

I.7 STRUCTURI DE CONTROL

Page 58: Curs Virusologie - Part I

Structura de control DO-WHILE

LIMBAJ EVOLUAT

do{

<expresie 1><expresie 2>

} while (op1 != op2)

ASSEMBLER

do:<expresie 1><expresie 2>cmp op1,op2jnz do

I.7 STRUCTURI DE CONTROL

Page 59: Curs Virusologie - Part I

Structura de control DO-WHILE particulara

LIMBAJ EVOLUAT

i=n;do{

<expresie 1><expresie 2>i=i-1;

} while (i>=0)

ASSEMBLER

mov cx,nrepeat:

<expresie 1><expresie 2>loop repeat

I.7 STRUCTURI DE CONTROL

Loop trebuie să specifice un short jump (între -127 şi +127 bytes de la poziŃia curentă)

Page 60: Curs Virusologie - Part I

Structura de control CASE (SWITCH)

LIMBAJ EVOLUAT

switch (valoare) {case constanta1:

<expresie 1>break;

case constanta2:<expresie 2>break;

…default:

<expresie>

ASSEMBLER

cmp valoare,constanta1je case1cmp valoare,constanta2je case2…jmp default

case1:<expresie 1>jmp final

case2:<expresie 2>Jmp final

…default:

<expresie>final:

I.7 STRUCTURI DE CONTROL

Page 61: Curs Virusologie - Part I

DS

IP

DI

SI

SP

BP

DX

CX

BX

AX

15 0

Procesor 8088 - 80286

.model small

.stack 10h

.datan dw 4vector dw 23,16,35,12suma dw ?

.codeSTART:

0000 B8 0000s mov AX,@data0003 8E D8 mov DS,AX

0005 33 C9 xor CX,CX0007 8B 0E 0000r mov CX, n000B BB 0002r mov BX, offset vector000E 33 C0 xor AX,AX0010 33 F6 xor SI,SI

0012 REPETA:

0012 03 00 add AX, [BX][SI]0014 46 inc SI0015 46 inc SI0016 E2 FA loop REPETA

0018 A3 000Ar mov suma, AX001B B8 4C00 mov ax, 4C00h001E CD 21 int 21h

end START---------

SS:0010SS:000E000C000A00080006000400020000

0Ch00h23h00h10h00h17h00h04h

0807060504030201DS:00

00h00h00h00h00h

0D0C0B0ADS:09

Zona de stiva

Zonade date

Page 62: Curs Virusologie - Part I

DS

0003hIP

DI

SI

SP

BP

DX

CX

BX

AX

0010h

0000h

DF32h

15 0

Procesor 8088 - 80286

.model small

.stack 10h

.datan dw 4vector dw 23,16,35,12suma dw ?

.codeSTART:

0000 B8 0000s mov AX,@data0003 8E D8 mov DS,AX

0005 33 C9 xor CX,CX0007 8B 0E 0000r mov CX, n000B BB 0002r mov BX, offset vector000E 33 C0 xor AX,AX0010 33 F6 xor SI,SI

0012 REPETA:

0012 03 00 add AX, [BX][SI]0014 46 inc SI0015 46 inc SI0016 E2 FA loop REPETA

0018 A3 000Ar mov suma, AX001B B8 4C00 mov ax, 4C00h001E CD 21 int 21h

end START---------

SS:0010SS:000E000C000A00080006000400020000

0Ch00h23h00h10h00h17h00h04h

0807060504030201DS:00

00h00h00h00h00h

0D0C0B0ADS:09

Zona de stiva

Zonade date

Page 63: Curs Virusologie - Part I

DF32hDS

0005hIP

DI

SI

SP

BP

DX

CX

BX

AX

0010h

0000h

DF32h

15 0

Procesor 8088 - 80286

.model small

.stack 10h

.datan dw 4vector dw 23,16,35,12suma dw ?

.codeSTART:

0000 B8 0000s mov AX,@data0003 8E D8 mov DS,AX

0005 33 C9 xor CX,CX0007 8B 0E 0000r mov CX, n000B BB 0002r mov BX, offset vector000E 33 C0 xor AX,AX0010 33 F6 xor SI,SI

0012 REPETA:

0012 03 00 add AX, [BX][SI]0014 46 inc SI0015 46 inc SI0016 E2 FA loop REPETA

0018 A3 000Ar mov suma, AX001B B8 4C00 mov ax, 4C00h001E CD 21 int 21h

end START---------

SS:0010SS:000E000C000A00080006000400020000

0Ch00h23h00h10h00h17h00h04h

0807060504030201DS:00

00h00h00h00h00h

0D0C0B0ADS:09

Zona de stiva

Zonade date

Page 64: Curs Virusologie - Part I

DF32hDS

0007hIP

DI

SI

SP

BP

DX

CX

BX

AX

0010h

0000h

0h

DF32h

15 0

Procesor 8088 - 80286

.model small

.stack 10h

.datan dw 4vector dw 23,16,35,12suma dw ?

.codeSTART:

0000 B8 0000s mov AX,@data0003 8E D8 mov DS,AX

0005 33 C9 xor CX,CX0007 8B 0E 0000r mov CX, n000B BB 0002r mov BX, offset vector000E 33 C0 xor AX,AX0010 33 F6 xor SI,SI

0012 REPETA:

0012 03 00 add AX, [BX][SI]0014 46 inc SI0015 46 inc SI0016 E2 FA loop REPETA

0018 A3 000Ar mov suma, AX001B B8 4C00 mov ax, 4C00h001E CD 21 int 21h

end START---------

SS:0010SS:000E000C000A00080006000400020000

0Ch00h23h00h10h00h17h00h04h

0807060504030201DS:00

00h00h00h00h00h

0D0C0B0ADS:09

Zona de stiva

Zonade date

Page 65: Curs Virusologie - Part I

DF32hDS

000BhIP

DI

SI

SP

BP

DX

CX

BX

AX

0010h

0000h

0004h

DF32h

15 0

Procesor 8088 - 80286

.model small

.stack 10h

.datan dw 4vector dw 23,16,35,12suma dw ?

.codeSTART:

0000 B8 0000s mov AX,@data0003 8E D8 mov DS,AX

0005 33 C9 xor CX,CX0007 8B 0E 0000r mov CX, n000B BB 0002r mov BX, offset vector000E 33 C0 xor AX,AX0010 33 F6 xor SI,SI

0012 REPETA:

0012 03 00 add AX, [BX][SI]0014 46 inc SI0015 46 inc SI0016 E2 FA loop REPETA

0018 A3 000Ar mov suma, AX001B B8 4C00 mov ax, 4C00h001E CD 21 int 21h

end START---------

SS:0010SS:000E000C000A00080006000400020000

0Ch00h23h00h10h00h17h00h04h

0807060504030201DS:00

00h00h00h00h00h

0D0C0B0ADS:09

Zona de stiva

Zonade date

Page 66: Curs Virusologie - Part I

DF32hDS

000EhIP

DI

SI

SP

BP

DX

CX

BX

AX

0010h

0000h

0004h

0002h

DF32h

15 0

Procesor 8088 - 80286

.model small

.stack 10h

.datan dw 4vector dw 23,16,35,12suma dw ?

.codeSTART:

0000 B8 0000s mov AX,@data0003 8E D8 mov DS,AX

0005 33 C9 xor CX,CX0007 8B 0E 0000r mov CX, n000B BB 0002r mov BX, offset vector000E 33 C0 xor AX,AX0010 33 F6 xor SI,SI

0012 REPETA:

0012 03 00 add AX, [BX][SI]0014 46 inc SI0015 46 inc SI0016 E2 FA loop REPETA

0018 A3 000Ar mov suma, AX001B B8 4C00 mov ax, 4C00h001E CD 21 int 21h

end START---------

SS:0010SS:000E000C000A00080006000400020000

0Ch00h23h00h10h00h17h00h04h

0807060504030201DS:00

00h00h00h00h00h

0D0C0B0ADS:09

Zona de stiva

Zonade date

Page 67: Curs Virusologie - Part I

DF32hDS

0010hIP

DI

SI

SP

BP

DX

CX

BX

AX

0010h

0000h

0004h

0002h

0h

15 0

Procesor 8088 - 80286

.model small

.stack 10h

.datan dw 4vector dw 23,16,35,12suma dw ?

.codeSTART:

0000 B8 0000s mov AX,@data0003 8E D8 mov DS,AX

0005 33 C9 xor CX,CX0007 8B 0E 0000r mov CX, n000B BB 0002r mov BX, offset vector000E 33 C0 xor AX,AX0010 33 F6 xor SI,SI

0012 REPETA:

0012 03 00 add AX, [BX][SI]0014 46 inc SI0015 46 inc SI0016 E2 FA loop REPETA

0018 A3 000Ar mov suma, AX001B B8 4C00 mov ax, 4C00h001E CD 21 int 21h

end START---------

SS:0010SS:000E000C000A00080006000400020000

0Ch00h23h00h10h00h17h00h04h

0807060504030201DS:00

00h00h00h00h00h

0D0C0B0ADS:09

Zona de stiva

Zonade date

Page 68: Curs Virusologie - Part I

DF32hDS

0012hIP

DI

SI

SP

BP

DX

CX

BX

AX

0h

0010h

0000h

0004h

0002h

0h

15 0

Procesor 8088 - 80286

.model small

.stack 10h

.datan dw 4vector dw 23,16,35,12suma dw ?

.codeSTART:

0000 B8 0000s mov AX,@data0003 8E D8 mov DS,AX

0005 33 C9 xor CX,CX0007 8B 0E 0000r mov CX, n000B BB 0002r mov BX, offset vector000E 33 C0 xor AX,AX0010 33 F6 xor SI,SI

0012 REPETA:

0012 03 00 add AX, [BX][SI]0014 46 inc SI0015 46 inc SI0016 E2 FA loop REPETA

0018 A3 000Ar mov suma, AX001B B8 4C00 mov ax, 4C00h001E CD 21 int 21h

end START---------

SS:0010SS:000E000C000A00080006000400020000

0Ch00h23h00h10h00h17h00h04h

0807060504030201DS:00

00h00h00h00h00h

0D0C0B0ADS:09

Zona de stiva

Zonade date

Page 69: Curs Virusologie - Part I

DF32hDS

0014hIP

DI

SI

SP

BP

DX

CX

BX

AX

0h

0010h

0000h

0004h

0002h

0017h

15 0

Procesor 8088 - 80286

.model small

.stack 10h

.datan dw 4vector dw 23,16,35,12suma dw ?

.codeSTART:

0000 B8 0000s mov AX,@data0003 8E D8 mov DS,AX

0005 33 C9 xor CX,CX0007 8B 0E 0000r mov CX, n000B BB 0002r mov BX, offset vector000E 33 C0 xor AX,AX0010 33 F6 xor SI,SI

0012 REPETA:

0012 03 00 add AX, [BX][SI]0014 46 inc SI0015 46 inc SI0016 E2 FA loop REPETA

0018 A3 000Ar mov suma, AX001B B8 4C00 mov ax, 4C00h001E CD 21 int 21h

end START---------

SS:0010SS:000E000C000A00080006000400020000

0Ch00h23h00h10h00h17h00h04h

0807060504030201DS:00

00h00h00h00h00h

0D0C0B0ADS:09

Zona de stiva

Zonade date

Page 70: Curs Virusologie - Part I

DF32hDS

0015hIP

DI

SI

SP

BP

DX

CX

BX

AX

0001h

0010h

0000h

0004h

0002h

0017h

15 0

Procesor 8088 - 80286

.model small

.stack 10h

.datan dw 4vector dw 23,16,35,12suma dw ?

.codeSTART:

0000 B8 0000s mov AX,@data0003 8E D8 mov DS,AX

0005 33 C9 xor CX,CX0007 8B 0E 0000r mov CX, n000B BB 0002r mov BX, offset vector000E 33 C0 xor AX,AX0010 33 F6 xor SI,SI

0012 REPETA:

0012 03 00 add AX, [BX][SI]0014 46 inc SI0015 46 inc SI0016 E2 FA loop REPETA

0018 A3 000Ar mov suma, AX001B B8 4C00 mov ax, 4C00h001E CD 21 int 21h

end START---------

SS:0010SS:000E000C000A00080006000400020000

0Ch00h23h00h10h00h17h00h04h

0807060504030201DS:00

00h00h00h00h00h

0D0C0B0ADS:09

Zona de stiva

Zonade date

Page 71: Curs Virusologie - Part I

DF32hDS

0016hIP

DI

SI

SP

BP

DX

CX

BX

AX

0002h

0010h

0000h

0004h

0002h

0017h

15 0

Procesor 8088 - 80286

.model small

.stack 10h

.datan dw 4vector dw 23,16,35,12suma dw ?

.codeSTART:

0000 B8 0000s mov AX,@data0003 8E D8 mov DS,AX

0005 33 C9 xor CX,CX0007 8B 0E 0000r mov CX, n000B BB 0002r mov BX, offset vector000E 33 C0 xor AX,AX0010 33 F6 xor SI,SI

0012 REPETA:

0012 03 00 add AX, [BX][SI]0014 46 inc SI0015 46 inc SI0016 E2 FA loop REPETA

0018 A3 000Ar mov suma, AX001B B8 4C00 mov ax, 4C00h001E CD 21 int 21h

end START---------

SS:0010SS:000E000C000A00080006000400020000

0Ch00h23h00h10h00h17h00h04h

0807060504030201DS:00

00h00h00h00h00h

0D0C0B0ADS:09

Zona de stiva

Zonade date

Page 72: Curs Virusologie - Part I

DF32hDS

0012hIP

DI

SI

SP

BP

DX

CX

BX

AX

0002h

0010h

0000h

0003h

0002h

0017h

15 0

Procesor 8088 - 80286

.model small

.stack 10h

.datan dw 4vector dw 23,16,35,12suma dw ?

.codeSTART:

0000 B8 0000s mov AX,@data0003 8E D8 mov DS,AX

0005 33 C9 xor CX,CX0007 8B 0E 0000r mov CX, n000B BB 0002r mov BX, offset vector000E 33 C0 xor AX,AX0010 33 F6 xor SI,SI

0012 REPETA:

0012 03 00 add AX, [BX][SI]0014 46 inc SI0015 46 inc SI0016 E2 FA loop REPETA

0018 A3 000Ar mov suma, AX001B B8 4C00 mov ax, 4C00h001E CD 21 int 21h

end START---------

SS:0010SS:000E000C000A00080006000400020000

0Ch00h23h00h10h00h17h00h04h

0807060504030201DS:00

00h00h00h00h00h

0D0C0B0ADS:09

Zona de stiva

Zonade date

Page 73: Curs Virusologie - Part I

DF32hDS

0012hIP

DI

SI

SP

BP

DX

CX

BX

AX

0002h

0010h

0000h

0003h

0002h

0027h

15 0

Procesor 8088 - 80286

.model small

.stack 10h

.datan dw 4vector dw 23,16,35,12suma dw ?

.codeSTART:

0000 B8 0000s mov AX,@data0003 8E D8 mov DS,AX

0005 33 C9 xor CX,CX0007 8B 0E 0000r mov CX, n000B BB 0002r mov BX, offset vector000E 33 C0 xor AX,AX0010 33 F6 xor SI,SI

0012 REPETA:

0012 03 00 add AX, [BX][SI]0014 46 inc SI0015 46 inc SI0016 E2 FA loop REPETA

0018 A3 000Ar mov suma, AX001B B8 4C00 mov ax, 4C00h001E CD 21 int 21h

end START---------

SS:0010SS:000E000C000A00080006000400020000

0Ch00h23h00h10h00h17h00h04h

0807060504030201DS:00

00h00h00h00h00h

0D0C0B0ADS:09

Zona de stiva

Zonade date

Page 74: Curs Virusologie - Part I

DF32hDS

0012hIP

DI

SI

SP

BP

DX

CX

BX

AX

0004h

0010h

0000h

0002h

0002h

0027h

15 0

Procesor 8088 - 80286

.model small

.stack 10h

.datan dw 4vector dw 23,16,35,12suma dw ?

.codeSTART:

0000 B8 0000s mov AX,@data0003 8E D8 mov DS,AX

0005 33 C9 xor CX,CX0007 8B 0E 0000r mov CX, n000B BB 0002r mov BX, offset vector000E 33 C0 xor AX,AX0010 33 F6 xor SI,SI

0012 REPETA:

0012 03 00 add AX, [BX][SI]0014 46 inc SI0015 46 inc SI0016 E2 FA loop REPETA

0018 A3 000Ar mov suma, AX001B B8 4C00 mov ax, 4C00h001E CD 21 int 21h

end START---------

SS:0010SS:000E000C000A00080006000400020000

0Ch00h23h00h10h00h17h00h04h

0807060504030201DS:00

00h00h00h00h00h

0D0C0B0ADS:09

Zona de stiva

Zonade date

Page 75: Curs Virusologie - Part I

DF32hDS

0014hIP

DI

SI

SP

BP

DX

CX

BX

AX

0004h

0010h

0000h

0002h

0002h

004Ah

15 0

Procesor 8088 - 80286

.model small

.stack 10h

.datan dw 4vector dw 23,16,35,12suma dw ?

.codeSTART:

0000 B8 0000s mov AX,@data0003 8E D8 mov DS,AX

0005 33 C9 xor CX,CX0007 8B 0E 0000r mov CX, n000B BB 0002r mov BX, offset vector000E 33 C0 xor AX,AX0010 33 F6 xor SI,SI

0012 REPETA:

0012 03 00 add AX, [BX][SI]0014 46 inc SI0015 46 inc SI0016 E2 FA loop REPETA

0018 A3 000Ar mov suma, AX001B B8 4C00 mov ax, 4C00h001E CD 21 int 21h

end START---------

SS:0010SS:000E000C000A00080006000400020000

0Ch00h23h00h10h00h17h00h04h

0807060504030201DS:00

00h00h00h00h00h

0D0C0B0ADS:09

Zona de stiva

Zonade date

Page 76: Curs Virusologie - Part I

DF32hDS

0012hIP

DI

SI

SP

BP

DX

CX

BX

AX

0006h

0010h

0000h

0001h

0002h

004Ah

15 0

Procesor 8088 - 80286

.model small

.stack 10h

.datan dw 4vector dw 23,16,35,12suma dw ?

.codeSTART:

0000 B8 0000s mov AX,@data0003 8E D8 mov DS,AX

0005 33 C9 xor CX,CX0007 8B 0E 0000r mov CX, n000B BB 0002r mov BX, offset vector000E 33 C0 xor AX,AX0010 33 F6 xor SI,SI

0012 REPETA:

0012 03 00 add AX, [BX][SI]0014 46 inc SI0015 46 inc SI0016 E2 FA loop REPETA

0018 A3 000Ar mov suma, AX001B B8 4C00 mov ax, 4C00h001E CD 21 int 21h

end START---------

SS:0010SS:000E000C000A00080006000400020000

0Ch00h23h00h10h00h17h00h04h

0807060504030201DS:00

00h00h00h00h00h

0D0C0B0ADS:09

Zona de stiva

Zonade date

Page 77: Curs Virusologie - Part I

DF32hDS

0014hIP

DI

SI

SP

BP

DX

CX

BX

AX

0006h

0010h

0000h

0001h

0002h

0056h

15 0

Procesor 8088 - 80286

.model small

.stack 10h

.datan dw 4vector dw 23,16,35,12suma dw ?

.codeSTART:

0000 B8 0000s mov AX,@data0003 8E D8 mov DS,AX

0005 33 C9 xor CX,CX0007 8B 0E 0000r mov CX, n000B BB 0002r mov BX, offset vector000E 33 C0 xor AX,AX0010 33 F6 xor SI,SI

0012 REPETA:

0012 03 00 add AX, [BX][SI]0014 46 inc SI0015 46 inc SI0016 E2 FA loop REPETA

0018 A3 000Ar mov suma, AX001B B8 4C00 mov ax, 4C00h001E CD 21 int 21h

end START---------

SS:0010SS:000E000C000A00080006000400020000

0Ch00h23h00h10h00h17h00h04h

0807060504030201DS:00

00h00h00h00h00h

0D0C0B0ADS:09

Zona de stiva

Zonade date

Page 78: Curs Virusologie - Part I

DF32hDS

0018hIP

DI

SI

SP

BP

DX

CX

BX

AX

0008h

0010h

0000h

0000h

0002h

0056h

15 0

Procesor 8088 - 80286

.model small

.stack 10h

.datan dw 4vector dw 23,16,35,12suma dw ?

.codeSTART:

0000 B8 0000s mov AX,@data0003 8E D8 mov DS,AX

0005 33 C9 xor CX,CX0007 8B 0E 0000r mov CX, n000B BB 0002r mov BX, offset vector000E 33 C0 xor AX,AX0010 33 F6 xor SI,SI

0012 REPETA:

0012 03 00 add AX, [BX][SI]0014 46 inc SI0015 46 inc SI0016 E2 FA loop REPETA

0018 A3 000Ar mov suma, AX001B B8 4C00 mov ax, 4C00h001E CD 21 int 21h

end START---------

SS:0010SS:000E000C000A00080006000400020000

0Ch00h23h00h10h00h17h00h04h

0807060504030201DS:00

00h00h00h00h00h

0D0C0B0ADS:09

Zona de stiva

Zonade date

Page 79: Curs Virusologie - Part I

DF32hDS

001BhIP

DI

SI

SP

BP

DX

CX

BX

AX

0008h

0010h

0000h

0000h

0002h

0056h

15 0

Procesor 8088 - 80286

.model small

.stack 10h

.datan dw 4vector dw 23,16,35,12suma dw ?

.codeSTART:

0000 B8 0000s mov AX,@data0003 8E D8 mov DS,AX

0005 33 C9 xor CX,CX0007 8B 0E 0000r mov CX, n000B BB 0002r mov BX, offset vector000E 33 C0 xor AX,AX0010 33 F6 xor SI,SI

0012 REPETA:

0012 03 00 add AX, [BX][SI]0014 46 inc SI0015 46 inc SI0016 E2 FA loop REPETA

0018 A3 000Ar mov suma, AX001B B8 4C00 mov ax, 4C00h001E CD 21 int 21h

end START---------

SS:0010SS:000E000C000A00080006000400020000

0Ch00h23h00h10h00h17h00h04h

0807060504030201DS:00

00h00h00h56h00h

0D0C0B0ADS:09

Zona de stiva

Zonade date

Page 80: Curs Virusologie - Part I

DF32hDS

001EhIP

DI

SI

SP

BP

DX

CX

BX

AX

0008h

0010h

0000h

0000h

0002h

4C00h

15 0

Procesor 8088 - 80286

.model small

.stack 10h

.datan dw 4vector dw 23,16,35,12suma dw ?

.codeSTART:

0000 B8 0000s mov AX,@data0003 8E D8 mov DS,AX

0005 33 C9 xor CX,CX0007 8B 0E 0000r mov CX, n000B BB 0002r mov BX, offset vector000E 33 C0 xor AX,AX0010 33 F6 xor SI,SI

0012 REPETA:

0012 03 00 add AX, [BX][SI]0014 46 inc SI0015 46 inc SI0016 E2 FA loop REPETA

0018 A3 000Ar mov suma, AX001B B8 4C00 mov ax, 4C00h001E CD 21 int 21h

end START---------

SS:0010SS:000E000C000A00080006000400020000

0Ch00h23h00h10h00h17h00h04h

0807060504030201DS:00

00h00h00h56h00h

0D0C0B0ADS:09

Zona de stiva

Zonade date

Page 81: Curs Virusologie - Part I

DUMINICA

Page 82: Curs Virusologie - Part I

I.8 PROCEDURI

mov AX,4C00hint 21h

end START

InstrucŃiuni

secvenŃă de cod - SC

InstrucŃiuni

secvenŃă de cod - SC

InstrucŃiuni

secvenŃă de cod - SC

InstrucŃiuni

START:mov AX,@datamov DS,AX

Secventede cod identice

PROC rutinasecvenŃă de cod-SCEND PROC

mov AX,4C00hint 21h

end START

InstrucŃiuni

CALL rutina

InstrucŃiuni

CALL rutina

InstrucŃiuni

CALL rutina

InstrucŃiuni

START:mov AX,@datamov DS,AX

SEGMENT DE COD

Apelprocedura

IMPLEMENTARE PROCEDURI

Page 83: Curs Virusologie - Part I

I.8 PROCEDURI

SINTAXA DECLARĂRII UNEI PROCEDURI:

Nume_procedură PROC [FAR | NEAR]

..............

[Nume_procedura] ENDP

[Nume_procedură] ENDP

RET [nr_octeŃi]

Restaurarea registre

Stocare rezultate

Bloc prelucrare date cu referirea parametrilor formalii

Salvare registre

Nume_procedură PROC [FAR | NEAR]

Structura generală a unei proceduri scrisă în limbaje de asamblare este:

Page 84: Curs Virusologie - Part I

PUSH IPJMP rutina

PROC rutinapush BPmov BP,SP…pop BPret

End PROC

mov AX,4C00hint 21h

end START

InstrucŃiuni

CALL rutina

InstrucŃiuni

START:mov AX,@datamov DS,AX

I.8 PROCEDURI

-IP-------

SS:0010SS:000E000C000A00080006000400020000

ZONA DE STIVA DE 10 OCTETI

SEGMENT DE COD

APEL PROCEDURA DE TIP NEAR

---------

SS:0010SS:000E000C000A00080006000400020000

ZONA DE STIVA DE 10 OCTETI

salvare adresa instrucŃiunii următoare lui CALL

reprezintă un offsetpe 16 biti

Page 85: Curs Virusologie - Part I

PUSH CSPUSH IPJMP rutinamov AX,4C00h

int 21hend START

InstrucŃiuni

CALL rutina

InstrucŃiuni

START:mov AX,@datamov DS,AX

I.8 PROCEDURI

-CSIP------

SS:0010SS:000E000C000A00080006000400020000

ZONA DE STIVA DE 10 OCTETI

SEGMENT DE COD

APEL PROCEDURA DE TIP FAR

---------

SS:0010SS:000E000C000A00080006000400020000

ZONA DE STIVA DE 10 OCTETI

salvare adresa instrucŃiunii următoare lui CALL

reprezintă o adresade tip segment:offset pe 20 biti

PROC rutinapush BPmov BP,SP…pop BPret

End PROC SEGMENT DE COD

salvare adresa segment de cod curent

Page 86: Curs Virusologie - Part I

ConŃinutul variabilei reprezintă un segment + offset şi are loc un salt de tip FAR. De obicei variabila este reprezentată de o adresare indirectă cu registru index (SI,DI), [SI] sau registru de bază (BX). [BX].

CALL DWORD PTR adresă

ConŃinutul variabilei reprezintă un offset şi are loc un salt de tip NEAR. De obicei variabila este reprezentată de o adresare indirectă cu registru index (SI,DI), [SI] sau registru de bază (BX). [BX] şi trebuie specificat câti bytes trebuie citiŃi (trebuie indicat procesorului tipul de salt – near, se citesc 2 octeŃi; far se citesc 4 octeŃi).

CALL [WORD|DOUBLE] PTR variabilă

ConŃinutul din registru sau variabilă este copiat în IP după ce acesta a fost salvat pe stivă. Deci variabila sau registrul respectiv reprezintă un pointer near (Ńine doar offsetul unei proceduri sau etichete)

CALL registru sau variabilă

Eticheta este în alt segment. Înlocuieşte CS şi IP cu segmentul şi offsetul etichetei.

CALL FAR PTR eticheta

Procesorul presupune în această situaŃi că eticheta este locală şi atunci face un salt de tip NEAR. Aceasta trebuie să fie la o distanŃă cuprinsă în intervalul [-32768,32676] de bytes.

CALL etichetă

Numele procedurii apelate reprezintă în esenŃă o etichetă.CALL nume_procedură

DESCRIERETIP OPERAND

I.8 PROCEDURI

Page 87: Curs Virusologie - Part I

I.8 PROCEDURI

Transmiterea parametrilor de intrare/ieşire în proceduri

•VARIABILE DECLARATE ÎN MEMORIE în segmentul de date;•REGISTRELE•STIVA pe post de zonă de transfer a datelor către proceduri;

Page 88: Curs Virusologie - Part I

IP

DI

SI

SP

BP

DX

CX

BX

AX

15 0

Procesor 8088 - 80286.model small.stack 10h.data

n dw 4vector dw 23,16,35,12suma dw ?

.code0000 START:0000 mov ax,@data0003 mov ds,ax0005 mov AX, offset vector0008 push AX0009 mov AX,n000C push AX000D mov AX, offset suma0010 push AX

0011 CALL addv0014 mov ax, 4C00h0017 int 21h0019 addv PROC NEAR0019 push BP001A mov BP, SP001C xor CX,CX001E mov CX, [BP+6]0021 mov BX, [BP+8]0024 xor AX,AX0026 xor SI,SI0028 repeta:0028 add AX, [BX][SI]002A inc SI002B inc SI002C loop repeta002E mov BX, [BP+4]0031 mov [BX],AX0033 pop BP0034 ret 60037 addv ENDPend START

---------

SS:0010SS:000E000C000A00080006000400020000

0Ch00h23h00h10h00h17h00h04h

0807060504030201DS:00

00h00h00h00h00h

0D0C0B0ADS:09Zona de date

Zona de stiva

Page 89: Curs Virusologie - Part I

0006IP

DI

SI

SP

BP

DX

CX

BX

AX

0010

0000

0002

15 0

Procesor 8088 - 80286.model small.stack 10h.data

n dw 4vector dw 23,16,35,12suma dw ?

.code0000 START:0000 mov ax,@data0003 mov ds,ax0005 mov AX, offset vector0008 push AX0009 mov AX,n000C push AX000D mov AX, offset suma0010 push AX

0011 CALL addv0014 mov ax, 4C00h0017 int 21h0019 addv PROC NEAR0019 push BP001A mov BP, SP001C xor CX,CX001E mov CX, [BP+6]0021 mov BX, [BP+8]0024 xor AX,AX0026 xor SI,SI0028 repeta:0028 add AX, [BX][SI]002A inc SI002B inc SI002C loop repeta002E mov BX, [BP+4]0031 mov [BX],AX0033 pop BP0034 ret 60037 addv ENDPend START

---------

SS:0010SS:000E000C000A00080006000400020000

0Ch00h23h00h10h00h17h00h04h

0807060504030201DS:00

00h00h00h00h00h

0D0C0B0ADS:09Zona de date

Zona de stiva

Page 90: Curs Virusologie - Part I

0009IP

DI

SI

SP

BP

DX

CX

BX

AX

000E

0000

0002

15 0

Procesor 8088 - 80286.model small.stack 10h.data

n dw 4vector dw 23,16,35,12suma dw ?

.code0000 START:0000 mov ax,@data0003 mov ds,ax0005 mov AX, offset vector0008 push AX0009 mov AX,n000C push AX000D mov AX, offset suma0010 push AX

0011 CALL addv0014 mov ax, 4C00h0017 int 21h0019 addv PROC NEAR0019 push BP001A mov BP, SP001C xor CX,CX001E mov CX, [BP+6]0021 mov BX, [BP+8]0024 xor AX,AX0026 xor SI,SI0028 repeta:0028 add AX, [BX][SI]002A inc SI002B inc SI002C loop repeta002E mov BX, [BP+4]0031 mov [BX],AX0033 pop BP0034 ret 60037 addv ENDPend START

-0200-------

SS:0010SS:000E000C000A00080006000400020000

0Ch00h23h00h10h00h17h00h04h

0807060504030201DS:00

00h00h00h00h00h

0D0C0B0ADS:09Zona de date

Zona de stiva

Page 91: Curs Virusologie - Part I

000CIP

DI

SI

SP

BP

DX

CX

BX

AX

000E

0000

0004

15 0

Procesor 8088 - 80286.model small.stack 10h.data

n dw 4vector dw 23,16,35,12suma dw ?

.code0000 START:0000 mov ax,@data0003 mov ds,ax0005 mov AX, offset vector0008 push AX0009 mov AX,n000C push AX000D mov AX, offset suma0010 push AX

0011 CALL addv0014 mov ax, 4C00h0017 int 21h0019 addv PROC NEAR0019 push BP001A mov BP, SP001C xor CX,CX001E mov CX, [BP+6]0021 mov BX, [BP+8]0024 xor AX,AX0026 xor SI,SI0028 repeta:0028 add AX, [BX][SI]002A inc SI002B inc SI002C loop repeta002E mov BX, [BP+4]0031 mov [BX],AX0033 pop BP0034 ret 60037 addv ENDPend START

-0200-------

SS:0010SS:000E000C000A00080006000400020000

0Ch00h23h00h10h00h17h00h04h

0807060504030201DS:00

00h00h00h00h00h

0D0C0B0ADS:09Zona de date

Zona de stiva

Page 92: Curs Virusologie - Part I

000DIP

DI

SI

SP

BP

DX

CX

BX

AX

000C

0000

0004

15 0

Procesor 8088 - 80286.model small.stack 10h.data

n dw 4vector dw 23,16,35,12suma dw ?

.code0000 START:0000 mov ax,@data0003 mov ds,ax0005 mov AX, offset vector0008 push AX0009 mov AX,n000C push AX000D mov AX, offset suma0010 push AX

0011 CALL addv0014 mov ax, 4C00h0017 int 21h0019 addv PROC NEAR0019 push BP001A mov BP, SP001C xor CX,CX001E mov CX, [BP+6]0021 mov BX, [BP+8]0024 xor AX,AX0026 xor SI,SI0028 repeta:0028 add AX, [BX][SI]002A inc SI002B inc SI002C loop repeta002E mov BX, [BP+4]0031 mov [BX],AX0033 pop BP0034 ret 60037 addv ENDPend START

-02000400------

SS:0010000E000C000A00080006000400020000

0Ch00h23h00h10h00h17h00h04h

0807060504030201DS:00

00h00h00h00h00h

0D0C0B0ADS:09Zona de date

Zona de stiva

Page 93: Curs Virusologie - Part I

0010IP

DI

SI

SP

BP

DX

CX

BX

AX

000C

0000

000A

15 0

Procesor 8088 - 80286.model small.stack 10h.data

n dw 4vector dw 23,16,35,12suma dw ?

.code0000 START:0000 mov ax,@data0003 mov ds,ax0005 mov AX, offset vector0008 push AX0009 mov AX,n000C push AX000D mov AX, offset suma0010 push AX

0011 CALL addv0014 mov ax, 4C00h0017 int 21h0019 addv PROC NEAR0019 push BP001A mov BP, SP001C xor CX,CX001E mov CX, [BP+6]0021 mov BX, [BP+8]0024 xor AX,AX0026 xor SI,SI0028 repeta:0028 add AX, [BX][SI]002A inc SI002B inc SI002C loop repeta002E mov BX, [BP+4]0031 mov [BX],AX0033 pop BP0034 ret 60037 addv ENDPend START

-02000400------

SS:0010000E000C000A00080006000400020000

0Ch00h23h00h10h00h17h00h04h

0807060504030201DS:00

00h00h00h00h00h

0D0C0B0ADS:09Zona de date

Zona de stiva

Page 94: Curs Virusologie - Part I

0011IP

DI

SI

SP

BP

DX

CX

BX

AX

000A

0000

000A

15 0

Procesor 8088 - 80286.model small.stack 10h.data

n dw 4vector dw 23,16,35,12suma dw ?

.code0000 START:0000 mov ax,@data0003 mov ds,ax0005 mov AX, offset vector0008 push AX0009 mov AX,n000C push AX000D mov AX, offset suma0010 push AX

0011 CALL addv0014 mov ax, 4C00h0017 int 21h0019 addv PROC NEAR0019 push BP001A mov BP, SP001C xor CX,CX001E mov CX, [BP+6]0021 mov BX, [BP+8]0024 xor AX,AX0026 xor SI,SI0028 repeta:0028 add AX, [BX][SI]002A inc SI002B inc SI002C loop repeta002E mov BX, [BP+4]0031 mov [BX],AX0033 pop BP0034 ret 60037 addv ENDPend START

-020004000A00-----

SS:0010000E000C000A00080006000400020000

0Ch00h23h00h10h00h17h00h04h

0807060504030201DS:00

00h00h00h00h00h

0D0C0B0ADS:09Zona de date

Zona de stiva

Page 95: Curs Virusologie - Part I

0019IP

DI

SI

SP

BP

DX

CX

BX

AX

0008

0000

000A

15 0

Procesor 8088 - 80286.model small.stack 10h.data

n dw 4vector dw 23,16,35,12suma dw ?

.code0000 START:0000 mov ax,@data0003 mov ds,ax0005 mov AX, offset vector0008 push AX0009 mov AX,n000C push AX000D mov AX, offset suma0010 push AX

0011 CALL addv0014 mov ax, 4C00h0017 int 21h0019 addv PROC NEAR0019 push BP001A mov BP, SP001C xor CX,CX001E mov CX, [BP+6]0021 mov BX, [BP+8]0024 xor AX,AX0026 xor SI,SI0028 repeta:0028 add AX, [BX][SI]002A inc SI002B inc SI002C loop repeta002E mov BX, [BP+4]0031 mov [BX],AX0033 pop BP0034 ret 60037 addv ENDPend START

-020004000A001400----

SS:0010000E000C000A00080006000400020000

0Ch00h23h00h10h00h17h00h04h

0807060504030201DS:00

00h00h00h00h00h

0D0C0B0ADS:09Zona de date

Zona de stiva

Page 96: Curs Virusologie - Part I

001AIP

DI

SI

SP

BP

DX

CX

BX

AX

0006

0000

000A

15 0

Procesor 8088 - 80286.model small.stack 10h.data

n dw 4vector dw 23,16,35,12suma dw ?

.code0000 START:0000 mov ax,@data0003 mov ds,ax0005 mov AX, offset vector0008 push AX0009 mov AX,n000C push AX000D mov AX, offset suma0010 push AX

0011 CALL addv0014 mov ax, 4C00h0017 int 21h0019 addv PROC NEAR0019 push BP001A mov BP, SP001C xor CX,CX001E mov CX, [BP+6]0021 mov BX, [BP+8]0024 xor AX,AX0026 xor SI,SI0028 repeta:0028 add AX, [BX][SI]002A inc SI002B inc SI002C loop repeta002E mov BX, [BP+4]0031 mov [BX],AX0033 pop BP0034 ret 60037 addv ENDPend START

-020004000A0014000000---

SS:0010000E000C000A00080006000400020000

0Ch00h23h00h10h00h17h00h04h

0807060504030201DS:00

00h00h00h00h00h

0D0C0B0ADS:09Zona de date

Zona de stiva

Page 97: Curs Virusologie - Part I

001CIP

DI

SI

SP

BP

DX

CX

BX

AX

0006

0006

000A

15 0

Procesor 8088 - 80286.model small.stack 10h.data

n dw 4vector dw 23,16,35,12suma dw ?

.code0000 START:0000 mov ax,@data0003 mov ds,ax0005 mov AX, offset vector0008 push AX0009 mov AX,n000C push AX000D mov AX, offset suma0010 push AX

0011 CALL addv0014 mov ax, 4C00h0017 int 21h0019 addv PROC NEAR0019 push BP001A mov BP, SP001C xor CX,CX001E mov CX, [BP+6]0021 mov BX, [BP+8]0024 xor AX,AX0026 xor SI,SI0028 repeta:0028 add AX, [BX][SI]002A inc SI002B inc SI002C loop repeta002E mov BX, [BP+4]0031 mov [BX],AX0033 pop BP0034 ret 60037 addv ENDPend START

-020004000A0014000000---

SS:0010000E000C000A00080006000400020000

0Ch00h23h00h10h00h17h00h04h

0807060504030201DS:00

00h00h00h00h00h

0D0C0B0ADS:09Zona de date

Zona de stiva

Page 98: Curs Virusologie - Part I

001EIP

DI

SI

SP

BP

DX

CX

BX

AX

0006

0006

0000

000A

15 0

Procesor 8088 - 80286.model small.stack 10h.data

n dw 4vector dw 23,16,35,12suma dw ?

.code0000 START:0000 mov ax,@data0003 mov ds,ax0005 mov AX, offset vector0008 push AX0009 mov AX,n000C push AX000D mov AX, offset suma0010 push AX

0011 CALL addv0014 mov ax, 4C00h0017 int 21h0019 addv PROC NEAR0019 push BP001A mov BP, SP001C xor CX,CX001E mov CX, [BP+6]0021 mov BX, [BP+8]0024 xor AX,AX0026 xor SI,SI0028 repeta:0028 add AX, [BX][SI]002A inc SI002B inc SI002C loop repeta002E mov BX, [BP+4]0031 mov [BX],AX0033 pop BP0034 ret 60037 addv ENDPend START

-020004000A0014000000---

SS:0010000E000C000A00080006000400020000

0Ch00h23h00h10h00h17h00h04h

0807060504030201DS:00

00h00h00h00h00h

0D0C0B0ADS:09Zona de date

Zona de stiva

Page 99: Curs Virusologie - Part I

0021IP

DI

SI

SP

BP

DX

CX

BX

AX

0006

0006

0004

000A

15 0

Procesor 8088 - 80286.model small.stack 10h.data

n dw 4vector dw 23,16,35,12suma dw ?

.code0000 START:0000 mov ax,@data0003 mov ds,ax0005 mov AX, offset vector0008 push AX0009 mov AX,n000C push AX000D mov AX, offset suma0010 push AX

0011 CALL addv0014 mov ax, 4C00h0017 int 21h0019 addv PROC NEAR0019 push BP001A mov BP, SP001C xor CX,CX001E mov CX, [BP+6]0021 mov BX, [BP+8]0024 xor AX,AX0026 xor SI,SI0028 repeta:0028 add AX, [BX][SI]002A inc SI002B inc SI002C loop repeta002E mov BX, [BP+4]0031 mov [BX],AX0033 pop BP0034 ret 60037 addv ENDPend START

-020004000A0014000000---

SS:0010000E000C000A00080006000400020000

0Ch00h23h00h10h00h17h00h04h

0807060504030201DS:00

00h00h00h00h00h

0D0C0B0ADS:09Zona de date

Zona de stiva

Page 100: Curs Virusologie - Part I

0024IP

DI

SI

SP

BP

DX

CX

BX

AX

0006

0006

0004

0002

000A

15 0

Procesor 8088 - 80286.model small.stack 10h.data

n dw 4vector dw 23,16,35,12suma dw ?

.code0000 START:0000 mov ax,@data0003 mov ds,ax0005 mov AX, offset vector0008 push AX0009 mov AX,n000C push AX000D mov AX, offset suma0010 push AX

0011 CALL addv0014 mov ax, 4C00h0017 int 21h0019 addv PROC NEAR0019 push BP001A mov BP, SP001C xor CX,CX001E mov CX, [BP+6]0021 mov BX, [BP+8]0024 xor AX,AX0026 xor SI,SI0028 repeta:0028 add AX, [BX][SI]002A inc SI002B inc SI002C loop repeta002E mov BX, [BP+4]0031 mov [BX],AX0033 pop BP0034 ret 60037 addv ENDPend START

-020004000A0014000000---

SS:0010000E000C000A00080006000400020000

0Ch00h23h00h10h00h17h00h04h

0807060504030201DS:00

00h00h00h00h00h

0D0C0B0ADS:09Zona de date

Zona de stiva

Page 101: Curs Virusologie - Part I

0026IP

DI

SI

SP

BP

DX

CX

BX

AX

0006

0006

0004

0002

0000

15 0

Procesor 8088 - 80286.model small.stack 10h.data

n dw 4vector dw 23,16,35,12suma dw ?

.code0000 START:0000 mov ax,@data0003 mov ds,ax0005 mov AX, offset vector0008 push AX0009 mov AX,n000C push AX000D mov AX, offset suma0010 push AX

0011 CALL addv0014 mov ax, 4C00h0017 int 21h0019 addv PROC NEAR0019 push BP001A mov BP, SP001C xor CX,CX001E mov CX, [BP+6]0021 mov BX, [BP+8]0024 xor AX,AX0026 xor SI,SI0028 repeta:0028 add AX, [BX][SI]002A inc SI002B inc SI002C loop repeta002E mov BX, [BP+4]0031 mov [BX],AX0033 pop BP0034 ret 60037 addv ENDPend START

-020004000A0014000000---

SS:0010000E000C000A00080006000400020000

0Ch00h23h00h10h00h17h00h04h

0807060504030201DS:00

00h00h00h00h00h

0D0C0B0ADS:09Zona de date

Zona de stiva

Page 102: Curs Virusologie - Part I

0028IP

DI

SI

SP

BP

DX

CX

BX

AX

0000

0006

0006

0004

0002

0000

15 0

Procesor 8088 - 80286.model small.stack 10h.data

n dw 4vector dw 23,16,35,12suma dw ?

.code0000 START:0000 mov ax,@data0003 mov ds,ax0005 mov AX, offset vector0008 push AX0009 mov AX,n000C push AX000D mov AX, offset suma0010 push AX

0011 CALL addv0014 mov ax, 4C00h0017 int 21h0019 addv PROC NEAR0019 push BP001A mov BP, SP001C xor CX,CX001E mov CX, [BP+6]0021 mov BX, [BP+8]0024 xor AX,AX0026 xor SI,SI0028 repeta:0028 add AX, [BX][SI]002A inc SI002B inc SI002C loop repeta002E mov BX, [BP+4]0031 mov [BX],AX0033 pop BP0034 ret 60037 addv ENDPend START

-020004000A0014000000---

SS:0010000E000C000A00080006000400020000

0Ch00h23h00h10h00h17h00h04h

0807060504030201DS:00

00h00h00h00h00h

0D0C0B0ADS:09Zona de date

Zona de stiva

Page 103: Curs Virusologie - Part I

002AIP

DI

SI

SP

BP

DX

CX

BX

AX

0000

0006

0006

0004

0002

0017

15 0

Procesor 8088 - 80286.model small.stack 10h.data

n dw 4vector dw 23,16,35,12suma dw ?

.code0000 START:0000 mov ax,@data0003 mov ds,ax0005 mov AX, offset vector0008 push AX0009 mov AX,n000C push AX000D mov AX, offset suma0010 push AX

0011 CALL addv0014 mov ax, 4C00h0017 int 21h0019 addv PROC NEAR0019 push BP001A mov BP, SP001C xor CX,CX001E mov CX, [BP+6]0021 mov BX, [BP+8]0024 xor AX,AX0026 xor SI,SI0028 repeta:0028 add AX, [BX][SI]002A inc SI002B inc SI002C loop repeta002E mov BX, [BP+4]0031 mov [BX],AX0033 pop BP0034 ret 60037 addv ENDPend START

-020004000A0014000000---

SS:0010000E000C000A00080006000400020000

0Ch00h23h00h10h00h17h00h04h

0807060504030201DS:00

00h00h00h00h00h

0D0C0B0ADS:09Zona de date

Zona de stiva

Page 104: Curs Virusologie - Part I

002CIP

DI

SI

SP

BP

DX

CX

BX

AX

0002

0006

0006

0004

0002

0017

15 0

Procesor 8088 - 80286.model small.stack 10h.data

n dw 4vector dw 23,16,35,12suma dw ?

.code0000 START:0000 mov ax,@data0003 mov ds,ax0005 mov AX, offset vector0008 push AX0009 mov AX,n000C push AX000D mov AX, offset suma0010 push AX

0011 CALL addv0014 mov ax, 4C00h0017 int 21h0019 addv PROC NEAR0019 push BP001A mov BP, SP001C xor CX,CX001E mov CX, [BP+6]0021 mov BX, [BP+8]0024 xor AX,AX0026 xor SI,SI0028 repeta:0028 add AX, [BX][SI]002A inc SI002B inc SI002C loop repeta002E mov BX, [BP+4]0031 mov [BX],AX0033 pop BP0034 ret 60037 addv ENDPend START

-020004000A0014000000---

SS:0010000E000C000A00080006000400020000

0Ch00h23h00h10h00h17h00h04h

0807060504030201DS:00

00h00h00h00h00h

0D0C0B0ADS:09Zona de date

Zona de stiva

Page 105: Curs Virusologie - Part I

0028IP

DI

SI

SP

BP

DX

CX

BX

AX

0002

0006

0006

0003

0002

0017

15 0

Procesor 8088 - 80286.model small.stack 10h.data

n dw 4vector dw 23,16,35,12suma dw ?

.code0000 START:0000 mov ax,@data0003 mov ds,ax0005 mov AX, offset vector0008 push AX0009 mov AX,n000C push AX000D mov AX, offset suma0010 push AX

0011 CALL addv0014 mov ax, 4C00h0017 int 21h0019 addv PROC NEAR0019 push BP001A mov BP, SP001C xor CX,CX001E mov CX, [BP+6]0021 mov BX, [BP+8]0024 xor AX,AX0026 xor SI,SI0028 repeta:0028 add AX, [BX][SI]002A inc SI002B inc SI002C loop repeta002E mov BX, [BP+4]0031 mov [BX],AX0033 pop BP0034 ret 60037 addv ENDPend START

-020004000A0014000000---

SS:0010000E000C000A00080006000400020000

0Ch00h23h00h10h00h17h00h04h

0807060504030201DS:00

00h00h00h00h00h

0D0C0B0ADS:09Zona de date

Zona de stiva

Page 106: Curs Virusologie - Part I

002AIP

DI

SI

SP

BP

DX

CX

BX

AX

0002

0006

0006

0003

0002

0027

15 0

Procesor 8088 - 80286.model small.stack 10h.data

n dw 4vector dw 23,16,35,12suma dw ?

.code0000 START:0000 mov ax,@data0003 mov ds,ax0005 mov AX, offset vector0008 push AX0009 mov AX,n000C push AX000D mov AX, offset suma0010 push AX

0011 CALL addv0014 mov ax, 4C00h0017 int 21h0019 addv PROC NEAR0019 push BP001A mov BP, SP001C xor CX,CX001E mov CX, [BP+6]0021 mov BX, [BP+8]0024 xor AX,AX0026 xor SI,SI0028 repeta:0028 add AX, [BX][SI]002A inc SI002B inc SI002C loop repeta002E mov BX, [BP+4]0031 mov [BX],AX0033 pop BP0034 ret 60037 addv ENDPend START

-020004000A0014000000---

SS:0010000E000C000A00080006000400020000

0Ch00h23h00h10h00h17h00h04h

0807060504030201DS:00

00h00h00h00h00h

0D0C0B0ADS:09Zona de date

Zona de stiva

Page 107: Curs Virusologie - Part I

002CIP

DI

SI

SP

BP

DX

CX

BX

AX

0004

0006

0006

0003

0002

0027

15 0

Procesor 8088 - 80286.model small.stack 10h.data

n dw 4vector dw 23,16,35,12suma dw ?

.code0000 START:0000 mov ax,@data0003 mov ds,ax0005 mov AX, offset vector0008 push AX0009 mov AX,n000C push AX000D mov AX, offset suma0010 push AX

0011 CALL addv0014 mov ax, 4C00h0017 int 21h0019 addv PROC NEAR0019 push BP001A mov BP, SP001C xor CX,CX001E mov CX, [BP+6]0021 mov BX, [BP+8]0024 xor AX,AX0026 xor SI,SI0028 repeta:0028 add AX, [BX][SI]002A inc SI002B inc SI002C loop repeta002E mov BX, [BP+4]0031 mov [BX],AX0033 pop BP0034 ret 60037 addv ENDPend START

-020004000A0014000000---

SS:0010000E000C000A00080006000400020000

0Ch00h23h00h10h00h17h00h04h

0807060504030201DS:00

00h00h00h00h00h

0D0C0B0ADS:09Zona de date

Zona de stiva

Page 108: Curs Virusologie - Part I

0028IP

DI

SI

SP

BP

DX

CX

BX

AX

0004

0006

0006

0002

0002

0027

15 0

Procesor 8088 - 80286.model small.stack 10h.data

n dw 4vector dw 23,16,35,12suma dw ?

.code0000 START:0000 mov ax,@data0003 mov ds,ax0005 mov AX, offset vector0008 push AX0009 mov AX,n000C push AX000D mov AX, offset suma0010 push AX

0011 CALL addv0014 mov ax, 4C00h0017 int 21h0019 addv PROC NEAR0019 push BP001A mov BP, SP001C xor CX,CX001E mov CX, [BP+6]0021 mov BX, [BP+8]0024 xor AX,AX0026 xor SI,SI0028 repeta:0028 add AX, [BX][SI]002A inc SI002B inc SI002C loop repeta002E mov BX, [BP+4]0031 mov [BX],AX0033 pop BP0034 ret 60037 addv ENDPend START

-020004000A0014000000---

SS:0010000E000C000A00080006000400020000

0Ch00h23h00h10h00h17h00h04h

0807060504030201DS:00

00h00h00h00h00h

0D0C0B0ADS:09Zona de date

Zona de stiva

Page 109: Curs Virusologie - Part I

002EIP

DI

SI

SP

BP

DX

CX

BX

AX

0004

0006

0006

0000

0002

0056

15 0

Procesor 8088 - 80286.model small.stack 10h.data

n dw 4vector dw 23,16,35,12suma dw ?

.code0000 START:0000 mov ax,@data0003 mov ds,ax0005 mov AX, offset vector0008 push AX0009 mov AX,n000C push AX000D mov AX, offset suma0010 push AX

0011 CALL addv0014 mov ax, 4C00h0017 int 21h0019 addv PROC NEAR0019 push BP001A mov BP, SP001C xor CX,CX001E mov CX, [BP+6]0021 mov BX, [BP+8]0024 xor AX,AX0026 xor SI,SI0028 repeta:0028 add AX, [BX][SI]002A inc SI002B inc SI002C loop repeta002E mov BX, [BP+4]0031 mov [BX],AX0033 pop BP0034 ret 60037 addv ENDPend START

-020004000A0014000000---

SS:0010000E000C000A00080006000400020000

0Ch00h23h00h10h00h17h00h04h

0807060504030201DS:00

00h00h00h00h00h

0D0C0B0ADS:09Zona de date

Zona de stiva

Page 110: Curs Virusologie - Part I

0031IP

DI

SI

SP

BP

DX

CX

BX

AX

0004

0006

0006

0000

000A

0056

15 0

Procesor 8088 - 80286.model small.stack 10h.data

n dw 4vector dw 23,16,35,12suma dw ?

.code0000 START:0000 mov ax,@data0003 mov ds,ax0005 mov AX, offset vector0008 push AX0009 mov AX,n000C push AX000D mov AX, offset suma0010 push AX

0011 CALL addv0014 mov ax, 4C00h0017 int 21h0019 addv PROC NEAR0019 push BP001A mov BP, SP001C xor CX,CX001E mov CX, [BP+6]0021 mov BX, [BP+8]0024 xor AX,AX0026 xor SI,SI0028 repeta:0028 add AX, [BX][SI]002A inc SI002B inc SI002C loop repeta002E mov BX, [BP+4]0031 mov [BX],AX0033 pop BP0034 ret 60037 addv ENDPend START

-020004000A0014000000---

SS:0010000E000C000A00080006000400020000

0Ch00h23h00h10h00h17h00h04h

0807060504030201DS:00

00h00h00h00h00h

0D0C0B0ADS:09Zona de date

Zona de stiva

Page 111: Curs Virusologie - Part I

0033IP

DI

SI

SP

BP

DX

CX

BX

AX

0004

0006

0006

0000

000A

0056

15 0

Procesor 8088 - 80286.model small.stack 10h.data

n dw 4vector dw 23,16,35,12suma dw ?

.code0000 START:0000 mov ax,@data0003 mov ds,ax0005 mov AX, offset vector0008 push AX0009 mov AX,n000C push AX000D mov AX, offset suma0010 push AX

0011 CALL addv0014 mov ax, 4C00h0017 int 21h0019 addv PROC NEAR0019 push BP001A mov BP, SP001C xor CX,CX001E mov CX, [BP+6]0021 mov BX, [BP+8]0024 xor AX,AX0026 xor SI,SI0028 repeta:0028 add AX, [BX][SI]002A inc SI002B inc SI002C loop repeta002E mov BX, [BP+4]0031 mov [BX],AX0033 pop BP0034 ret 60037 addv ENDPend START

-020004000A0014000000---

SS:0010000E000C000A00080006000400020000

0Ch00h23h00h10h00h17h00h04h

0807060504030201DS:00

00h00h00h56h00h

0D0C0B0ADS:09Zona de date

Zona de stiva

Page 112: Curs Virusologie - Part I

0034IP

DI

SI

SP

BP

DX

CX

BX

AX

0004

0008

0000

0000

000A

0056

15 0

Procesor 8088 - 80286.model small.stack 10h.data

n dw 4vector dw 23,16,35,12suma dw ?

.code0000 START:0000 mov ax,@data0003 mov ds,ax0005 mov AX, offset vector0008 push AX0009 mov AX,n000C push AX000D mov AX, offset suma0010 push AX

0011 CALL addv0014 mov ax, 4C00h0017 int 21h0019 addv PROC NEAR0019 push BP001A mov BP, SP001C xor CX,CX001E mov CX, [BP+6]0021 mov BX, [BP+8]0024 xor AX,AX0026 xor SI,SI0028 repeta:0028 add AX, [BX][SI]002A inc SI002B inc SI002C loop repeta002E mov BX, [BP+4]0031 mov [BX],AX0033 pop BP0034 ret 60037 addv ENDPend START

-020004000A0014000000---

SS:0010000E000C000A00080006000400020000

0Ch00h23h00h10h00h17h00h04h

0807060504030201DS:00

00h00h00h56h00h

0D0C0B0ADS:09Zona de date

Zona de stiva

Page 113: Curs Virusologie - Part I

0014IP

DI

SI

SP

BP

DX

CX

BX

AX

0004

0010

0000

0000

000A

0056

15 0

Procesor 8088 - 80286.model small.stack 10h.data

n dw 4vector dw 23,16,35,12suma dw ?

.code0000 START:0000 mov ax,@data0003 mov ds,ax0005 mov AX, offset vector0008 push AX0009 mov AX,n000C push AX000D mov AX, offset suma0010 push AX

0011 CALL addv0014 mov ax, 4C00h0017 int 21h0019 addv PROC NEAR0019 push BP001A mov BP, SP001C xor CX,CX001E mov CX, [BP+6]0021 mov BX, [BP+8]0024 xor AX,AX0026 xor SI,SI0028 repeta:0028 add AX, [BX][SI]002A inc SI002B inc SI002C loop repeta002E mov BX, [BP+4]0031 mov [BX],AX0033 pop BP0034 ret 60037 addv ENDPend START

-020004000A001400----

SS:0010000E000C000A00080006000400020000

0Ch00h23h00h10h00h17h00h04h

0807060504030201DS:00

00h00h00h56h00h

0D0C0B0ADS:09Zona de date

Zona de stiva

Page 114: Curs Virusologie - Part I

0017IP

DI

SI

SP

BP

DX

CX

BX

AX

0004

0010

0000

0000

000A

4C00

15 0

Procesor 8088 - 80286.model small.stack 10h.data

n dw 4vector dw 23,16,35,12suma dw ?

.code0000 START:0000 mov ax,@data0003 mov ds,ax0005 mov AX, offset vector0008 push AX0009 mov AX,n000C push AX000D mov AX, offset suma0010 push AX

0011 CALL addv0014 mov ax, 4C00h0017 int 21h0019 addv PROC NEAR0019 push BP001A mov BP, SP001C xor CX,CX001E mov CX, [BP+6]0021 mov BX, [BP+8]0024 xor AX,AX0026 xor SI,SI0028 repeta:0028 add AX, [BX][SI]002A inc SI002B inc SI002C loop repeta002E mov BX, [BP+4]0031 mov [BX],AX0033 pop BP0034 ret 60037 addv ENDPend START

---------

SS:0010000E000C000A00080006000400020000

0Ch00h23h00h10h00h17h00h04h

0807060504030201DS:00

00h00h00h56h00h

0D0C0B0ADS:09Zona de date

Zona de stiva

Page 115: Curs Virusologie - Part I

I.9 MACRODEFINITII

a)DEFINIRE SI EXPANDARE

SecvenSecvenŃŃa de program scris in limbaj de asamblare care a de program scris in limbaj de asamblare care corespunde unei secvencorespunde unei secvenŃŃe cu caracter repetat.e cu caracter repetat.

Forma generala este:Forma generala este:

nume_macronume_macro MACROMACRO;Corp instruc;Corp instrucŃŃiuniiuni

ENDMENDM

DiferenDiferenŃŃa fata de proceduri => procesul de a fata de proceduri => procesul de macroexpandaremacroexpandare ––la asamblare apelul la asamblare apelul macrodefinitieimacrodefinitiei este este îînlocuit cu secvennlocuit cu secvenŃŃa a de cod din corpul acesteia.de cod din corpul acesteia.

Page 116: Curs Virusologie - Part I

I.9 MACRODEFINITII

Salvare registri generali:savereg MACRO

push AXpush BXpush CXpush DXpush SIpush DI

ENDM

Restaurare registri generali:restreg MACRO

pop DIpop SIpop DXpop CXpop BXpop AX

ENDM

Procedura1 PROC NEARsavereg…restregRET

Procedura1 ENDP

Procedura1 PROC NEARpush AXpush BX…pop BXpop AXRET

Procedura1 ENDP

Apel si macroexpandare:

b)b)MACRODEFINITII FARA PARAMETRIMACRODEFINITII FARA PARAMETRI

Page 117: Curs Virusologie - Part I

I.9 MACRODEFINITII

c)c)MACRODEFINITII MACRODEFINITII CUCU PARAMETRIPARAMETRI

nume_macronume_macro MACROMACRO P1, P2,P1, P2,……, , PnPn;Corp ;Corp instructiuniinstructiuni

ENDMENDM

add02 add02 MACROMACRO a, b, sa, b, spush AXpush AX

movmov AX, aAX, aadd AX, badd AX, bmovmov s, AXs, AX

pop AXpop AXENDMENDM

EvaluareaEvaluarea expresieiexpresiei::e = a + b + c + de = a + b + c + d

add02 a, b, eadd02 a, b, eadd02 e, c, eadd02 e, c, eadd02 e, d, eadd02 e, d, e

Page 118: Curs Virusologie - Part I

I.9 MACRODEFINITII

c)c)MACRODEFINITII CU PARAMETRIMACRODEFINITII CU PARAMETRI

swap01 swap01 MACROMACRO X, YX, Ypushpush AXAXpushpush BXBXmov BX, Xmov BX, Xmov AX, Ymov AX, Ymov X, AXmov X, AXmov Y, BXmov Y, BXpop BXpop BXpop AXpop AX

ENDMENDM

swap01 AX, SIswap01 AX, SI ; ; InterschimbaInterschimba AX cu SI ? AX cu SI ? pushpush AXAXpushpush BXBXmov BX, AXmov BX, AXmov AX, SImov AX, SImov AX, mov AX, AXAXmov SI, BXmov SI, BXpop BXpop BXpop AXpop AX

swap01 SP, DIswap01 SP, DI ; ; InterschimbaInterschimba SP cu DI ? SP cu DI ? pushpush AXAXpushpush BXBXmov BX, SPmov BX, SPmov AX, DImov AX, DI

mov SP, AX mov SP, AX ; Aici se modifica SP; Aici se modifica SPmov DI, BX mov DI, BX ; si ; si POPPOP--urileurilepop BX pop BX ; sunt; suntpop AX pop AX ; compromise (XCHG rezolvare); compromise (XCHG rezolvare)

Trebuie acordata atenŃie la modificarea conŃinutului registrului SP care controlează accesul la zona de date a stivei

Page 119: Curs Virusologie - Part I

I.9 MACRODEFINITII

d)d)ETICHETE SI VARIABILE LOCALEETICHETE SI VARIABILE LOCALE

EticheteEtichete locale (la locale (la macroexpandaremacroexpandare maxim maxim 10000)10000)

minim minim MACRO MACRO a, b, c, mina, b, c, minlocal local et1et1,, et2et2pushpush AXAXmovmov AXAX, a, acmpcmp AXAX, b, bjlzjlz et1et1movmov AXAX, b, b

et1et1::cmpcmp AXAX, c, cjlzjlz et2et2movmov AXAX, c, c

et2et2::movmov min, min, AXAXpoppop AXAX

ENDMENDM

VariabileVariabile localelocale

mask mask MACRO MACRO XXlocal local mascamasca.data.datamascamasca equequ 00001111b00001111b.code.codepushpush AXAXmovmov ALAL, X, Xand and ALAL, , mascamascamovmov X, X, ALALpoppop AXAX

ENDMENDM

Page 120: Curs Virusologie - Part I

I.9 MACRODEFINITII

d)d)ETICHETE SI VARIABILE LOCALEETICHETE SI VARIABILE LOCALE

Program principal:Program principal:……minim x, y, z, min1minim x, y, z, min1minim w, v, u, min2minim w, v, u, min2minim i, j, k, min3minim i, j, k, min3minim min1, min2, min3, minminim min1, min2, min3, min……

……pushpush AXAXmovmov AXAX, x, xcmpcmp AXAX, y, yjlzjlz et10000et10000movmov AXAX, y, y

et10000et10000::cmpcmp AXAX, z, zjlzjlz et20000et20000movmov AXAX, z, z

et20000et20000::movmov min1, min1, AXAXpoppop AXAXpushpush AX AX

movmov AXAX, w, wcmpcmp AXAX, v, vjlzjlz et10001et10001movmov AXAX, v, v

et10001et10001::cmpcmp AXAX, u, ujlzjlz et20001et20001movmov AXAX, u, u

et20001et20001::movmov min2, min2, AXAXpoppop AXAX

……

MACROEXPANDARE MACROEXPANDARE 1

MACROEXPANDARE 2

Page 121: Curs Virusologie - Part I

I.9 MACRODEFINITII

e)e)MACRODEFINITII REPETITIVE SI MACRODEFINITII REPETITIVE SI OPERATORI SPECIFICIOPERATORI SPECIFICI

REPT nREPT n;;corpcorp macroinstructiunimacroinstructiuni

ENDMENDM

IRP IRP p_formalp_formal, <, <lista_par_actualilista_par_actuali>>;;corpcorp macroinstructiunimacroinstructiuni

ENDMENDM

REPTREPT 33m_mesajm_mesaj

;;macroinstructiunemacroinstructiuneENDMENDM

m_mesajm_mesajm_mesajm_mesajm_mesajm_mesaj

IRPIRP x, <x, <‘‘aa’’, , ‘‘bb’’, , ‘‘cc’’>>db xdb x

ENDMENDM

db db ‘‘aa’’db db ‘‘bb’’db db ‘‘cc’’

EXEMPLU EXEMPLU

Page 122: Curs Virusologie - Part I

I.9 MACRODEFINITII

f)f)MACRODEFINITII DERIVATEMACRODEFINITII DERIVATE

add04 add04 MACRO MACRO a1, a2, a3, a4, sa1, a2, a3, a4, spushpush AXAXmovmov AXAX, a1, a1add add AXAX, a2, a2add add AXAX, a3, a3add add AXAX, a4, a4movmov s, s, AXAXpoppop AXAX

ENDMENDM

add02 add02 MACRO MACRO a1, a2, suma1, a2, sumpushpush AXAXmovmov AXAX, a1, a1add add AXAX, a2, a2

movmov sum, sum, AXAXpoppop AXAX

ENDMENDMSoluŃie iniŃiala

add04 add04 MACRO MACRO a1, a2, a3, a4, sa1, a2, a3, a4, sadd02 a1, a2, sadd02 a1, a2, sadd02 s, a3, sadd02 s, a3, sadd02 s, a4, sadd02 s, a4, s

ENDMENDM

add04 add04 MACRO MACRO a1, a2, a3, a4, sa1, a2, a3, a4, slocal t1, t2local t1, t2.data.datat1 t1 dwdw ??t2 t2 dwdw ??.code.code

add02 a1, a2, t1add02 a1, a2, t1add02 a3, a4, t2add02 a3, a4, t2add02 t1, t2, sadd02 t1, t2, s

ENDMENDM

DERIVARE

Page 123: Curs Virusologie - Part I

I.10 ÎNTRERUPERI SI LUCRUL CU CONSOLA SI DISCUL

a)ÎNTRERUPERI

Utilizarea intreruperilor permite:•transferul executiei catre o alta locatie (rutine de intrerupere)•accesul functiilor MS-DOS si a ROM-BIOS-ului din limbajele de asamblare

Caracteristici:•se apeleaza cu insructiunea INT urmata de o valore cuprinsa intre 0 si 255;•rutinele de intrerupere MS-DOS si BIOS accepta parametrii prin registre;•majoritatea rutinelor MS-DOS primesc codul functiei in registrul AH

mesaj DB “Exemplu apel intreruperi !”,’$’.code

MOV AX, @dataMOV DS,AXMOV DX, offset mesajMOV AH,09hINT 21h

Afiseaza mesaj la consola

Page 124: Curs Virusologie - Part I

I.10 ÎNTRERUPERI SI LUCRUL CU CONSOLA SI DISCUL

a)ÎNTRERUPERI

PROCESOR

RAM

apelintrerupere

0000:0000h

CF

PF

AF

ZF

SF

TF = 0

IF = 0

DF

OF

-CSIP-

SS:0010000E000C000A……

INT 21h

SEG:OFF

0084

INT 255 INT2INT1INT0

SEG:OFFSEG:OFFSEG:OFFSEG:OFF

03FC……000800040000

00000h FFFFFh

RO

M-B

IOS

ST

IVA

…MOV DX, offset mesajMOV AH,09hINT 21h…

DA

TE

KE

RN

EL-O

S

CO

D

INT

RE

RU

PE

I

FA

T

RO

M-B

IOS

D

AT

A

Tabela V

ectoriîntrerupere

Page 125: Curs Virusologie - Part I

I.10 ÎNTRERUPERI SI LUCRUL CU CONSOLA SI DISCUL

a)ÎNTRERUPERILa executia intreruperii procesorul:

• cauta adresa rutinei de intrerupere in Tabela Vectorilor de Intrerupere; aceasta se gaseste la baza memoriei (segment 0, offset 0) si contine pointeri de tip far (segment:offset) catre handlerul rutinei de intrerupere; pozitia in vectorul de intreruperi defineste numarul intreruperii (int 21h � 0000h:(0021*4)h);

• pune 0 in bitii de flag TF (trap flag) si IF (interrupt enable flag);

• salveaza registrul indicatorilor de stare (registru de flag – ZF, PF, CF, etc)

• salveaza pe stiva CS si IP;

• face salt la adresa rutinei de intrerupere;

• executa codul rutinei pana gand intalneste IRET;

• restaureaza IP, CS

• restaureaza registrul indicatorilor de stare (flag – ZF, PF, CF, etc)

• seteaza bitii de flag.

Page 126: Curs Virusologie - Part I

I.10 ÎNTRERUPERI SI LUCRUL CU CONSOLA SI DISCUL

b)FIŞIERE

Este identificat prin:•nume (şir de caractere), la operaŃiile de deschidere şi creare•handler (valoare pozitivă pe 16 biŃi ce identifică în mod unic fişierul pe disc sau alte dispozitive), la operaŃiile de închidere, citire, scriere, poziŃionare

HANDLER-E ASOCIATE UNOR DISPOZITIVE STANDARD:

Imprimantă standardstdprn4

Dispozitiv auxiliarstdaux3

Ieşire standard pentru mesaje de eroarestderr2

Ieşire standardstdout1

Intrare standardstdin0

DescriereDenumire

Valoare

Page 127: Curs Virusologie - Part I

I.10 ÎNTRERUPERI SI LUCRUL CU CONSOLA SI DISCUL

b)FIŞIERE

PRINCIPALELE FUNCłII DOS PENTRU LUCRUL CU FIŞIERE SUNT:

Redenumire fi şier56h

Pozi Ńionare în fi şier42h

Ştergere în fi şier41h

Scriere în fi şier40h

Citire din fi şier3Fh

Închidere fi şier3Eh

Deschidere fi şier3Dh

Creare fi şier3Ch

Opera ŃieCod func Ńie (AH)

în funcŃie de carry flag- rezultat operaŃie

AX- handler

Parametrii returnaŃi:

CX- atribut fişier

DX- nume fişier

3Ch → AH- cod funcŃie

Registru corespondentParametrii intrare:

La momentul creării, tipul fişierul poate fi:•read-only (1)•hidden (2)•system (4)•normal (0)

Page 128: Curs Virusologie - Part I

I.10 ÎNTRERUPERI SI LUCRUL CU CONSOLA SI DISCUL

b)FIŞIERE.datahandler dw ? ;handler la fişieratribut dw ? ;atribut creare fişiertipDeschid dw ? ;modul de deschidere a fişieruluirez db ? ;variabilă verificare reuşită operaŃienumeFis db ’fisier.dat’,0 ;nume fişierNrOctetideScris dw ? ;numărul de octeŃi de scris în fişierNrOctetiScrisi dw ? ;numărul de octeŃi scrişi efectiv în fişier.codeCreare MACRO numeFis, atribut, handler, rezlocal eroare, final

push AXpush CXpush DXmov AH,3Ch ;încarc codul funcŃieimov CX,atribut ;pun atributul fişieruluilea DX,numeFis ;încarcă în DX adresa şirului de caractere asociat numeluiINT 21h ;apelez întreruperea 21hjc eroare ;dacă operaŃia nu a avut loc cu succes CF este setat

;verific reuşita operaŃieimov handler,AX ;dacă fişierul a fost creat iniŃializez handler-ulmov rez,0 ;iniŃializez variabila rez cu 0jmp final ;salt la sfârşit macro

eroare: ;în caz de eroaremov handler,-1 ;iniŃializez handler-ul cu o valoare negativămov rez,AX ;reŃin in rez codul erorii (este diferit de 0)

final:pop DXpop CXpop AX

ENDM

Page 129: Curs Virusologie - Part I

I.10 ÎNTRERUPERI SI LUCRUL CU CONSOLA SI DISCUL

b)FIŞIERE

în funcŃie de carry flag- rezultat operaŃie

AX- handler

Parametrii returnaŃi:

AL- tip acces

DX- nume fişier

3Dh → AH- cod funcŃie

Registru corespondentParametrii intrare:

în funcŃie de carry flag- rezultat operaŃie

AX- număr octeŃi scrişi efectiv în fişier

Parametrii returnaŃi:

CX- număr octeŃi de scris în fişier

DX- buffer din care se citesc datele pentru a fi scrise in fişier

BX- handler fişier

40h → AH- cod funcŃie

Registru corespondentParametrii intrare:

SCRIERE în FIŞIER

DECHIDERE FIŞIER

Page 130: Curs Virusologie - Part I

I.10 ÎNTRERUPERI SI LUCRUL CU CONSOLA SI DISCUL

b)FIŞIERE

în funcŃie de carry flag- rezultat operaŃie

AX- număr octeŃi citiŃi efectiv din fişier

Parametrii returnaŃi:

CX- număr octeŃi de citit din fişier

DX- buffer în care se scriu datele citite din fişier

BX- handler fişier

3Fh → AH- cod funcŃie

Registru corespondentParametrii intrare:

în funcŃie de carry flag- rezultat operaŃie

cuv. inferior → AXcuv. superior → DX

- noua poziŃie în fişier (un double)

Parametrii returnaŃi:

cuv. inferior → DX cuv. superior → CX

- număr octeŃi faŃă de punctul de referinŃă ai saltului (e un double)

AL- punct de referinŃă

BX- handler fişier

42h → AH- cod funcŃie

Registru corespondentParametrii intrare:

POZIłIONARE în FIŞIER

CITIRE din FIŞIER

Page 131: Curs Virusologie - Part I

I.11 LUCRU CU SIRURI DE CARACTERE

I.11.1 Etape pentru lucru cu siruri de caractere

1. Se initializeaza DS:SI cu deplasament SRS2. Se initializeaza ES:DI cu deplasament DST3. Se initializeaza CX cu lungimea memoriei supusaprelucrarii. Preferabil minim dintre lungimesirsursa – SRS si destinatie – DST.

4. DF – Direction flag• 0 (CLD) – parcurgerea sirurilor de la stanga la dreapta

• 1 (STD) – parcurgerea sirurilor de la stanga la dreapta

Page 132: Curs Virusologie - Part I

I.11 LUCRU CU SIRURI DE CARACTERE

I.11.2 Instructiuni pentru siruri de caractere

1. movsb si movsw2. cmpsb si cmpsw3. lodsb si loadsw4. stosb si stosw5. scasb si scasw

Page 133: Curs Virusologie - Part I

• movsb

• movsw

I.11.2 Instructiuni pentru siruri de caractere

1. Muta sir sursa in sir destinatie

• DF=0 (CLD)• ((SI))=((DI))• (SI)=(SI)+1• (DI)=(DI)+1• DF=0 (CLD)• ((SI))=((DI))• (SI)=(SI)+2• (DI)=(DI)+2

• DF=1 (STD)• ((SI))=((DI))• (SI)=(SI)-1• (DI)=(DI)-1• DF=1 (STD)• ((SI))=((DI))• (SI)=(SI)-2• (DI)=(DI)-2

I.11 LUCRU CU SIRURI DE CARACTERE

Page 134: Curs Virusologie - Part I

• cmpsb

• cmpsw

I.11.2 Instructiuni pentru siruri de caractere

2. Compara prin scadere temporara dst vs srs

• DF=0 (CLD)• ((DI))-((SI))• (SI)=(SI)+1• (DI)=(DI)+1• DF=0 (CLD)• ((DI))-((SI))• (SI)=(SI)+2• (DI)=(DI)+2

• DF=1 (STD)• ((DI))-((SI))• (SI)=(SI)-1• (DI)=(DI)-1• DF=1 (STD)• ((DI))-((SI))• (SI)=(SI)-2• (DI)=(DI)-2

I.11 LUCRU CU SIRURI DE CARACTERE

Page 135: Curs Virusologie - Part I

• lodsb

• lodsw

I.11.2 Instructiuni pentru siruri de caractere

3. Incarcarea srs in registrul acumulator al microprocesorului

• DF=0 (CLD)• (AL)=((SI))• (SI)=(SI)+1

• DF=0 (CLD)• (AX)=((SI))• (SI)=(SI)+2

• DF=1 (STD)• (AL)=((SI))• (SI)=(SI)-1

• DF=1 (STD)• (AX)=((SI))• (SI)=(SI)-2

I.11 LUCRU CU SIRURI DE CARACTERE

Page 136: Curs Virusologie - Part I

• stosb

• stosw

I.11.2 Instructiuni pentru siruri de caractere

4. Inregistrarea registrului acumulator al microprocesorului in dst

• DF=0 (CLD)• ((DI))=(AL)• (DI)=(DI)+1

• DF=0 (CLD)• ((DI))=(AX)• (DI)=(DI)+2

• DF=1 (STD)• ((DI))=(AL)• (DI)=(DI)-1

• DF=1 (STD)• ((DI))=(AX)• (DI)=(DI)-2

I.11 LUCRU CU SIRURI DE CARACTERE

Page 137: Curs Virusologie - Part I

• scasb

• scasw

I.11.2 Instructiuni pentru siruri de caractere

5. Scanare zona de memorie prin scaderea temporara a sursei din registrului acumulator

• DF=0 (CLD)• (AL)-((SI))• (SI)=(SI)+1

• DF=0 (CLD)• (AX)-((SI))• (SI)=(SI)+2

• DF=1 (STD)• (AL)-((SI))• (SI)=(SI)-1

• DF=1 (STD)• (AX)-((SI))• (SI)=(SI)-2

I.11 LUCRU CU SIRURI DE CARACTERE

Page 138: Curs Virusologie - Part I

I.11.3 Exemple

1. Copierea unui sir in alt sir2. Compararea daca 2 siruri sunt echivalente (procedura)

I.11 LUCRU CU SIRURI DE CARACTERE

Page 139: Curs Virusologie - Part I

I.11.3 Exemple

1. Copierea unui sir in alt sir2. Compararea daca 2 siruri sunt echivalente (procedura)

ciclu:mov AL, [SI]mov [DI], ALINC SIINC DIloop ciclu

movsb rep movsb

I.11 LUCRU CU SIRURI DE CARACTERE

Page 140: Curs Virusologie - Part I

I.11 LUCRU CU SIRURI DE CARACTERE

I.11.3 Exemple

1. Copierea unui sir in alt sir2. Compararea daca 2 siruri sunt echivalente (procedura)

rep repe sau repz

CX!=0 CX!=0si

ZF!=0

NUNU

DA

movsb, lodsb, stosbmovsw, lodsw, stosw

cmpsb, scasbcmpsw, scasw

Page 141: Curs Virusologie - Part I

I.11.3 Exemple1. Copierea unui sir in alt sir

.model large

exit_dos MACROmov ax,4c00hint 21hENDM

DATEprog SEGMENTsrc db 'Sirul meu sursa$'dimsrc dw $-srcdst db '111111111111111$'dimdst dw $-dstDATEprog ENDS

;nu vreau stiva momentanSEGProg SEGMENTASSUME DS:DATEProg,ES:DATEProg,CS:SEGProg

start:mov AX, SEG srcmov DS,AXmov ES,AXcldmov SI, offset srcmov DI, offset dstmov cx, dimsrcrep movsb

; ciclu:;;movsb;lodsb;stosb

; loop cicluexit_dos

SEGProg ENDSend start

I.11 LUCRU CU SIRURI DE CARACTERE

Page 142: Curs Virusologie - Part I

I.11 LUCRU CU SIRURI DE CARACTEREI.11.3 Exemple2. Compararea daca 2 siruri sunt echivalente (procedura)

.model large

exit_dos MACROmov ax,4c00hint 21hENDM

DATEprog SEGMENTsrc db 'Sirul meu sursa$',0dimsrc dw $-srcdst db 'Sirul1111111111$',0dimdst dw $-dstDATEprog ENDS

Stiva SEGMENTdw 10 dup(?)varf label word

Stiva ENDS

SEGProg SEGMENTASSUME DS:DATEProg,ES:DATEProg,SS:Stiva,CS:SEGProg

start:mov AX, SEG srcmov DS,AXmov ES,AXmov ax, Stivamov ss,axmov sp,varf

;procedura far da rezultatul in DX=pozitia pt prima d iferenta;int compara1(char* s,char* d, short int length);

mov ax, dimsrcpush axmov ax, offset dstpush axmov ax, offset srcpush ax;apel proceduraCALL FAR PTR compara1exit_dos

SEGProg ENDS**aici e segmentul de proceduriend start

Page 143: Curs Virusologie - Part I

I.11 LUCRU CU SIRURI DE CARACTERE

I.11.3 Exemple2. Compararea daca 2 siruri sunt echivalente (procedura)

;**continuareProceduri SEGMENTASSUME CS:Proceduri

compara1 PROC FARpush bpmov bp, sp;se deseneaza stiva;bp;IP;CS;adr-offset src;adr-offset dst;dimsrc; ;[bp+4] ;[bp+8] ;[bp+10]

cldmov SI, [bp+6]mov DI, [bp+8]mov cx, [bp+10]

ciclu_i:cmpsbjnz not_eq

loop ciclu_i eqq:mov DX,0jmp sfarsitproc

not_eq:mov DX,CX

sfarsitproc:pop bpret 6h

compara1 ENDPProceduri ENDS


Recommended