Trduzione di espressioni in ssemly Motorol 68000 Dniele Polo Scrpzz dniele.scrpzz@elet.polimi.it Politecnico di Milno Ultimo ggiornmento: 10 Mggio 2005
Trduzione e ssemlggio Trduzione: dto un progrmm, espresso in un linguggio d lto livello (per esempio C) preprre il progrmm corrispondente, in linguggio ssemly; Assemlggio: trdurre il progrmm ssemly in codice oggetto, direttmente eseguiile dl processore;
Trduzione Svolgere l'operzione nelle seguenti fsi: 1. ricvre l'lero sintttico; 2. numerre i nodi interni dell'lero secondo un visit postordine; 3. coprire l'lero con le tegole prefisste; 4. llocre i istri (nell'ordine di numerzione, senz ottimizzzioni, rispettndo i vincoli); 5. codificre in ssemly le tegole (nell'ordine di numerzione, con i istri llocti);
1. Determinre l'lero sintttico Espressione di esempio: Z = (A B) (C D) 5 Determinzione dell'lero sintttico: Z 5 A B C D
2. Numerzione dei nodi dell'lero Numerri i nodi interni (cioè tutti i nodi trnne le foglie) secondo un visit postordine; Ricordte: dto un lero, un visit dei suoi nodi è un sequenz ordint in cui ogni nodo compre esttmente un volt; L visit postordine si ottiene considerndo i nodi come rccomndto dll' lgoritmo ricorsivo (pseudocodice C): void VisitPostordine(Nodo * pn) { VisitPostordine(pn->figlio1); VisitPostordine(pn->figlio2);... /* eventuli ltri figli, numerti d sx dx */ ConsiderNodo(pn); }
2. Numerzione dei nodi dell'lero Applichimo l visit postordine dei nodi interni: Z 9 8 7 5 3 6 1 2 4 5 A B C D
3. Copertur dell'lero con tegole Avete disposizione un insieme di tegole prefissto (vedere prossime pgine), ftte d esempio come segue: vr... vr Disponete le tegole in modo che comcino con i nodi dell'lero; ogni nodo interno (slvo l rdice) si coperto d due tegole; Le tegole sono przilmente sovrpposte; le zone sovrpposte devono comcire; Ignorte per or i simoli in rosso, essi vincolno l fse successiv di lloczione dei istri;
Tegole d usre per l copertur Per le istruzioni di trsferimento dti: move D, vr vr move #, vr vr move vr, D vr move D, D move #, D (Per uniformità, ttenersi lle tegole dte, nche se non sono ottime)
Tegole d usre per l copertur Operzioni ritmetiche: dd D, D dd #, D dd #, D Queste due tegole hnno l stess trduzione ssemly in virtù dell commuttività dell'opertore. su D, D su #, D Not: Attenzione ll'ordine degli operndi! Attenzione ll'ordine degli operndi! Quest tegol non esiste! Se si present questo sottolero, spostre in un istro e poi usre l prim tegol sinistr. (Per uniformità, ttenersi lle tegole dte, nche se non sono ottime)
Tegole d usre per l copertur Ancor operzioni ritmetiche: (come prim) muls D, D muls #, D muls #, D Queste due tegole hnno l stess trduzione ssemly in virtù dell commuttività dell'opertore. divs D, D divs #, D Not: : : : Attenzione ll'ordine degli operndi! Attenzione ll'ordine degli operndi! Quest tegol non esiste! Se si present questo sottolero, spostre in un istro e poi usre l prim tegol sinistr. (Per uniformità, ttenersi lle tegole dte, nche se non sono ottime)
Tegole d usre per l copertur Push dei prmetri di funzione: move D, -(A7) pil move #, -(A7) pil Chimt di funzione: BSR func ADD #N, A7 (ex: 2 prmetri L in ingresso sull pil e vlore di ritorno in D0) func() D0 move vr, -(A7) pil pil (con 3 prmetri,...) pil vr func() D0 Attenzione: eccezione ll ol di numerzione dei nodi; se dovete cricre i prmetri sull pil in ordine inverso, le tegole push vnno numerte d destr sinistr, invece che d sinistr destr; pil etc... pil pil
3. Coprire l'lero con le tegole Z 9 8 7 5 3 6 1 2 4 5 A vr B vr C vr D vr
4. Allocre i istri [TO DO: NO D0] Allocre i istri: nell'ordine di numerzione del psso precedente; rispettndo i vincoli indicti nelle tegole (segnlti in rosso); inizio dl istro D1 (D0 è riservto per vlori di ritorno); 7 D3 Z 8 9 D3 5 3 D2 6 D3 Not: i soli istri in gillo sono llocti liermente; gli ltri sono vincolti; D1 1 2 D2 4 D3 5 A vr B vr C vr D vr D4
5. Codificre il progrmm 7 Z 8 D3 3 D2 6 D1 1 2 D2 9 D3 4 D3 5 D3 5 D4 Codificre in ssemly le tegole con i istri llocti: 1. MOVE.L A, D1 2. MOVE.L B, D2 3. ADD.L D1,D2 4. MOVE.L C, D3 5. MOVE.L D, D4 6. SUB.L D4,D3 7. MULS D2,D3 8. ADD.L #5,D3 9. MOVE.L D3,Z A vr B vr C vr D vr
Progrmm finle Relizzre il progrmm completo che clcol: Z = (A B) (C D) 5 con i seguenti vlori: A = 1 B = 2 C = 3 D = 4 Z (clcolt) = 26 Codific ssemly ricvt: 1. MOVE.L A, D1 2. MOVE.L B, D2 3. ADD.L D1,D2 4. MOVE.L C, D3 5. MOVE.L D, D4 6. SUB.L D4,D3 7. MULS D2,D3 8. ADD.L #5,D3 9. MOVE.L D3,Z * Alloczione delle vriili, long word A EQU $100 B EQU $104 C EQU $108 D EQU $10C Z EQU $110 START ORG $1000 * Inizilizzzione delle vriili MOVE.L #1, A MOVE.L #2, B MOVE.L #3, C MOVE.L #-4,D MOVE.L #0,Z * Clcolo dell'espressione MOVE.L A, D1 MOVE.L B, D2 ADD.L D1,D2 MOVE.L C, D3 MOVE.L D, D4 SUB.L D4,D3 MULS D2,D3 * Attn: 1616 it ADD.L #5,D3 MOVE.L D3,Z STOP #$2000 END START