Practica 1(Familiarización con DosBox, DEBUG y MASM)
PUEDE SER DE AYUDA: http://www.mathemainzel.info/files/x86asmref.html#lea
PUEDE SER DE MAS AYUDA: http://en.wikipedia.org/wiki/INT_21H
http://www.dosbox.com/wiki/Special_Keys
1) Instale la aplicación DosBox que puede encontrar en el siguiente link https://sites.google.com/site/22012archcompupb/archivos
¿que es el DosBox y para que sirve?
2) Abra DosBox y monte la carpeta donde usted extrajo los archivos donde estan las aplicaciones DEBUG y MASM, de los contrrario descarguelas y peguelas en el directorio del DOSBOX
http://www.dosbox.com/wiki/MOUNT
http://www.dosbox.com/wiki/Drives
3) Ejecute DEBUG en la consola y siga los siguientes pasos:
-?
¿que sale cuando escribo el signo de interrogación?
-a 200
xxxx:0200 db 'An "ASCII-Z string" is always followed by ' xxxx:022A db "a zero-byte ('00h').", 0 xxxx:023F -d 200 23e xxxx:0200 41 6E 20 22 41 53 43 49-49 2D 5A 20 73 74 72 69 An "ASCII-Z stri xxxx:0210 6E 67 22 20 69 73 20 61-6C 77 61 79 73 20 66 6F ng" is always fo xxxx:0220 6C 6C 6F 77 65 64 20 62-79 20 61 20 7A 65 72 6F llowed by a zero xxxx:0230 2D 62 79 74 65 20 28 27-30 30 68 27 29 2E 00 -byte ('00h')..
¿que sucede cuando escribo la linea "a 200"?
-a 100
xxxx:0100 jmp 126 ; Jump over data that follows: xxxx:0102 db 0d,0a,"This is my first DEBUG program!" xxxx:0123 db 0d,0a,"$" xxxx:0126 mov ah,9 ; Function 09 of Int 21h: xxxx:0128 mov dx,102 ; DS:DX -> $-terminated string. xxxx:012B int 21 ; Write String to STD Output. xxxx:012D mov ah,0 ; Function 00 of Int 21h: xxxx:012F int 21 ; Terminate Program. xxxx:0131 -g =100
¿que sucede cuando escribo -g = 100, y que hace este programa?
-u 126 12F
¿que podemos ver una vez escrito el comando u 126 12f, explique?
-o 70 04
-i 71
¿que sucede una vez que escribimos estos dos comandos(o i), interprete?
compare el valor que obtiene con la hora de su PC.
-r
¿Que puede observar una vez se ingresa el comando "r"?
-r AX=0000 BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000 DS=2048 ES=2048 SS=2048 CS=2048 IP=0100 NV UP EI PL NZ NA PO NC 2048:0100 92 XCHG DX,AX -a 100
2048:0100 mov ax,0200 2048:0103 mov dl,61 2048:0105 int 21 2048:0107 -g 107
¿que sucede con el registro ax y dx?
¿intente pasar el siguiente código a lenguaje ensamblador?
a=100
b=200
c= a+b
printf ("hola");
¿que diferencias hay entre un lenguaje de bajo nivel y uno de alto?
4) ahora cierre la aplicación DEBUG y en bloc de notas escriba el siguiente código guarde el archivo con la extensión (*.asm).
.model small .stack .data message db "Hello world!", "$" .code main proc mov ax,seg message mov ds,ax mov ah,09 lea dx,message int 21h mov ax,4c00h int 21h main endp end main
Una vez escrito el codigo, guardelo en la carpeta donde esta el ejecutable MASM
-MASM HELL.ASM
-ENTER... ENTER...
- LINK HELL.OBJ
-ENTER... ENTER...
HELL.EXE
¿que pasa, que se hizo?
-DEBUG HELL.EXE
-u
compare el codigo que escribio en el bloc de notas con el que se puede ver despues de utilizar el comando "u"
Fin practica 1
Practica 2:
Guiarse de: Manual 1
http://courses.engr.illinois.edu/ece390/books/labmanual/c-prog-mixing.html
http://www.tiedyedfreaks.org/eric/mixing_asm_and_c.html
1) Descargue e instale el MINGW http://sourceforge.net/projects/mingw/ , si trabaja sobre linux no tiene que hacer esto.
2) Registre el path del mingw en las variables del sistema como lo dice el manual del siguiente link, (clic aqui)(Pag 48).
3) Ahora escriba el siguiente código en un archivo que usted llame "tarea2.c"
#define PI 3.1416
int main(void)
{
float area, radio;
radio = 10;
area = PI * (radio * radio);
printf("Circulo.\n");
printf("%s%f\n\n", "Area de circulo radio 10: ", area);
}
-Abra la consola "CMD" y ubíquese en la ruta donde se encuentra el archivo "tarea2.c", y escriba
$ gcc tarea2.c -o tarea2.exe
$ tarea2.exe
¿que se hace en las lineas de codigo anteriores?
-Ahora escriba la siguientes lineas de codigo
$ file tarea2.exe
¿que podemos ver en la consola?
-Escriba lo siguiente:
$ gcc -S tarea2.c
$ more tarea2.s
¿que diferencias hay entre utilizar gcc con "-c" y "-s"?
¿que hace el comando "more"?
4) utilice gcc para compilar el siguiente codigo, y expliquelo:
¿porque puedo y para que es útil escribir en ensamblador en lenguaje ANSI-C?(escriba ventajas)
¿que hace el código ensamblador de la función add, y explique como se enlaza al código ANSI-C?
Practica 3
1.Quiz 1 de tipos de direccionamiento.
2.Trabajo individual sobre DosBox(Quiz 2).
1.Comprobar que los ejemplos del libro de IBM x86 de las paginas 94 a la 98 son ciertos y hacer el mapa de memoria donde se encuentra DS y CS de cada uno, calcular la dirección física y los rangos donde se encuentra el código.
3.(Quiz 3)Según el código PUNTO4.ASM que usted estudio en su casa, haga un programa en ensamblador que imprima toda la tabla ASCII estándar y haga el mapa de memoria. Además entregue en una hoja comentado línea a línea el código del punto4.asm y aparte del nuevo código que usted hizo.
Para desarrollar esto usted cuenta con las 3 horas de clase y puede ayudarse de los siguientes links:
http://en.wikipedia.org/wiki/INT_21H
http://www.mathemainzel.info/files/x86asmref.html
PD: Para el laboratorio vaya pensando como hacer un programa que haga un conteo de 0 a 9999 y lo imprima en la consola.
PD2: Estudie saltos condicionales Short, Near, far, Call Statements, ¿Cómo calcular el target location? Y como calcular el stack pointer.