Si traduca in IA32 la seguente funzione che inizializza una lista collegata vuota:
e1.h
#ifndef __NODE_T__
#define __NODE_T__
typedef struct node_t { // base
short elem; // offset: 0 |xx..| (base)
struct node_t *next; // offset: 4 |xxxx| 4(base)
} node_t; // sizeof: 8
void list_new(node_t **l);
int list_new_from_buffer(node_t **l, short* buf, int n);
void list_delete(node_t **l);
int list_add_first(node_t **l, short elem);
int list_sum(const node_t *l);
#endif
e1.c
#include <stdlib.h>
#include "e1.h"
void list_new(node_t **l) {
*l = NULL;
}
Si traduca in IA32 la seguente funzione che calcola la somma degli elementi di una lista collegata:
e1.h
#ifndef __NODE_T__
#define __NODE_T__
typedef struct node_t { // base
short elem; // offset: 0 |xx..| (base)
struct node_t *next; // offset: 4 |xxxx| 4(base)
} node_t; // sizeof: 8
void list_new(node_t **l);
int list_new_from_buffer(node_t **l, short* buf, int n);
void list_delete(node_t **l);
int list_add_first(node_t **l, short elem);
int list_sum(const node_t *l);
#endif
e2.c
:
#include <stdlib.h>
#include "e2.h"
int list_sum(const node_t *p) {
int s = 0;
for (; p!=NULL; p=p->next)
s += p->elem;
return s;
}
Si traduca in IA32 la seguente funzione che fonde un array ordinato a
di size na
con un altro array ordinato b
di size ´nb scrivendo il risultato della fusione nell'array
c di size almeno (
na+nb`).
e3.c
void merge(const int* a, const int* b, int* c, int na, int nb) {
int i=0, j=0, k=0;
while(i<na && j<nb)
if (a[i]<=b[j]) c[k++] = a[i++];
else c[k++] = b[j++];
while(i<na) c[k++] = a[i++];
while(j<nb) c[k++] = b[j++];
}