SlideShare a Scribd company logo
1 of 26
Limbaje de asamblare
  2.Setul de instructiuni ISA x86
Sintaxa instructiunilor
• <linie_program>:= [<eticheta>:] [<prefix>] [<instructiune>|
  <directiva>] [;<comentar>]

• <eticheta> - sir de litere si cifre, care incepe cu o litera
• <prefix> - cuvant cheie care modifica regimul de executie al
  instructiunii care urmeaza (ex: REP – repeta instructiunea
  urmatoare de un nr. de ori)
• <instructiune>:= <mnemonica> [<operand1>
  [,<operand2>]]
• <mnemonica> - grup de litere care simbolizeaza o
  instructiune
• <operand1>:= <registru>|<variabila>
• <operand2>:= <val_imediata>|<operand1>
Sintaxa instructiunilor (continuare)
• <registru> := EAX|EBX|...AX|BX| .. |AH|BH|.. |AL|
  BL| ...|CS|DS, ...|GS => nume de registru
• <variabila>:= <nume_var>|<adresa_var>
• <adresa_var>:=[<nume_var>]'['[reg_index]
  [+<reg_baza>] [+<deplasament>]']'
• <val_imediata>:=<numar>|<expresie>
   – un numar sau o expresie aritmetico-logica care se poate evalua in
     momentul compilarii; se poate exprima in zecimal, hexazecimal
     (indicativul H) sau binar (indicativul B)
• <deplasament> := <val_pe_16biti>|<val_pe_32biti>
   – valoare exprimabila pe 16 sau 32 biti
• <comentar> - text (cu caracter explicativ) ignorat de
  compilator
Sintaxa instructiunilor x86
• Exemple:
  – instructiuni fara operand
      NOP
      MOVSB
  – instructiuni cu un operand
      PUSH AX
      ROR DX
  – instructiuni cu doi operanzi
      MOV AX, BX
  – linie cu eticheta instructiune si comentar
      START:     MOV AX,BX                 ;muta cont. AX in BX
  – linie de comentar
      ; aceasta este o linie de comentar
  – linie cu eticheta
      ETICHETA:
Reguli sintactice
• o linie de program poate contine maxim o instructiune
  (mnemonica + operanzi) sau o directiva
• o linie poate contine:
   –   nici o entitate de instructiune (camp) – linie goala
   –   numai etichet
   –   numai comentar
   –   combinatii de eticheta, instructiune, directiva si comentar
• un comentar incepe cu ';' si se incheie la sfarsitul liniei
• o instructiune x86 poate contine maxim 2 campuri de
  operanzi:
   – operand1 – indica destinatia sau rezultat si primul termen al unei
     operatii unare sau binare
   – operand2 – indica sursa sau al doilea termen al unei operatii
     binare
Reguli sintactice - Exemple
NOP
   • instructiune fara operanzi
MOVSB
   • instructiune cu operanzi impliciti
MUL CL
   • instructiune cu primul operand implicit (AX=AL*CL)
MOV AX, BX
   • AX – destinatia , BX sursa transferului
INC SI
   • SI – termenul incrementat si destinatia rezultatului
ADD CX,DX
   • CX – primul termen al sumei si destinatia rezultatului, DX – al
     doilea termen
ADD AX,BX,CX
   • instructiune incorecta, prea multi operanzi
Reguli sintactice
• pt. scrierea programului pot fi folosite litere mici si
  mari, insa asamblorul nu face distinctie intre literele mici
  si mai
• separarea campurilor dintr-o instructiune se poate face cu
  un numar arbitrar de caractere <spatiu> si <tab>
• pt. lizibilitate se recomanda aranjarea campurilor pe
  coloane distincte, separate prin <tab>:
   – eticheta: mnemonica         operanzi         ;comentar
• se recomanda utilizarea de nume simbolice in locul unor
  valori numerice
   ex:     adrese de variabila => nume_variabila,
         • adrese de instructiune => eticheta,
         • valori de constante numerice=>nume_constanta
Reguli sintactice- simboluri
• Simboluri, identificatori, etichete:
   – secventa de litere, cifre si unele caractere speciale (ex: _, $,
     @), ?), care nu incepe cu o cifra
   – lungimea simbolului este arbitrara, dar se considera primele 31
     caractere
   – exista simboluri rezervate, predefinite in limbaj (cuvinte cheie pt.
     instructiuni, directive, macrodefinitii)
   – exemple:
       • L1     Bletch     RightHere       Right_Here
          Item1 __Special
       • $1234    @Home    $_1    Dollar$  WhereAmI?
            @1234
       • erori:
       • 1TooMany – incepe cu o cifra
       • Hello.There – contine punct
       • $ - $ sau ? nu poate sa apara singur
       • LABEL – cuvant rezervat.
Reguli sintactice - constante

• Constante:
  – intregi: 12, 21d, 123h, 0fffh, 1011b
  – reale (flotant): 1.5, 1.0e10, 23.1e-12
  – sir de caractere: "text", 'Text', 'TEXT''TEXT'
  – constante simbolice: - nume simbolic dat pentru o
    secventa de caractere (text); ex:
  unu      equ 1
  numar = 26
  var      textequ <5[bx]> ; 5[bx] – constanta textuala
Reguli sintactice - operanzi
•   operanzii unei instructiuni trebuie sa fie de aceeasi lungime: octet,
    cuvant, dublu-cuvant (exceptii: operatii de inmultire si impartire)
•   o instructiune poate contine cel mult un operand de tip locatie de
    memorie
     – formatul instructiunilor x86 permite exprimarea adresei unei singure
       locatii de memorie
     – pentru o operatie aritmetica sau logica intre doua variabile (locatii de
       memorie) unul dintre operanzi trebuie sa se transfere temporar intr-un
       registru intern
     – aceasta restrictie favorizeaza operatiile pe registre – pt. cresterea
       eficientei de executie
•   instructiunile sunt echivalente ca nivel de structurare si sunt
    independente intre ele
     – nu exista forme de programare structurata
     – structurarea programului se poate face la nivel logic (formal) prin
        directive
Semnificatia entitatilor unei linii de program
• Eticheta:
   – nume simbolic dat unei adrese de memorie unde incepe
     instructiunea care urmeaza dupa eticheta
   – util pentru instructiuni de salt si apel de rutine
   – se exprima prin : <adresa_segment>: <adresa_offset>
• Mnemonica (numele) instructiuii:
   – nume simbolic dat unui cod de instructiune (2, 3, 4 sau 5 litere)
   – semnifica un anumit tip de operatie elementara direct executabila
     de UCP
   – aceeasi mnemonica poate simboliza mai multe coduri cu
     semnificatie apropiata (ex: MOV, ADD, ...)
   – acelasi cod de instructiune se poate exprima prin mnemonici
     diferite (ex: JZ si JE)
   – fiecarei instructiuni in L.A. ii corespunde strict o instructiune in
     cod masina (relatie biunivoca) !!!!!!!
Semnificatia entitatilor unei linii de program

• Operand:
  – camp care exprima un termen al operatiei elementare
    exprimata prin mnemonica
  – indica locul si modul de regasire al operandului
    (modul de adresare folosit)
  – tipuri de operanzi:
      • registre interne ale UCP:
      • date imediate (constante numerice)
      • locatii de memorie (variabile)
      • porturi de intrare sau de iesire (registre de I/E)
Semnificatia entitatilor unei linii de program
                 (operanzi)
• Registre interne:
   – registre generale:
       • (8 biti) AH,AL,BH,BL,CH,CL,DH,DL
       • (16 biti) AX, BX,CX,DX, SI,,DI,SP, BP
       • (32 biti) EAX, EBX,ECX,EDX, ESI,EDI,ESP, EBP
   – registre speciale: CS,DS, SS, ES, FS,GS, GDTR,
     LDTR , CR0,..CR4, PSW
• Date imediate (constante):
   – numar sau expresie aritmetico-logica evaluabila la un numar =>
     expresia trebuie sa contina numai constante
   – valoarea este continuta in codul instructiunii
   – lungimea constantei – in acord cu lungimea celui de al doilea
     operand (octet, cuvant sau dublu-cuvant)
   – ex: 0, -5, 1234h, 0ABCDh, 11001010b, 1b, 8* 4 - 3
Semnificatia entitatilor unei linii de program
                 (operanzi)
• Locatii de memorie (variabile):
   – expresie care exprima adresa unei locatii de memorie de o
     anumita lungime
   – lungimea variabilei:
       • in acord cu al doilea operand (daca exista)
       • se deduce din declaratia numelui de variabila
       • se indica in mod explicit ('byte', 'word', 'dword')
   – adresa variabilei:
       • adresa de segment:
           – specificata in mod implicit – continutul registrului DS
           – exprimata in mod explicit: <reg_segment>:<variabila>
           ex: CS: Var1, ES: [100h]
       • adresa de offset - adresa relativa in cadrul segmentului
Semnificatia entitatilor unei linii de program
            (operanzi; variabile)
• adresa de offset
   – adresa poate sa fie pe 16 biti (modul real) sau pe 32 biti (modul
     protejat)
   – exprimabila in mai multe moduri:
      • adresa fizica: valoare concreta de adresa
            – '['<adresa_offset>']',ex:   MOV AX, [100h]
            – '[ '[<reg_baza>] [+<reg_index>] [<deplasament>']'
                                     ex: MOV AX, [BX+SI+100h]
       • adresa simbolica: - nume simbolic dat unei variabile
            – VAR1, TEXT, VAR+5
            – VAR[BX], VAR[BX+SI]
   <reg_baza>:= BX|BP|EBX|EBP
   <reg_index>:=SI|DI|ESI|EDI
Calculul adresei unei variabile
            (in modul real)
15             0
                             Adr. offet         Adr. fizica
 Deplasament       +    +                   +
                              (16 biti)         (20 biti)
     SI
     DI

     BX
     BP


     CS
     DS                      Adr. segment
     SS                *16
     ES
Semnificatia entitatilor unei linii de program
                 (operanzi)
• Porturi de Intrare/Iesire
   – registre continute in interfetele de intrare/iesire
   – spatiul de adresare maxim: 64Ko (adr. maxima 0FFFFH)
   – la PC-uri spatiul este limitat la 1ko (adr. maxima 3FFH) (?)
   – pe aceeasi adresa pot fi 2 registre:
       • un reg. de intrare si unul de iesire
   – porturile apar doar in instructiunile IN si OUT
   – specificare:
       • direct, prin adresa fizica (daca adresa este exprimabila pe un
         octet) sau nume simbolic
       ex:   IN  AL, 12h
             OUT 33h, AL
       • indirect, prin adresa continuta in registrul DX
       ex:   IN  AL,DX
             OUT DX,AL
Moduri de adresare pt. ISA x86
• Moduri 8086
• Adresarea imediata:
   – operandul este o constanta
   – operandul este continut in codul instructiunii
   – operandul este citit o data cu instructiunea
   – instr. poate lucra cu o singura valoare
   – lungimea constantei este in acord cu celalalt operand
   – flexibilitate limitata
   – exemple:
     MOV AL, 12h               MOV AL,120
     MOV AX, 12ABh             MOV AL, 260 - eroare
Moduri de adresare pt. ISA x86
                      Moduri 8086
• Adresarea de tip registru:
   – operandul este continut intr-un registru al UCP
   – timp de acces foarte mic; nu necesita ciclu de transfer
     pe magistrala
   – instructiune scurta (nr. mic de biti pt. specificare
     operand)
   – numar limitat de registre interne => nu toate
     variabilele pot fi pastrate in registre
   – exista limitari in privinta registrelor speciale (ex:
     registrele segment)
   – exemple:
   MOV AX,BX                   MOV DS,AX
   MOV BX, AL – eronat MOV DS, 1234H - eronat
Moduri de adresare pt. ISA x86
                        Moduri 8086
• Adresarea directa (cu deplasament):
   – operanul este specificat printr-o adresa de memorie
     (adresa relativa fata de inceputul unui segment)
   – adresa operandului este continuta in codul
     instructiunii
   – instructiunea poate lucra cu o singura locatie de
     memorie (octet, cuvant sau dublu-cuvand)
   – necesita ciclu suplimentar de transfer cu memoria
     =>timp de executie mai mare
   – adresarea directa se foloseste pt. variabile simple (date
     nestructurate)
   – exemple:
   MOV AL, [100h]                     MOV BX, var1
   MOV CX, [1234h]                    MOV var2, SI
Moduri de adresare pt. ISA x86
                        Moduri 8086

• Moduri indirecte de adresare:
• Adresarea indirecta prin registru:
      •adresa operandului se specifica intr-un registru
      •registrele folosite pt. adresare: SI, DI, BX, BP
      •instructiunea contine adresa registrului
      •mod flexibil de adresare
      •exemple:
      MOV AL, [SI]
      MOV [BX], CX
Moduri de adresare pt. ISA x86
                           Moduri 8086
• Adresarea (indirecta) indexata:
   – adresa operandului se exprima printr-o adresa de baza, data de
     <deplasament> si un index dat de continutul unui registru
   – mod de adresare folosit pentru structuri de date de tip sir, vector,
     tablou
   – sintaxa: <nume_var>'['<reg_index>']'         <reg_index>:=SI|DI
               '['<reg_index>+<deplasament>']'
   – exemple:
   MOV AX, VAR[BX]         MOV CX, [SI+100H]
   MOV VAR[DI], AL MOV VAR[10H], 1234H

                    A[0] A[1] A[2] A[3]
  Deplasament      +       SI=i*lung.     = Adresa A[i]
Moduri de adresare pt. ISA x86
                          Moduri 8086
• Adresarea (indirecta) bazata:
   – adresa operandului se exprima printr-o adresa de baza, data de un
     registru si o adresa relativa data de <deplasament>
   – mod de adresare folosit pentru structuri de date de tip
     inregistrare
   – formal este identica cu adresarea indexata, dar alta interpretare
   – sintaxa: <nume_var>'['<reg_index>']'         <reg_baza>:=BX|BP
                 '['<reg_baza>+<deplasament>']'
   – exemple:
   MOV AX, VAR[BX]            MOV CX, [SI+100H]
   MOV VAR[DI], AL            MOV [SI][100h], 1234H
                      E1    E2       Ei        Ei+1

      BP           +    Depl. Ei        =     Adresa Ei
Moduri de adresare pt. ISA x86
                        Moduri 8086
• Adresarea mixta (bazat indexata):
  – adresa operandului se exprima printr-o adresa de baza, data de un
    registru, un index dat de un registru si o adresa relativa data de
    <deplasament>
  – mod de adresare folosit pentru structuri complexe de date de tip
    inregistrare de vectori sau vector de inregistrari
  – modul cel mai flexibil de adresare, dar necesita 2 adunari
  – sintaxa: <nume_var>'['<reg_baza>+<reg_index>']'
               '['<reg_baza>+<reg_index>+<deplasament>']'
               '['<reg_baza>']''['<reg_index>']''['<deplasament>']'
  exemple:
  MOV AX, VAR[BX+SI]               MOV CX, [BX+SI+100H]
  MOV VAR[BP+DI], AL               MOV VAR[BP+SI], 1234H
  MOV VAR[BP][DI], AL              MOV [100h][BP][SI], 1234H
Moduri de adresare pt. ISA x86
                  Moduri '386, .. Pentium
• modificari fata de 8086:
  – extensia registrelor generale la 32 biti: EAX, EBX, ...
  – toate registrele generale pot fi folosite pentru adresarea indirecta
    prin registru, indexata, bazata si mixta;
  – ex: [EAX], [ECX], VAR[EAX+ECX], [DX+AX+100h]
  – la adresarea mixta primul registru se considera registru de baza iar
    al doilea registru index
  – !!!!! modurile '386 sunt mai putin eficiente decat cele 8086 !!!!!
  obs:1. In modul real adresa de offset nu poate depasi limita de 64ko,
    chiar daca registrele sunt de 32 biti; in modul protejat adresa de
    offset se calculeaza pe 32 biti
      2. Registrul SP nu poate fi folosit ca registru index
      3. Daca se foloseste SP sau BP atunci implicit se lucreaza cu reg.
    segment SS
Moduri de adresare pt. ISA x86
                 Moduri '386, .. Pentium
• Adresarea indexata, scalata:
  – permite multiplicarea registrului index cu un factor
    egal cu lungimea unui element din sir:
     • 1 pt. octet, 2 pt. cuvant, 4 pt. dcuvant si 8 pt. qcuvant
  – simplifica parcurgerea tablourilor a caror elemente
    sunt mai mari de 1 octet
  – sintaxa: (in loc de '+' se poate folosi '][')
     '['<reg_index>*n']'
     '['<reg_index>*n + <deplasament> ']'
     '[' <reg_baza> + <reg_index>*n']'
     '[' <reg_baza> + <reg_index>*n + <deplasament> ']'
     ex: MOV AX, [SI*2]                MOV DX, [AX*4+12h]
           MOV CX, 100h[BX][AX*1]

More Related Content

Featured

Product Design Trends in 2024 | Teenage Engineerings
Product Design Trends in 2024 | Teenage EngineeringsProduct Design Trends in 2024 | Teenage Engineerings
Product Design Trends in 2024 | Teenage EngineeringsPixeldarts
 
How Race, Age and Gender Shape Attitudes Towards Mental Health
How Race, Age and Gender Shape Attitudes Towards Mental HealthHow Race, Age and Gender Shape Attitudes Towards Mental Health
How Race, Age and Gender Shape Attitudes Towards Mental HealthThinkNow
 
AI Trends in Creative Operations 2024 by Artwork Flow.pdf
AI Trends in Creative Operations 2024 by Artwork Flow.pdfAI Trends in Creative Operations 2024 by Artwork Flow.pdf
AI Trends in Creative Operations 2024 by Artwork Flow.pdfmarketingartwork
 
PEPSICO Presentation to CAGNY Conference Feb 2024
PEPSICO Presentation to CAGNY Conference Feb 2024PEPSICO Presentation to CAGNY Conference Feb 2024
PEPSICO Presentation to CAGNY Conference Feb 2024Neil Kimberley
 
Content Methodology: A Best Practices Report (Webinar)
Content Methodology: A Best Practices Report (Webinar)Content Methodology: A Best Practices Report (Webinar)
Content Methodology: A Best Practices Report (Webinar)contently
 
How to Prepare For a Successful Job Search for 2024
How to Prepare For a Successful Job Search for 2024How to Prepare For a Successful Job Search for 2024
How to Prepare For a Successful Job Search for 2024Albert Qian
 
Social Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie InsightsSocial Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie InsightsKurio // The Social Media Age(ncy)
 
Trends In Paid Search: Navigating The Digital Landscape In 2024
Trends In Paid Search: Navigating The Digital Landscape In 2024Trends In Paid Search: Navigating The Digital Landscape In 2024
Trends In Paid Search: Navigating The Digital Landscape In 2024Search Engine Journal
 
5 Public speaking tips from TED - Visualized summary
5 Public speaking tips from TED - Visualized summary5 Public speaking tips from TED - Visualized summary
5 Public speaking tips from TED - Visualized summarySpeakerHub
 
ChatGPT and the Future of Work - Clark Boyd
ChatGPT and the Future of Work - Clark Boyd ChatGPT and the Future of Work - Clark Boyd
ChatGPT and the Future of Work - Clark Boyd Clark Boyd
 
Getting into the tech field. what next
Getting into the tech field. what next Getting into the tech field. what next
Getting into the tech field. what next Tessa Mero
 
Google's Just Not That Into You: Understanding Core Updates & Search Intent
Google's Just Not That Into You: Understanding Core Updates & Search IntentGoogle's Just Not That Into You: Understanding Core Updates & Search Intent
Google's Just Not That Into You: Understanding Core Updates & Search IntentLily Ray
 
Time Management & Productivity - Best Practices
Time Management & Productivity -  Best PracticesTime Management & Productivity -  Best Practices
Time Management & Productivity - Best PracticesVit Horky
 
The six step guide to practical project management
The six step guide to practical project managementThe six step guide to practical project management
The six step guide to practical project managementMindGenius
 
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...RachelPearson36
 
Unlocking the Power of ChatGPT and AI in Testing - A Real-World Look, present...
Unlocking the Power of ChatGPT and AI in Testing - A Real-World Look, present...Unlocking the Power of ChatGPT and AI in Testing - A Real-World Look, present...
Unlocking the Power of ChatGPT and AI in Testing - A Real-World Look, present...Applitools
 
12 Ways to Increase Your Influence at Work
12 Ways to Increase Your Influence at Work12 Ways to Increase Your Influence at Work
12 Ways to Increase Your Influence at WorkGetSmarter
 

Featured (20)

Product Design Trends in 2024 | Teenage Engineerings
Product Design Trends in 2024 | Teenage EngineeringsProduct Design Trends in 2024 | Teenage Engineerings
Product Design Trends in 2024 | Teenage Engineerings
 
How Race, Age and Gender Shape Attitudes Towards Mental Health
How Race, Age and Gender Shape Attitudes Towards Mental HealthHow Race, Age and Gender Shape Attitudes Towards Mental Health
How Race, Age and Gender Shape Attitudes Towards Mental Health
 
AI Trends in Creative Operations 2024 by Artwork Flow.pdf
AI Trends in Creative Operations 2024 by Artwork Flow.pdfAI Trends in Creative Operations 2024 by Artwork Flow.pdf
AI Trends in Creative Operations 2024 by Artwork Flow.pdf
 
Skeleton Culture Code
Skeleton Culture CodeSkeleton Culture Code
Skeleton Culture Code
 
PEPSICO Presentation to CAGNY Conference Feb 2024
PEPSICO Presentation to CAGNY Conference Feb 2024PEPSICO Presentation to CAGNY Conference Feb 2024
PEPSICO Presentation to CAGNY Conference Feb 2024
 
Content Methodology: A Best Practices Report (Webinar)
Content Methodology: A Best Practices Report (Webinar)Content Methodology: A Best Practices Report (Webinar)
Content Methodology: A Best Practices Report (Webinar)
 
How to Prepare For a Successful Job Search for 2024
How to Prepare For a Successful Job Search for 2024How to Prepare For a Successful Job Search for 2024
How to Prepare For a Successful Job Search for 2024
 
Social Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie InsightsSocial Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie Insights
 
Trends In Paid Search: Navigating The Digital Landscape In 2024
Trends In Paid Search: Navigating The Digital Landscape In 2024Trends In Paid Search: Navigating The Digital Landscape In 2024
Trends In Paid Search: Navigating The Digital Landscape In 2024
 
5 Public speaking tips from TED - Visualized summary
5 Public speaking tips from TED - Visualized summary5 Public speaking tips from TED - Visualized summary
5 Public speaking tips from TED - Visualized summary
 
ChatGPT and the Future of Work - Clark Boyd
ChatGPT and the Future of Work - Clark Boyd ChatGPT and the Future of Work - Clark Boyd
ChatGPT and the Future of Work - Clark Boyd
 
Getting into the tech field. what next
Getting into the tech field. what next Getting into the tech field. what next
Getting into the tech field. what next
 
Google's Just Not That Into You: Understanding Core Updates & Search Intent
Google's Just Not That Into You: Understanding Core Updates & Search IntentGoogle's Just Not That Into You: Understanding Core Updates & Search Intent
Google's Just Not That Into You: Understanding Core Updates & Search Intent
 
How to have difficult conversations
How to have difficult conversations How to have difficult conversations
How to have difficult conversations
 
Introduction to Data Science
Introduction to Data ScienceIntroduction to Data Science
Introduction to Data Science
 
Time Management & Productivity - Best Practices
Time Management & Productivity -  Best PracticesTime Management & Productivity -  Best Practices
Time Management & Productivity - Best Practices
 
The six step guide to practical project management
The six step guide to practical project managementThe six step guide to practical project management
The six step guide to practical project management
 
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
 
Unlocking the Power of ChatGPT and AI in Testing - A Real-World Look, present...
Unlocking the Power of ChatGPT and AI in Testing - A Real-World Look, present...Unlocking the Power of ChatGPT and AI in Testing - A Real-World Look, present...
Unlocking the Power of ChatGPT and AI in Testing - A Real-World Look, present...
 
12 Ways to Increase Your Influence at Work
12 Ways to Increase Your Influence at Work12 Ways to Increase Your Influence at Work
12 Ways to Increase Your Influence at Work
 

Curs asm 3

  • 1. Limbaje de asamblare 2.Setul de instructiuni ISA x86
  • 2. Sintaxa instructiunilor • <linie_program>:= [<eticheta>:] [<prefix>] [<instructiune>| <directiva>] [;<comentar>] • <eticheta> - sir de litere si cifre, care incepe cu o litera • <prefix> - cuvant cheie care modifica regimul de executie al instructiunii care urmeaza (ex: REP – repeta instructiunea urmatoare de un nr. de ori) • <instructiune>:= <mnemonica> [<operand1> [,<operand2>]] • <mnemonica> - grup de litere care simbolizeaza o instructiune • <operand1>:= <registru>|<variabila> • <operand2>:= <val_imediata>|<operand1>
  • 3. Sintaxa instructiunilor (continuare) • <registru> := EAX|EBX|...AX|BX| .. |AH|BH|.. |AL| BL| ...|CS|DS, ...|GS => nume de registru • <variabila>:= <nume_var>|<adresa_var> • <adresa_var>:=[<nume_var>]'['[reg_index] [+<reg_baza>] [+<deplasament>]']' • <val_imediata>:=<numar>|<expresie> – un numar sau o expresie aritmetico-logica care se poate evalua in momentul compilarii; se poate exprima in zecimal, hexazecimal (indicativul H) sau binar (indicativul B) • <deplasament> := <val_pe_16biti>|<val_pe_32biti> – valoare exprimabila pe 16 sau 32 biti • <comentar> - text (cu caracter explicativ) ignorat de compilator
  • 4. Sintaxa instructiunilor x86 • Exemple: – instructiuni fara operand NOP MOVSB – instructiuni cu un operand PUSH AX ROR DX – instructiuni cu doi operanzi MOV AX, BX – linie cu eticheta instructiune si comentar START: MOV AX,BX ;muta cont. AX in BX – linie de comentar ; aceasta este o linie de comentar – linie cu eticheta ETICHETA:
  • 5. Reguli sintactice • o linie de program poate contine maxim o instructiune (mnemonica + operanzi) sau o directiva • o linie poate contine: – nici o entitate de instructiune (camp) – linie goala – numai etichet – numai comentar – combinatii de eticheta, instructiune, directiva si comentar • un comentar incepe cu ';' si se incheie la sfarsitul liniei • o instructiune x86 poate contine maxim 2 campuri de operanzi: – operand1 – indica destinatia sau rezultat si primul termen al unei operatii unare sau binare – operand2 – indica sursa sau al doilea termen al unei operatii binare
  • 6. Reguli sintactice - Exemple NOP • instructiune fara operanzi MOVSB • instructiune cu operanzi impliciti MUL CL • instructiune cu primul operand implicit (AX=AL*CL) MOV AX, BX • AX – destinatia , BX sursa transferului INC SI • SI – termenul incrementat si destinatia rezultatului ADD CX,DX • CX – primul termen al sumei si destinatia rezultatului, DX – al doilea termen ADD AX,BX,CX • instructiune incorecta, prea multi operanzi
  • 7. Reguli sintactice • pt. scrierea programului pot fi folosite litere mici si mari, insa asamblorul nu face distinctie intre literele mici si mai • separarea campurilor dintr-o instructiune se poate face cu un numar arbitrar de caractere <spatiu> si <tab> • pt. lizibilitate se recomanda aranjarea campurilor pe coloane distincte, separate prin <tab>: – eticheta: mnemonica operanzi ;comentar • se recomanda utilizarea de nume simbolice in locul unor valori numerice ex: adrese de variabila => nume_variabila, • adrese de instructiune => eticheta, • valori de constante numerice=>nume_constanta
  • 8. Reguli sintactice- simboluri • Simboluri, identificatori, etichete: – secventa de litere, cifre si unele caractere speciale (ex: _, $, @), ?), care nu incepe cu o cifra – lungimea simbolului este arbitrara, dar se considera primele 31 caractere – exista simboluri rezervate, predefinite in limbaj (cuvinte cheie pt. instructiuni, directive, macrodefinitii) – exemple: • L1 Bletch RightHere Right_Here Item1 __Special • $1234 @Home $_1 Dollar$ WhereAmI? @1234 • erori: • 1TooMany – incepe cu o cifra • Hello.There – contine punct • $ - $ sau ? nu poate sa apara singur • LABEL – cuvant rezervat.
  • 9. Reguli sintactice - constante • Constante: – intregi: 12, 21d, 123h, 0fffh, 1011b – reale (flotant): 1.5, 1.0e10, 23.1e-12 – sir de caractere: "text", 'Text', 'TEXT''TEXT' – constante simbolice: - nume simbolic dat pentru o secventa de caractere (text); ex: unu equ 1 numar = 26 var textequ <5[bx]> ; 5[bx] – constanta textuala
  • 10. Reguli sintactice - operanzi • operanzii unei instructiuni trebuie sa fie de aceeasi lungime: octet, cuvant, dublu-cuvant (exceptii: operatii de inmultire si impartire) • o instructiune poate contine cel mult un operand de tip locatie de memorie – formatul instructiunilor x86 permite exprimarea adresei unei singure locatii de memorie – pentru o operatie aritmetica sau logica intre doua variabile (locatii de memorie) unul dintre operanzi trebuie sa se transfere temporar intr-un registru intern – aceasta restrictie favorizeaza operatiile pe registre – pt. cresterea eficientei de executie • instructiunile sunt echivalente ca nivel de structurare si sunt independente intre ele – nu exista forme de programare structurata – structurarea programului se poate face la nivel logic (formal) prin directive
  • 11. Semnificatia entitatilor unei linii de program • Eticheta: – nume simbolic dat unei adrese de memorie unde incepe instructiunea care urmeaza dupa eticheta – util pentru instructiuni de salt si apel de rutine – se exprima prin : <adresa_segment>: <adresa_offset> • Mnemonica (numele) instructiuii: – nume simbolic dat unui cod de instructiune (2, 3, 4 sau 5 litere) – semnifica un anumit tip de operatie elementara direct executabila de UCP – aceeasi mnemonica poate simboliza mai multe coduri cu semnificatie apropiata (ex: MOV, ADD, ...) – acelasi cod de instructiune se poate exprima prin mnemonici diferite (ex: JZ si JE) – fiecarei instructiuni in L.A. ii corespunde strict o instructiune in cod masina (relatie biunivoca) !!!!!!!
  • 12. Semnificatia entitatilor unei linii de program • Operand: – camp care exprima un termen al operatiei elementare exprimata prin mnemonica – indica locul si modul de regasire al operandului (modul de adresare folosit) – tipuri de operanzi: • registre interne ale UCP: • date imediate (constante numerice) • locatii de memorie (variabile) • porturi de intrare sau de iesire (registre de I/E)
  • 13. Semnificatia entitatilor unei linii de program (operanzi) • Registre interne: – registre generale: • (8 biti) AH,AL,BH,BL,CH,CL,DH,DL • (16 biti) AX, BX,CX,DX, SI,,DI,SP, BP • (32 biti) EAX, EBX,ECX,EDX, ESI,EDI,ESP, EBP – registre speciale: CS,DS, SS, ES, FS,GS, GDTR, LDTR , CR0,..CR4, PSW • Date imediate (constante): – numar sau expresie aritmetico-logica evaluabila la un numar => expresia trebuie sa contina numai constante – valoarea este continuta in codul instructiunii – lungimea constantei – in acord cu lungimea celui de al doilea operand (octet, cuvant sau dublu-cuvant) – ex: 0, -5, 1234h, 0ABCDh, 11001010b, 1b, 8* 4 - 3
  • 14. Semnificatia entitatilor unei linii de program (operanzi) • Locatii de memorie (variabile): – expresie care exprima adresa unei locatii de memorie de o anumita lungime – lungimea variabilei: • in acord cu al doilea operand (daca exista) • se deduce din declaratia numelui de variabila • se indica in mod explicit ('byte', 'word', 'dword') – adresa variabilei: • adresa de segment: – specificata in mod implicit – continutul registrului DS – exprimata in mod explicit: <reg_segment>:<variabila> ex: CS: Var1, ES: [100h] • adresa de offset - adresa relativa in cadrul segmentului
  • 15. Semnificatia entitatilor unei linii de program (operanzi; variabile) • adresa de offset – adresa poate sa fie pe 16 biti (modul real) sau pe 32 biti (modul protejat) – exprimabila in mai multe moduri: • adresa fizica: valoare concreta de adresa – '['<adresa_offset>']',ex: MOV AX, [100h] – '[ '[<reg_baza>] [+<reg_index>] [<deplasament>']' ex: MOV AX, [BX+SI+100h] • adresa simbolica: - nume simbolic dat unei variabile – VAR1, TEXT, VAR+5 – VAR[BX], VAR[BX+SI] <reg_baza>:= BX|BP|EBX|EBP <reg_index>:=SI|DI|ESI|EDI
  • 16. Calculul adresei unei variabile (in modul real) 15 0 Adr. offet Adr. fizica Deplasament + + + (16 biti) (20 biti) SI DI BX BP CS DS Adr. segment SS *16 ES
  • 17. Semnificatia entitatilor unei linii de program (operanzi) • Porturi de Intrare/Iesire – registre continute in interfetele de intrare/iesire – spatiul de adresare maxim: 64Ko (adr. maxima 0FFFFH) – la PC-uri spatiul este limitat la 1ko (adr. maxima 3FFH) (?) – pe aceeasi adresa pot fi 2 registre: • un reg. de intrare si unul de iesire – porturile apar doar in instructiunile IN si OUT – specificare: • direct, prin adresa fizica (daca adresa este exprimabila pe un octet) sau nume simbolic ex: IN AL, 12h OUT 33h, AL • indirect, prin adresa continuta in registrul DX ex: IN AL,DX OUT DX,AL
  • 18. Moduri de adresare pt. ISA x86 • Moduri 8086 • Adresarea imediata: – operandul este o constanta – operandul este continut in codul instructiunii – operandul este citit o data cu instructiunea – instr. poate lucra cu o singura valoare – lungimea constantei este in acord cu celalalt operand – flexibilitate limitata – exemple: MOV AL, 12h MOV AL,120 MOV AX, 12ABh MOV AL, 260 - eroare
  • 19. Moduri de adresare pt. ISA x86 Moduri 8086 • Adresarea de tip registru: – operandul este continut intr-un registru al UCP – timp de acces foarte mic; nu necesita ciclu de transfer pe magistrala – instructiune scurta (nr. mic de biti pt. specificare operand) – numar limitat de registre interne => nu toate variabilele pot fi pastrate in registre – exista limitari in privinta registrelor speciale (ex: registrele segment) – exemple: MOV AX,BX MOV DS,AX MOV BX, AL – eronat MOV DS, 1234H - eronat
  • 20. Moduri de adresare pt. ISA x86 Moduri 8086 • Adresarea directa (cu deplasament): – operanul este specificat printr-o adresa de memorie (adresa relativa fata de inceputul unui segment) – adresa operandului este continuta in codul instructiunii – instructiunea poate lucra cu o singura locatie de memorie (octet, cuvant sau dublu-cuvand) – necesita ciclu suplimentar de transfer cu memoria =>timp de executie mai mare – adresarea directa se foloseste pt. variabile simple (date nestructurate) – exemple: MOV AL, [100h] MOV BX, var1 MOV CX, [1234h] MOV var2, SI
  • 21. Moduri de adresare pt. ISA x86 Moduri 8086 • Moduri indirecte de adresare: • Adresarea indirecta prin registru: •adresa operandului se specifica intr-un registru •registrele folosite pt. adresare: SI, DI, BX, BP •instructiunea contine adresa registrului •mod flexibil de adresare •exemple: MOV AL, [SI] MOV [BX], CX
  • 22. Moduri de adresare pt. ISA x86 Moduri 8086 • Adresarea (indirecta) indexata: – adresa operandului se exprima printr-o adresa de baza, data de <deplasament> si un index dat de continutul unui registru – mod de adresare folosit pentru structuri de date de tip sir, vector, tablou – sintaxa: <nume_var>'['<reg_index>']' <reg_index>:=SI|DI '['<reg_index>+<deplasament>']' – exemple: MOV AX, VAR[BX] MOV CX, [SI+100H] MOV VAR[DI], AL MOV VAR[10H], 1234H A[0] A[1] A[2] A[3] Deplasament + SI=i*lung. = Adresa A[i]
  • 23. Moduri de adresare pt. ISA x86 Moduri 8086 • Adresarea (indirecta) bazata: – adresa operandului se exprima printr-o adresa de baza, data de un registru si o adresa relativa data de <deplasament> – mod de adresare folosit pentru structuri de date de tip inregistrare – formal este identica cu adresarea indexata, dar alta interpretare – sintaxa: <nume_var>'['<reg_index>']' <reg_baza>:=BX|BP '['<reg_baza>+<deplasament>']' – exemple: MOV AX, VAR[BX] MOV CX, [SI+100H] MOV VAR[DI], AL MOV [SI][100h], 1234H E1 E2 Ei Ei+1 BP + Depl. Ei = Adresa Ei
  • 24. Moduri de adresare pt. ISA x86 Moduri 8086 • Adresarea mixta (bazat indexata): – adresa operandului se exprima printr-o adresa de baza, data de un registru, un index dat de un registru si o adresa relativa data de <deplasament> – mod de adresare folosit pentru structuri complexe de date de tip inregistrare de vectori sau vector de inregistrari – modul cel mai flexibil de adresare, dar necesita 2 adunari – sintaxa: <nume_var>'['<reg_baza>+<reg_index>']' '['<reg_baza>+<reg_index>+<deplasament>']' '['<reg_baza>']''['<reg_index>']''['<deplasament>']' exemple: MOV AX, VAR[BX+SI] MOV CX, [BX+SI+100H] MOV VAR[BP+DI], AL MOV VAR[BP+SI], 1234H MOV VAR[BP][DI], AL MOV [100h][BP][SI], 1234H
  • 25. Moduri de adresare pt. ISA x86 Moduri '386, .. Pentium • modificari fata de 8086: – extensia registrelor generale la 32 biti: EAX, EBX, ... – toate registrele generale pot fi folosite pentru adresarea indirecta prin registru, indexata, bazata si mixta; – ex: [EAX], [ECX], VAR[EAX+ECX], [DX+AX+100h] – la adresarea mixta primul registru se considera registru de baza iar al doilea registru index – !!!!! modurile '386 sunt mai putin eficiente decat cele 8086 !!!!! obs:1. In modul real adresa de offset nu poate depasi limita de 64ko, chiar daca registrele sunt de 32 biti; in modul protejat adresa de offset se calculeaza pe 32 biti 2. Registrul SP nu poate fi folosit ca registru index 3. Daca se foloseste SP sau BP atunci implicit se lucreaza cu reg. segment SS
  • 26. Moduri de adresare pt. ISA x86 Moduri '386, .. Pentium • Adresarea indexata, scalata: – permite multiplicarea registrului index cu un factor egal cu lungimea unui element din sir: • 1 pt. octet, 2 pt. cuvant, 4 pt. dcuvant si 8 pt. qcuvant – simplifica parcurgerea tablourilor a caror elemente sunt mai mari de 1 octet – sintaxa: (in loc de '+' se poate folosi '][') '['<reg_index>*n']' '['<reg_index>*n + <deplasament> ']' '[' <reg_baza> + <reg_index>*n']' '[' <reg_baza> + <reg_index>*n + <deplasament> ']' ex: MOV AX, [SI*2] MOV DX, [AX*4+12h] MOV CX, 100h[BX][AX*1]