Estructura de computadors – Istudies.ac.upc.edu/EUPVG/ESC1/Documentacio/Sessio2.pdfObservareu que...

7
Estructura de computadors – I Pràctiques de laboratori ( Sessió 2 )

Transcript of Estructura de computadors – Istudies.ac.upc.edu/EUPVG/ESC1/Documentacio/Sessio2.pdfObservareu que...

  • Estructura de computadors – I

    Pràctiques de laboratori

    ( Sessió 2 )

  • Sessió 2: Aritmètica complexa i modes d’adreçament

    En aquesta sessió veurem com fer operacions de multiplicació i divisió, i com repressentar lainformació a la memòria de l’ordinador, accedirem a vectors i matrius. També implementaremconstruccions alternatives (if-then) i iteratives (for i while)

    Activitat 2.1: Multiplicació i divisió

    El 386 disposa d’operacions amb i sense signe, tant per la multiplicació (IMUL i MULrespectivament) com per la divisió (IDIV i DIV).

    Les operacions de multiplicació i divisió del 386 contenen un operador implícit i un altreexplícit.

    Amb les multiplicacions, depenent del tamany de l’operador explícit (8, 16 o 32 bits) s’operaamb l’acumulador com a operador implícit (AL per 8 bits, AX per 16 bits i EAX per 32 bits). Elresultat és del tamany doble del dels operadors, per tant tindrem 16, 32 o 64 bits de resultat permultiplicacions de 8, 16 o 32 bits respectivament, i els resultats els tindrem a AX, EAX iEDX:EAX.

    Per il·lustrar-ho millor anem a multiplicar 7 per 2. Empleneu les caselles en blanc de l’exercici 1ratllant la part dels registres que no es modifiquen.

    AL= 07h BL=02hMUL BL

    EAX?

    AH AL

    AX

    DH DL

    DX

    EDX?

    AX= 0007h BX=0002hMUL BX

    EAX?

    AH AL

    AX

    DH DL

    DX

    EDX?

    EAX= 00000007h EBX=00000002hMUL EBX

    EAX?

    AH AL

    AX

    DH DL

    DX

    EDX?

    Exercici 1

    Comproveu el resultat amb el programa 1. Heu d’executar només fins a la etiqueta ETIQb1

    Observareu que aquest programa inicialitza alguns registres amb valors fixes, això no ésnecessari, però ho fem per veure quina part dels registres es modifiquen amb les operacions.

    Per veure les diferències entre operar amb o sense signe multiplicarem dos enters codificats en 1byte amb valors 0A6h (-90 com a enter ó 166 com a natural) i 04h. Si considerem els números coma naturals o enters els resultats varien. Ompliu l’exercici 2 amb el resultat i comproveu-ho desprésexecutant fins a l’etiqueta ETIQb2.

  • .model large

    .386

    .stack 100h

    .dataA1 dd 00000007hA2 dd 00000002hB1 db 0A6hB2 db 04hB3 dw 0FFA6hC1 dw 0301hC2 dw 0003hC3 dd 00000301hC4 dd 00000003h.code.startupETIQa1: MOV EAX, -1 MOV EDX, -1 MOV AL, BYTE PTR A1 MUL BYTE PTR A2ETIQa2: MOV EAX, -1 MOV EDX, -1 MOV AX, WORD PTR A1 MUL WORD PTR A2ETIQa3: MOV EAX, -1 MOV EDX, -1 MOV EAX, A1 MUL A2ETIQb1: MOV AL, B1 MUL B2 MOV EBX, EAX MOV EAX, 0 MOV AL, B1 IMUL B2ETIQb2: MOV CX, B3 IMUL CX, 04hETIQb3: IMUL BX, B3, 04hETIQc1: MOV EAX, -1 MOV EDX, -1 MOV AX, C1 CWD DIV C2ETIQc2: MOV EAX, -1 MOV EDX, -1 MOV EAX, C3 CDQ IDIV C4.exitEND

    Programa 1

    AL= 0A6h BL=04h

    MUL BL

    AX?

    AL= 0A6h BL=04h

    IMUL BL

    AX?

    Valor decimal com a natural? Valor decimal com a enter?

    Exercici 2

    IMUL pot tenir també dos o tres operants. Per exemple:

    IMUL BX,CX fa BX = BX * CX

    IMUL BX, B3, 04h fa BX = B3 * 4

    Comproveu el funcionament executant el programa 1 ara fins l’etiqueta ETIQc1.

  • Les divisions segueixen el mateix patró (instruccions DIV i IDIV). El divisor s’indicaexplícitament a l’únic operant de la instrucció i pot ser de 8, 16 o 32 bits, mentre que el dividend (detamany doble) està implícit a AX, DX:AX ó EDX:EAX per a divisors de 8, 16 o 32 bitsrespectivament. Aquestes operacions retornen la divisió sencera i el residu d’una divisió de naturals(DIV) o sencers (IDIV).

    Per poder fer les divisions correctament cal tenir els operants en format correcte (una part a EAXo AX i una altra a EDX o DX), per això cal fer servir les instruccions CWD (Convert Word toDouble word) i CDQ (Convert Double word to Quad word).

    Empleneu els exercicis 3 i 4.

    C1=0301h C2=0003h

    EAX?

    AX

    AH AL

    EDX?

    DX

    DH DLInstrucció

    MOV AX, C1

    EAX?

    AX

    AH AL

    EDX?

    DX

    DH DL

    CWD

    EAX?

    AX

    AH AL

    EDX?

    DX

    DH DL

    DIV C2

    Exercici 3

    C3=00000301h C4=00000003h

    EAX?

    AX

    AH AL

    EDX?

    DX

    DH DLInstrucció

    MOV EAX, C3

    EAX?

    AX

    AH AL

    EDX?

    DX

    DH DL

    CDQ

    EAX?

    AX

    AH AL

    EDX?

    DX

    DH DL

    IDIV C4

    Exercici 4

    Per comprovar el que heu omplert acabeu d’executar el programa 1.

    Activitat 2.2:Bucle sobre un vector

    Estudiarem en aquest apartat un bucle de C que recorre els elements d’un vector d’enters de 16bits (short en C).

  • El codi font C es mostra al programa 2. Aquest codi, com podeu veure, fa la suma d’un vector de8 enters de 16 bits. Aquest programa en C el podem traduïr pel codi en ensamblador que apareix alprograma 3.

    static short v_C[8];static short suma;

    suma=0;for (int i=0; i

  • Activitat 2.3:Bucle sobre una matriu

    Accedirem ara a una matriu de valors enters de 4 files per 6 columnes (static intmat_c[4][6] en C)

    Com sabeu la forma d’accedir directament a un element d’una matriu ve donada per unafórmula, ressoleu doncs l’Exercici 6.

    Donada la definició static int mat_c[4][6]; com a matriu de tipus C, suposant quei és una variable int, quina és la fórmula per accedir a l’element mat_c[i][2]?

    Exercici 6

    Volem fer un programa que sumi els elements de la columna número 2 de la matriu mat_c, és adir, volem que faci el que fa el programa en C del programa 4.

    Suma_c=0;for (int i=0; i