Trabalho prático de assembly
Semestre de Inverno 2008
Arquitectura de Computadores 2
Trabalho Prático de Assembly
AC2
8 de Janeiro de 2009
Introdução
Neste trabalho prático no âmbito da unidade curricular de Arquitectura de Computadores 2 foram-nos apresentado uma série de exercicios (tanto práticos como teóricos) acerca do assembly da IA-32 para assim poder aplicar os conhecimentos adquiridos nas aulas.
Desenvolvimento
Exercício 1
Ocupação de cada estrutura:
Struct St1: 4 bytes
Struct St2: 8 bytes
Struct St3: 12 bytes
Struct St4: 16 bytes (alinhado)
Posição relativa, numero de parâmetros e total de bytes:
St1 St2 St3 St4 _esp _esp ret_address + 0 ret_address + 0 * St4 + 4 _esp * St3 + 4 x + 8 _ esp ret_address + 0 x + 8 y + 12 ret_address + 0 x + 4 y + 12 z + 16 x + 4 y + 8 z + 16 w + 20 1 parâmetro 2 parâmetros 4 parâmetros 5 parâmetro
4 bytes 8 bytes 16 bytes 20 bytes
Obs.: *St3 e *St4 são ponteiros para estruturas do tipo St3 e St4 respectivamente.
Exercício 2
String.c
#include
#include
int getStrAdr(char *dst[], int max, char * sample, ...);
int main() { int i; int n; const unsigned max = 5; char **dst = (char **) malloc(sizeof(char *) * max); char *sample = "par"; char *str0 = "ac2"; char *str1 = "cache"; char *str2 = "pci"; char *str3 = "parameters"; char *str4 = "usb"; char *str5 = "ram"; char *str6 = "parsing";
n = getStrAdr(dst, max, sample, str0, str1, str2, str3, str4, str5, str6, NULL);
printf("Number of strings started by \"%s\" : %d", sample, n);
printf("\n\n");
printf("string \"%s\" at address 0x%x \n", str0, str0); printf("string \"%s\" at address 0x%x \n", str1, str1); printf("string \"%s\" at address 0x%x \n", str2, str2); printf("string \"%s\"