EL ENSAMBLADOR... PERO SI ES MUY FÁCIL:

Guia supuestamente poco dolorosa a la programación del IA-32 (i386, sintaxis AT&T)

  • [PDF] Versión PDF gratuita.
  • Pero comprar la versión impresa da puntos kármicos. ;-)
  • asm_src.tgz Los ficheros con los códigos fuente del libro


  • FO 2012-2014 - Manel Guerrero

    Esta era la antigua página de FO.
    La nueva está en: FO 2015

    LIBRO DE IA32

  • El ensamblador... pero si es muy fácil Mi libro de la parte de ensamblador.
  • asm_src.tgz Los ficheros con los códigos fuente del libro

    TRANSPAS

  • Tema 0 (2x2) (1x1) Presentació de l'assignatura
  • Tema 1 (2x2) (1x1) Començant a programar en C
  • Tema 2 (2x2) (1x1) Sentencies de control (if, while, for)
  • Tema 3 (2x2) (1x1) Tipus estructurats de dades (struct i vectors)
  • Tema 4 (2x2) (1x1) Funcions
  • Tema 5 (2x2) (1x1) IA32 (Arquitèctura i primers programes en ensamblador)
  • Tema 6 (2x2) (1x1) Vectors
  • Tema 7 (2x2) (1x1) Funcions
  • Tema 8 (2x2) (1x1) Eines frikis per ASM

    CALENDARIO

  • 000Index1_c.txt Calendario de la teoria de C.
  • 000Index2_asm.txt Calendario de la teoria de ensamblador.
  • 000Index3_labs.txt Calendario de las sesiones de laboratorio.
  • 000Index4_all.txt Todo en uno.

    C LANGUAGE BY EXAMPLE

  • 000Index1_c.txt Calendar.

    Tema0 i 1 Hora #01
  • t01.c Evaluating expressions.

    Tema1 i 2 Hora #03 (printf, scanf, if)
  • t02.c Reading from keyboard and printing to screen (printf, scanf).
  • t03.c From upper case to lower case.
  • t04.c Upper and lower case and digits (if else).
  • t05.c Swapping two values.
  • t1_printf.c Com fer servir el printf.

    Tema2 Hora #05 (while)
  • t2_scanf_loop.c Loops (while).
  • t2_scanf_trap.c Fixing a small problem with scanf and loops.
  • t2_greates_common_divisor.c Greatest common divisor (gcd).

    Tema2 Hora #08 (for)
  • t2_taules_mul.c Imprimir les taules de multiplicar.
  • t2_formula_max.c Exercici #15 del Tema2Iteratives.

    Tema3 Hora #10 (struct)
  • math.c Interludio matemático festivo.
  • t3s_cercle.c Dir si un punt está dins d'un cercle.
  • t3s_recta.c Dir si un punt pertany a una recta.

    Tema3 Hora #11 (vectors)
  • t3v_cerca_a.c Cerca.
  • t3v_recorregut_a.c Recorregut.
  • t3v_cerca_a_2.c t3v_recorregut_a_2.c Versions on l'execució del programa es repeteix indefinidament i on veiem com eliminar el '\n' que queda en el buffer d'entrada.
  • t3v_palindroms.c Contar palíndroms en una frase.
  • Extra: t3v_p4_paraules_iguals.c Dir si dos paraules són iguals (problema #4 de la col·lecció).

    Tema3 Hora #12 (vectors2)
  • t3v_afegir_i_eliminar_simple.c Afegir i eliminar elements a un vector.
  • t3v_afegir_i_eliminar.c Afegir i eliminar elements amb un menu d'usuari.
  • t3v_comparar_tots.c Compara tots els elements d'un vector d'enters amb la resta d'elements i et diu quins són iguals.
  • t3v_aniversaris.c Qui celebra aniversari el mateix dia?

    Tema3 Hora #13 (vectors2)
  • t3v_leer_cadena.c Llegir i mostrar vectors de char amb for i while.
  • t3v_producte_escalar.c Producte escalar de dos vectors.
  • t3v_invertir.c Inverteix un vector d'enters.

    Tema4 Hora #14 (funcions)
  • t4_factorial.c Factorial.
  • t4_potencia.c Potencia.

    Tema4 Hora #15 (funcions)
  • t4_e_power_x.c #4 i tercera part #5.

    Tema4 Hora #16 (funcions)
  • t4_sin_cos.c exp, sin i cos (e^x, sinus i cosinus) calculat amb series numèricas.
  • t4_p6.c Problema #6.
  • t4_canvi_base.c Cambio de base.

    Tema4 Hora #17 (punters i pas de variables per referencia)
  • t4_swap1.c Intercanviar el valor de 2 variables.
  • t4_swap2.c Intercanviar el valor de 2 variables dins una funció. No va.
  • t4_swap3.c Intercanviar el valor de 2 elements d'un vector dins una funció. Si que va.
  • t4_swap4.c Intercanviar el valor de 2 elements d'un struct dins una funció. Tampoc va.
  • t4_swap5.c Intercanviar el valor de 2 variables dins una funció ben fet. Pas de paràmetres per referencia.

    Tema4 Hora #18 (funcions amb pas de variables per referencia)
  • t4_factorial_pref.c Factorial amb pas de variables per referencia.
  • t4_divisio_pref.c Divisió entera que retorna quocient i residu amb pas de variables per referencia.
  • t4_coordenades.c Pas per referencia combinat amb structs.

    Tema4 Hora #19
  • t4_rectangle.c Pas per referencia combinat amb structs de structs.

    Tema4 Hora #20
  • t4_pa7.c Problema adicional #7.
  • t4_pa7_b.c Problema adicional #7 (fent servir scanf("%*c") enlloc de scanf("\n") per eliminar '\n's del buffer d'entrada).
  • t4_pa7_b_vacio.c Codi amb els cossos de les funcions buides.

    Tema4 Hora #21 (Buffer)
  • t4_pa4.c Problema adicional #4.
  • t4_pa6.c Problema adicional #6.

    ASSEMBLY BY EXAMPLE

  • 000Index2_asm.txt Calendar.

    Tema5 Hora #02
  • t5_p00_return.s The program's structure.
  • t5_p01_add.s My first program (MOV ADD).

    Tema5 Hora #03
  • t5_p02_inc.s The remaining operators (SUB INC DEC NEG).
  • t5_p03_imul.s More complex operations (IMUL).
  • t5_p03_imul_b.s Another (better?) version of the same program.

    Tema5 Hora #04
  • t5_if.s How to do if (CMP JMP JNE [IF]).
  • t5_do_loop.s How to do loop (do while en C) ([DO_LOOP]).
  • t5_loop.s How to do loop (while en C) ([LOOP]).

    Tema5 Hora #05
  • t5_loop_and.s Exemple de "while (a AND b)".
  • t5_loop_or.s Exemple de "while (a OR b)".

    Tema5 Hora #06
  • t5_loop_loop.s Exemple de loop dins un loop.

    Tema6 Hora #07 (vectors)
  • t6_recorregut_i.s Suma els elements d'un vector d'enters.
  • t6_cerca_i.s Retorna la posició del primer número negatiu en un vector d'enters.
  • t6_cerca_i2.s Versió optimitzada.

    Tema6 Hora #08
  • t6_recorregut_a.s Compta el nombre de 'a's en una cadena de chars.
  • t6_cerca_a.s Retorna la posicó de la primera 'a' en una cadena de chars.

    Tema6 Hora #09
  • t6_vectors.s Exemple de declaració de vectors.
  • t6_p03.s Problema 3

    Tema7 Hora #10
  • t7_ex_printf.s Exemple de printf.
  • t7_scanf.s t7_scanf_2.s Exemples de scanf i printf.
  • t7_printf.s t7_printf2.s Printf d'un i dos parámetres.

    Tema7 Hora #11
  • t7_minuscules.s t7_minuscules.c Passa tots els chars d'una cadena a minúscules.
  • t7_minuscules_print.s Versió que usa printf per imprimir el resultat.
  • t7_minuscules_print_2.s Versió on no tenim problemes d'alineació per que fem "movsbl is(%ecx), %edx; pushl %edx" enlloc de "pushl is(%ecx)", ja que is és un vector de bytes. Tot i que "movb is(%ecx), %dl; pushl %edx" també seria correcte "movs" sembla l'opció mé estesa.

    Tema7 Hora #13
  • t7_multiplica.s t7_multiplica.c Calcula 2*3+5*2 amb la funció int multiplica(int a, int b) utilitzant una variable local (tot i que no caldria).

    Tema7 Hora #14
  • t7_signes.s Diu quants zeros, positius i negatius hi han en un vector d'enters (tres variables locals).

    Tema7 Hora #15
  • t7_complex_swap.c t7_complex_swap.c.objdump t7_complex_swap.s Programa on una funció crida a una altra funció passant com a paràmetres un paràmetre seu i una variable local. (En realitat es faria amb la instrucció lea, però no està dins del temari de FO). Si us pica la curiositat mireu-vos t7_complex_swap_with_lea.s

    Tema7 Hora #16
  • t7_cuento_minusculas.s Diu quantes vegades apareix cada lletra en una cadena ascii. Com accedir a posicions de vectors que són passats com a paràmetres de funció o variables locals (adreçaments amb registre base de l'estil "(%esi,%ecx)" i "(%ebx,%ecx,4)").
  • t7_cuento_minusculas_b.s Versió que accedeix al vector declarat com variable local amb adreçaments l'estil "OFFSET_VAR(%ebp,%ecx,4)").

    Tema7 Hora #17
  • t7_fibonacci.s Un altre exemple d'adreçament del tipus "-4(%ebx,%ecx,4)".
  • t7_fibonacci_2.s Un altre exemple d'adreçament del tipus "v(%esi,%ecx,4)".

    Tema7 Material extra
  • t7_la_taula_de_7.s Imprimeix la taula de multiplicar del 7.
  • t7_taules_mul.s Imprimeix les taules de multiplicar del 0 al 10.
  • t7_taules_mul_3cols.s Imprimeix les taules de multiplicar del 0 al 11 en 3 columnes.
  • t7_signe.s t7_signe_optimitzat.s Dir quins elements d'un vector d'enters són positius i quins negatius. L'optimització és nomé pels printfs.

    C LINKS

  • The C Library Reference Guide
  • Wikipedia: C standard library
  • The C Standard Library Reference
  • Trampa: Recorda de compilar amb el "-lm" quan usis math.h ("gcc -o foo foo.c -lm")
  • Infinity, and NaN (not a number) in IEEE 754 floating point numbers.

    ASM LINKS

  • overflow.txt Explicació sobre com funciona el Carry i l'Overflow.

    BOOKS

  • C Programming Language
  • Professional Assembly Language
  • Programming from the Ground Up

    ONLINE RESOURCES

  • Programming from the Ground Up
  • Slides from Princeton.
  • Assembly Language Tutorial
  • C Language Keywords
  • C Cheat Sheet

    TIPS AND TRICKS

  • ccodes.c A program to see how the flags are set after the execution of an instruction.
  • gedit_assembly_highlight.txt Como hacer que el gedit nos coloree los codigos fuente en ensamblador.
  • Trucos_DDD.pdf Como utilizar el DDD (con muchos trucos y screenshots).
  • trucos_ddd_v0_0.txt Como utilizar el DDD (versión texto).

    PROBLEMES

  • Problemes Tema 7 sense les solucions
  • Problemes Tema 7 amb les solucions


    MANEL's WEBPAGE