A) GENERALIDADES E INTRODUCCIÓN AL DEBUG
1.- ¿A qué se denomina sistema operativo?
Un sistema operativo es un software encargado de brindar al usuario una forma amigable y sencilla de operar, interpretar, codificar y emitir las ordenes al procesador central para que éste realice las tareas necesarias y especificas para completar una orden. El sistema operativo es el instrumento indispensable para hacer de la computadora un objeto útil. Bajo este nombre se agrupan todos aquellos programas que permiten a los usuarios la utilización del computador, que de otra manera seria difícil de controlar. Un sistema operativo se define como un conjunto de procedimientos manuales y automáticos, que permiten a un grupo de usuarios compartir una instalación de computadora eficazmente. Es un conjunto de programas que sirven de plataforma a otros programas.
2.- Nombre por lo menos tres sistemas operativos actuales y descríbalos
Los sistemas operativos empleados actualmente son UNIX, Mac OS, Linux, MS-DOS, OS/2 y Windows: 98, 2000 (advanced server y profesional), XP, 2003.
1.- Unix
UNIX es un sistema operativo multiusuario que incorpora multitarea. Fue desarrollado originalmente por Ken Thompson y Dennis Ritchie en los laboratorios AT&T Bell en 1969 para su uso en mini computadoras. El sistema operativo UNIX tiene diversas variantes y se considera potente, más transportable e independiente de equipos concretos que otros sistemas operativos porque está escrito en lenguaje C. El UNIX está disponible en varias formas, entre las que se cuenta AIX, una versión de UNIX adaptada por IBM (para su uso en estaciones de trabajo basadas en RISC), A/UX (versión gráfica para equipos Apple Macintosh) y Mach (un sistema operativo reescrito, pero esencialmente compatible con UNIX, para las computadoras NeXT).
2.- OS/2
Es un sistema operativo multitarea para ordenadores o computadoras personales con microprocesadores de la gama x86 de Intel. El OS/2 puede ejecutar aplicaciones para Windows y MS-DOS y leer discos de MS-DOS. El OS/2 fue desarrollado originalmente como un proyecto conjunto de Microsoft e IBM.
3.- Windows
3.1 Windows NT
Es un sistema operativo diseñado para implementar principalmente redes y funcionar tanto como servidor (NT Server) como cliente (NT work station). Ofrece los mismos servicios que UNIX y puede interoperar con redes UNIX. Utiliza 32 bits y tiene compatibilidad con Windows GUI, además de soportar las aplicaciones hechas en DOS pero liberándose de las limitaciones de éste. Sus características son: extensibilidad, portabilidad, confiabilidad y robustez: compatibilidad, multiprocesamiento y escalabilidad, cómputo distribuido y desempeño, direccionamiento de 32-bits, soporte de memoria virtual, preemptive multitasking, soporte para multiprocesador y arquitectura cliente / servidor. Windows 2000 advanced server tiene básicamente las mismas características de Windows NT.
3.2 Windows XP
Windows XP Profesional integra los puntos fuertes de Windows 2000 Profesional (como la seguridad basada en estándares, la capacidad de administración y la confiabilidad) con las mejores características comerciales de Windows 98 y Windows Me (por ejemplo, Plug and Play, una interfaz de usuario más sencilla y novedosos servicios de soporte).
4. Linux
Linux es un sistema operativo muy semejante a UNIX, tanto así que casi todo el software gratuito desarrollado para UNIX se compila en Linux sin problemas. Fue diseñada por Linus Torualds en 1991 para microprocesadores 80386 y como software libre (de libre distribución), lo que le permitió un rápido avance y gran compatibilidad, aunque en la actualidad hay algunas organizaciones que la respaldan, como Red hat, Mandrake, entre otras. Linux es un sistema completo, con multitarea y multiusuario, pueden trabajar varios usuarios simultáneamente en él, y cada uno de ellos puede tener varios programas en ejecución. Soporta diversos sistemas de ficheros para guardar los datos, también soporta el ISO-9660, que es el estándar seguido en el formato de los CD-ROMs. Implementa todo lo necesario para trabajar en red con TCP/IP.
3.- ¿Qué diferencia hay entre una ROM y una RAM?
3.1 ROM (Read only memory)
Es un chip esencial de memoria de sólo lectura basada en semiconductores que contiene instrucciones o datos que "se pueden leer pero no modificar". El término ROM se suele referir a cualquier dispositivo de sólo lectura, incluyendo PROM y EPROM.
• Memoria PROM (Programmable Read-Only Memory) la memoria de sólo lectura programable puede ser escrita (programada) a través de un dispositivo especial, un programador PROM. La escritura de la memoria PROM tiene lugar fundiendo los fusibles necesarios por lo que la memoria PROM solo puede ser programada una vez.
• Memoria EPROM (Erasable Programmable Read-Only Memory) la memoria de solo lectura programable y borrable puede ser borrada mediante su exposición a la luz ultravioleta y luego se puede rescribir con un programador EPROM. Una exposición repetida a la luz ultravioleta puede destruir eventualmente la memoria EPROM pero generalmente es necesario muchas exposiciones antes de que la memoria EPROM se haga inutilizable.
• Memoria Flash o EEPROM (Electrically Erasable Read-Only Memory) la memoria de solo lectura programable y eléctricamente borrable, puede ser borrada eléctricamente y luego escrita sin sacarla del ordenador. Esta forma de escritura es más lenta que copiar en la memoria RAM o leer desde cualquier memoria ROM.
3.2 RAM (Random Access Memory)
Es una memoria de acceso aleatorio basada en semiconductores que "puede ser leída y escrita" por el microprocesador u otros dispositivos de hardware. Actualmente la memoria RAM para computadoras personales se suele fabricar en módulos insertables llamados DIMM, SIMM y RIMM. Tiene la capacidad de cambiar los datos de cualquier dirección en cualquier tiempo, es volátil, pues su contenido desaparece al quitarle la alimentación, almacena tanto el programa que se está ejecutando como los datos mientras están siendo procesados, almacena el sistema operativo. Se comunica con el CPU a través de los buses de dirección y el de datos. Se organiza en bites, cada uno de los cuales represent5a un valor que puede interpretarse de varias formas dependiendo de cada aplicación.
– RAM dinámica
Almacenan la información en circuitos integrados que contienen condensadores. Como éstos pierden su carga en el transcurso del tiempo, se debe incluir los circuitos necesarios para 'refrescar' los chips de RAM. Mientras la RAM dinámica se refresca, el procesador no puede leerla. Si intenta hacerlo en ese momento, se verá forzado a esperar. Como son relativamente sencillas, las RAM dinámicas suelen utilizarse más que las RAM estáticas, a pesar de ser más lentas. Una RAM dinámica puede contener aproximadamente cuatro veces más datos que un chip de RAM estática del mismo coste.
– RAM estática
El almacenamiento en RAM estática se basa en circuitos lógicos denominados flip-flop, que retienen la información almacenada en ellos mientras haya energía suficiente para hacer funcionar el dispositivo. Un chip de RAM estática puede almacenar tan sólo una cuarta parte de la información que puede almacenar un chip de RAM dinámica de la misma complejidad, pero la RAM estática no requiere ser actualizada y es normalmente mucho más rápida que la RAM dinámica. También es más cara, por lo que se reserva generalmente para su uso en la memoria de acceso aleatorio (caché).
4.- ¿Qué contiene la ROM?
Contiene el BIOS, encargado de las rutinas básicas y del control de los dispositivos de entrada y salida. El Sistema Básico de Entrada / salida (BIOS) del ROM inicia en la dirección 768k y maneja los dispositivos de entrada y salida, como un controlador de disco duro. La ROM que inicia en 960K controla las funciones básicas de la computadora, como auto prueba al encender, patrones de puntos para los gráficos y el autocargador de disco. Cuando se enciende la computadora la ROM realiza ciertas verificaciones y carga, desde el disco, los datos especiales del sistema, que envía a la RAM.
5.- ¿Qué función cumplen los registros de segmento y cuáles son?
Los registros de segmento facilitan un área de memoria para direccionamiento conocida como el segmento actual y tienen 16 bits de longitud. Un segmento es un área especial en un programa que se alinea en un límite de párrafo y su dirección en un registro de segmento supone cuatro bits 0 a su derecha. Son:
- Registro CS: Permite el direccionamiento de los segmentos de código
- Registro DS: Genera una referencia a la localidad de un byte específico en el segmento de datos.
- Registro SS: Permite la colocación en memoria de una pila, para almacenamiento temporal de direccionamiento y datos.
- Registro ES: Es utilizado por algunas operaciones con cadenas de caracteres para manejar el direccionamiento de memoria.
- Registros FS y GS: Son registros extra se segmento en los procesadores 80386 y posteriores
6.- ¿A qué se denomina registros de propósito general y cuál es su función?
Los registros de propósito general son "los caballos de batalla del sistema". Son únicos en el sentido de que se puede direccionarlos como una palabra o como una parte de un byte. El último byte de la izquierda es la parte "alta", y el último byte de la derecha es la parte "baja". Se puede usar los registros de propósito general para suma y resta de cifras de 8, 16 o 32 bits. Son:
- Registro AX: Es el acumulador principal, utilizado para operaciones que implican entrada /salida y la mayor parte de la aritmética. Por ejemplo, las instrucciones para multiplicar, dividir y traducir. También, algunas operaciones generan código mas eficiente si se refieren al AX en lugar de a los otros registros.
- Registro BX. El BX es conocido como el registro base ya que es el único registro de propósito general que puede ser índice para direccionamiento indexado. También es común emplear el BX para cálculos.
- Registro CX: El CX es conocido como el registro controlador. Puede contener un valor para contener el número de veces que un ciclo se repite o un valor para corrimiento de bits, hacia la derecha o hacia la izquierda. El CX también es usado para muchos cálculos.
- Registro DX. El DX es conocido como l registro de datos. Algunas operaciones de entrada / salida requieren uso, y las operaciones de multiplicación y división con cifras grandes suponen al DX y al AX trabajando juntos.
7.- ¿De qué consta el registro de banderas y cuál es la función que cumple cada una?
El registro de banderas indica el estado actual de la computadora y los resultados de la ejecución de las instrucciones. Consta de:
- OF (Overflow, desbordamiento) : Indica desbordamiento de un bit de orden alto (más a la izquierda) después de una operación aritmética.
- DF (dirección) : Designa la dirección hacia la izquierda o hacia la derecha para mover o comparar cadenas de caracteres.
- IF (interrupción) : Indica que una interrupción externa, como la entrada desde un teclado, sea procesada o ignorada.
- TF (trampa) : Permite la operación del procesador en modo de un paso (una sola instrucción a un tiempo, para examinar el efecto de esa instrucción sobre los registros y la memoria).
- SF (signo) : Contiene el signo resultante de una operación aritmética (0 = positivo y 1 = negativo).
- ZF (cero) : Indica el resultado de una operación aritmética o de comparación. (0 = resultado diferente de cero y 1 = resultado igual a cero).
- AF (acarreo auxiliar) : Contiene un acarreo externo del bit 3 en un dato de ocho bits, para aritmética especializada.
- PF (paridad) : Indica paridad par o impar de una operación en datos de ocho bits de bajo orden (más a la derecha).
- CF (acarreo) : Contiene el acarreo de orden más alto después de una operación aritmética, también lleva el contenido del último bit en una operación de corrimiento o de rotación.
8.- ¿Cómo es que trabaja el programa DEBUG?
El DEBUG es un programa de DOS que permite visualizar la memoria, introducir programas en ella y rastrear su ejecución. Es utilizado para probar y depurar programas ejecutables. Trabaja desplegando todo el código del programa y los datos en formato hexadecimal, y cualquier dato que se introduzca a la memoria también debe estar en formato hexadecimal. Permite también ejecutar un programa en "modo de paso sencillo"(un paso a la vez), de manera que se pueda ver el efecto de cada instrucción sobre las localidades de memoria y los registros.
9.- ¿Qué diferencia hay entre Archivos.COM y Archivos.EXE?
Algunas diferencias importantes entre un programa que es para ejecutarse como .EXE y uno que es para ejecutarse como .COM implica el tamaño del programa, la segmentación y la inicialización. Un programa .EXE puede ser de cualquier tamaño, mientras que u programa .COM está restringido a un segmento y a un máximo de 64K, incluyendo el PSP. Un programa .COM es más pequeño que su contraparte .EXE; una razón es que el bloque de encabezado de 512 bytes a un programa .EXE no precede a un programa .COM. Un programa .EXE se define con un segmento de pila y por lo común define un segmento de datos e inicializa el registro DS con la dirección de ese segmento; mientras que un programa .COM genera de manera automática una pila y sus datos están definidos dentro del segmento de código, tampoco tiene que definir el segmento de datos.
10.- ¿Cuál es la instrucción para nombrar a un programa?
Para nombrar a un programa se emplea la instrucción N seguida del nombre del archivo a nombrar, el cual tiene la extensión .com. Es decir, se escribe en el debug de la forma: N nombredearchivo.COM.
11.- ¿Cuál es la instrucción para escribir en disco un programa?
Se utiliza, desde el debug, la instrucción W (write=escribir) para escribir o grabar un programa en disco
12.- A ¿qué se denomina interrupciones?
Se denomina interrupción a una operación que suspende la ejecución de un programa de modo que el sistema pueda realizar una acción especial. La rutina de interrupción ejecuta y por lo regular regresa el control al procedimiento que fue interrumpido, el cual entonces reasume su ejecución.
13.- ¿Qué interrupciones están reservadas para el DOS?
Las interrupciones desde la 20H hasta la 3FH están reservadas para operaciones del DOS. Algunas de estas interrupciones son:
- INT 20H: Termina el programa.
- INT 21H: Petición de función al DOS.
- INT 22H: Dirección de terminación.
- INT 23H: Dirección de Cltr + Break (para transferir el control a una rutina)
- INT 24H: Manejador de error critico.
- INT 25H: Lectura absoluta de disco.
- INT 26H: Escritura absoluta de disco.
- INT 27H: Termina pero permanece residente (reside en memoria).
- INT 2FH: Interrupción de multiplexion.
- INT 33H: Manejador del ratón.
14.- ¿Cuál es la función de la Interrupción 21 y con qué registros trabaja?
Lo que realiza la interrupción 21es una petición de función al DOS. La principal operación del DOS necesita una función en el AH (trabaja con el registro de propósito general AX).
15.- ¿Cuál es la función de la interrupción 20?
Su función es terminar el programa. Finaliza la ejecución de un programa .COM, restaura las direcciones para Cltr + Break y errores críticos, limpia los bufer de registros y regresa el control al DOS. Esta función por lo regular seria colocada en el procedimiento principal y al salir de el, CS contendría la dirección del PSP. La terminación preferida es por medio de la función 4CH de la INT 21H.
16.- Indicar los comandos del Debug y la función que cumplen
Los comandos del Debug son:
- A: Ensamblar instrucciones simbólicas y pasarlas a código de máquina.
- D: Mostrar el contenido de un área de memoria.
- E: Introducir datos en memoria, iniciando en una localidad específica.
- G: Corre el programa ejecutable que se encuentra en memoria.
- N: Nombrar un programa.
- P: Proceder o ejecutar un conjunto de instrucciones relacionadas.
- Q: Salir la sesión con Debug.
- R: Mostrar el contenido de uno o más registros.
- T: Rastrear la ejecución de una instrucción.
- U: "Desensamblar" código de máquina y pasarlo a código simbólico.
- W: Escribir o grabar un programa en disco.
17.- ¿Qué significa las siglas ASCII?
Singnifica: American Standard Code for Information Interchance (Código estándar americano para el intercambio de información).
18.- ¿Cuál es la función de la instrucción CMP?
CMP = Comparar. La instrucción CMP es utilizada para comparar dos campos de datos, uno o ambos de los cuales están contenidos en un registro. El formato general para CMP es:
[Etiqueta:] | CMP | {registro/memoria},{registro /memoria/inmediato} |
El resultado de una operación CMP afecta las banderas AF, CF, OF, PF, SF y ZF, aunque no es necesario probar todas estas banderas en forma individual.
CMP resta internamente el segundo operando del primero y pone en uno o en cero las banderas, pero no almacena el resultado. Ambos operandos son Byte, palabra o palabra doble (80386 y posteriores). CMP puede comparar registro, memoria o inmediato con un registro o comparar registro o inmediato con memoria.
19.- ¿A qué se denomina el bit más significativo y a qué el menos significativo?
Se denomina el bit más significativo a aquél que se encuentra más a la izquierda en un byte y es un bit menos significativo aquél que se encuentra más a la izquierda en un byte.
20.- ¿Cuál es el código ASCII?
21. ¿Cuál es la función de la instrucción RCL?
(RCL: Rotate left through carry = Rotar a la izquierda a través del acarreo) Su función es rotar los bits (en un byte, palabra o palabra doble) en el registro o memoria designados, hacia la izquierda a través del CF (carry flag o registro de abanderas de acarreo).
La instrucción de rotar a la izquierda se utiliza para datos lógicos y aritméticos. El operando puede ser una constante inmediata o una referencia al CL. En la 8088/86 la constante puede sólo ser 1, una rotación más grande debería estar en el CL. En procesadores posteriores, la constante puede ser hasta 31. El RCL es similar al RCR, por lo que también hace que participe el registro de banderas de acarreo en la rotación. Cada bit a la izquierda se mueve al CF y el bit del CF lo mueve a la posición vacía de la derecha. Se puede utilizar la instrucción JC para evaluar al bit que ha rotado al CF al final de una operación de rotación.
- Banderas que afecta: CF y OF
- Código fuente:
RCL {registro/memoria},{CL/constante}
- ¿Cuál es la función de la instrucción LOOP?
Su función es controlar la ejecución de una rutina específica un determinado número de veces. El CX debe contener un dato que servirá como contador antes de comenzar las sucesivas repeticiones. El LOOP aparece al final del proceso y decrementa en uno al CX. Si el CX es diferente de cero, LOOP se transfiere a la dirección del operando, el cual apunta al comienzo del loop; caso contrario el LOOP de dirige a la instrucción siguiente. Para la 80386 y posteriores, LOOP utiliza al CX en modo de 16 bits y al ECX en modo de 32 bits.
– Banderas que afecta: Ninguna
- Código fuente:
[etiqueta:] LOOP dirección
(ADC: Add with carry = Suma con acarreo)
Su función es ser usado en adición binaria de multipalabras para acarrear un bit 1 desbordado a la siguiente etapa de la aritmética. Suma el contenido de la bandera CF (0/1) al primer operando, y después suma el segundo operando con el primero, tal y como lo realiza ADD. Necesita 2 valores. Para sustracción de multipalabras, su equivalente es SBB.
- Banderas que afecta: AF, CF, OF, PF, SF y ZF
- Código fuente:
ADC {registro/memoria},{registro/memoria/constante inmediata}
- ¿Cuál es la función de la instrucción ADC?
- A ¿qué se denomina acarreo y qué registro de banderas utiliza?
Se denomina acarreo al hecho de llevar un bit de desbordamiento de órden alto al CF de tal modo que no se pierda y se pueda trabajar de alguna u otra forma con él.
Utiliza el registro CF (carry = acarreo), el cual contiene acarreos de alto órden (de la izquierda) siguiendo una operación aritmética y también contiene el contenido del último bit de una operación de rotación.
B) EJERCICIOS BÁSICOS DIVERSOS
Para ingresar al debug se ejecuta el DOS y se digita "debug"
1. Uso del comando "R"
Observe el contenido de los registros del microprocesador y cambie a los valores que se indican el contenido de los siguientes registros, en cada caso luego de realizar el cambio, verifíquelo en la pantalla y anote lo que va apreciando:
C:>debug
– r
AX=0000 BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000
DS=1A9E ES=1A9E SS=1A9E CS=1A9E IP=0100 NV UP EI PL NZ NA PO NC
1.- El acumulador que se cargue con 5A7
-rax
:5A7
-r
AX=05A7 BX=0000 CX=0000 DX=0000
2.- El contador con 1DE4
-rcx
:1DE4
-r
AX=05A7 BX=0000 CX=1DE4 DX=0000
3.- El de instrucciones con 0200
-rip
:200
-r
(…) DS=1A9E ES=1A9E SS=1A9E CS=1A9E IP=0200
4.- El base con C23
-rbx
:C23
-r
AX=05A7 BX=0C23 CX=1DE4 DX=0000
5.- El DX con FFFF1
-rdx
:FFFF1
Error ^
-r
AX=05A7 BX=0C23 CX=1DE4 DX=0000
No se puede cambiar el registro DX con FFFF1 porque tiene 2 ½ bytes (5 nibles) y el registro sólo acepta 2 bytes (4 nibles o 1 palabra).
6.- Regrese el IP a su valor original
-rip
:100
-r
AX=05A7 BX=0C23 CX=1DE4 DX=0000 SP=FFEE BP=0000 SI=0000
DS=1A9E ES=1A9E SS=1A9E CS=1A9E IP=0100 NV UP EI PL NZ
2. Uso del comando "H"
Utilice el comando H para realizar las siguientes operaciones aritméticas con los siguientes pares de números.
a. 5D, 3D
-h 5D,3D
009A 0020
b. 3A, 11
-h3A,11
004B 0029
c. 8D, 4D
-h 8D,4D
00DA 0040
01CF 00BB 8
Entonces, 23456d = 5BA0h
j. 56h, 10h
-h 56,10
0066 0046
k. A3h, 2Fh
-h A3,2F
00D2 0074
3. Uso del comando "E" y "T"
Utilizando el lenguaje de máquina, los registros AX, BX, las instrucciones ADD (01h,d8) y SUB (29h,d8), realice las sumas y restas
3.1 SUMAS
Primero cargar IP con 100. Luego escribir en e100:01 y en e101:d8. En a se realizarán todos los pasos, en las siguientes se asume que previamente se han realizado los tres primeros pasos indicados anteriormente. El resultado aparece en AX..
a. 5D, 3D
-rip
:100
-e100
1A9E:0100 01.01
-e101
1A9E:0101 04.d8
-rax
:5D
-rbx
:3D
-t
AX=009A BX=003D CX=0000 DX=0000
b. 3A, 11
-rax
:3A
-rbx
:11
-t
AX=004B BX=0011 CX=0000 DX=0000
3.2 RESTAS
Para las restas seguir los tres primeros pasos de b.1, es decir, cargar el IP con 100, e100 con 29 y e101 con d8.
a. 5D, 3D
-rip
:100
-e100
1A9E:0100 01.29
-e101
1A9E:0101 D8.d8
-rax
:5D
-rbx
:3D
-t
AX=0020 BX=003D CX=0000 DX=0000
b. 3A, 11
-rax
:3A
-rbx
:11
-t
AX=0029 BX=0011 CX=0000 DX=0000
4. Uso del comando E y T : Multiplicación y división
Use las instrucciones MUL (F7h, E3h) y DIV (f7h, F3h) para realizar las siguientes operaciones.
= 0707C000 :100
(DXAX) -e100
1A9E:0100 29.F7
-e101
1A9E:0101 D8.E3
-rax
:7C7C
-rbx
:1000
-t
AX=C000 BX=1000 CX=0000 DX=07C7
- 7C7C*1000 -rip
- FEAh/57h -rip
= 0048 :100
(DHAL) -e100
1A9E:0100 F7.F7
-e101
1A9E:0101 F3.F3
-rax
:FEA
-rbx
:57
-t
AX=002E BX=0057 CX=0000 DX=0048
5.- Muestre por la pantalla 20 caracteres ASCII (uno por uno) use el comando G y la interrupción 21 del DOS.
La interrupción 21 muestra el carácter ASCII del número hexadecimal que se pone en el registro de datos, con el puntero siempre apuntando a la dirección 100 de la memoria (pues se iniciarán las instrucciones en la dirección 10 de la memoria) y el registro acumulador cargado con 200 (en general sólo es necesario que AH esté cargado con 02 y debido a que después de mostrar un carácter el valor de AH no varía, se puede obviar). También se puede obviar el poner en memoria la interrupción 21 al mostrar varios caracteres en forma consecutiva. Para ejecutar se utiliza g102.
a. 40
-rip
:100
-rax
:200
-rdx
:40
-e100
85.cd ED.21
-g102
@
b. 41
-rip
:100
-rdx
:41
-g102
A
6.- Repita el ejercicio anterior introduciendo ahora las instrucciones con el comando A (ensamblar), la instrucción MOV y los registros AH,DL
a. 03
-A
1A9E:0100 MOV AH,02
1A9E:0102 MOV DL,03
1A9E:0104 INT 21
1A9E:0106 INT 20
1A9E:0108
-G
El programa ha finalizado con normalidad
-U
b. C1
-A
1A9E:0100 MOV AH,02
1A9E:0102 MOV DL,C1
1A9E:0104 INT 21
1A9E:0106 INT 20
1A9E:0108
-G
–
El programa ha finalizado con normalidad
- Genere archivos con cada uno de los siguientes caracteres colocando como nombre EJER01.COM, EJER02.COM… y luego ejecútelos desde el DOS.
(En algunos se omite el BX, pues se supone que está cargado con 0000)
- 01
-A100
1A9E:0100 MOV AH,02
1A9E:0102 MOV DL,01
1A9E:0104 INT 21
1A9E:0106 INT 20
1A9E:0108
-N EJER01.COM
-RCX
:0008
-W
Escribiendo 00008 bytes
-Q
C:>EJER01.COM
- 4E
-A100
1A9E:0100 MOV AH,02
1A9E:0102 MOV DL,4E
1A9E:0104 INT 21
1A9E:0106 INT 20
1A9E:0108
-N EJER02.COM
-RCX
:0008
-W
Escribiendo 00008 bytes
-Q
C:>EJER02.COM
N
-A100
1A9E:0100 MOV AH,09
1A9E:0102 MOV DX,200
1A9E:0105 INT 21
1A9E:0107 INT 20
1A9E:0109
-E200
1A9E:0200 4F.42 53.49 43.45 41.4E 52.56 24.45 0F.4E BA.49
1A9E:0208 96.44 80.4F E8.53 C3.20 1F.43 E8.41 D7.43 E2.48
1A9E:0210 BA.49 B8.4D 7E.42 E9.4F CF.53 06.21 80.21 3E.24
-G
BIENVENIDOS CACHIMBOS!!
El programa ha finalizado con normalidad
-N EJER16.COM
-RBX
BX 0000
:0000
-RCX
CX 0000
:0124
-W
Escribiendo 00124 bytes
-Q
- Displaye en pantalla la siguiente cadena de caracteres y guardar el programa con el nombre EJER16.COM
- Displaye en pantalla su primer nombre y guarde el programa con EJER17.COM
-A100
1A9E:0100 MOV AH,09
1A9E:0102 MOV DX,200
1A9E:0105 INT 21
1A9E:0107 INT 20
1A9E:0109
-E200
1A9E:0200 80.4F 3E.53 83.43 CF.41 00.52 75.24
-G
OSCAR
El programa ha finalizado con normalidad
-N EJER17.COM
-RBX
:0000
-RCX
:0106
-W
Escribiendo 00106 bytes
-Q
4.- Estructure un programa con el Debug que muestre en la pantalla el siguiente logo:
***********************
* CONOCIENDO *
* ENSAMBLADOR *
* ING. ELECTRONICA *
***********************
10. Genere un archivo COM y ejecútelo desde el sistema operativo
-A100
1A9E:0100 MOV AH,09
1A9E:0102 MOV DX,200
1A9E:0105 INT 21
1A9E:0107 INT 20
1A9E:0109
-E200
1A9E:0200 80.2A 3E.2A 83.2A CF.2A 00.2A 75.2A 0F.2A BA.2A
1A9E:0208 96.2A 80.2A E8.2A C3.2A 1F.2A E8.2A D7.2A E2.2A
1A9E:0210 BA.2A B8.2A 7E.2A E9.2A CF.2A 06.2A 80.2A 3E.0A
1A9E:0218 8D.0D CF.0A 00.0D 75.2A 42.20 E8.20 F1.20 03.20
1A9E:0220 72.20 10.43 80.4F 3E.4E 83.4F CF.43 00.49 75.45
1A9E:0228 36.4E 80.44 3E.4F C1.20 D7.20 00.20 75.20 46.20
1A9E:0230 EB.20 2D.2A 80.0A 3E.0D 9C.0A D7.0D 00.2A 75.20
1A9E:0238 07.20 80.20 3E.20 83.20 CF.45 00.4E 74.53 08.41
1A9E:0240 C6.4D 06.42 8E.4C CF.41 01.44 E9.4F CA.52 FE.20
1A9E:0248 E8.20 C4.20 00.20 74.20 86.2A 80.0A 3E.0D C2.0A
1A9E:0250 D7.0D 00.2A 74.20 03.20 E9.49 1F.4E FF.47 C6.2E
1A9E:0258 06.20 8E.45 CF.4C 01.45 E9.43 17.54 FF.52 80.4F
1A9E:0260 3E.4E 83.49 CF.43 00.41 75.20 07.20 F6.20 06.2A
1A9E:0268 90.0A D6.0D 02.0A 74.0D 09.2A BA.2A 96.2A 80.2A
1A9E:0270 E8.2A 5D.2A 1F.2A E8.2A 71.2A E2.2A E8.2A B2.2A
1A9E:0278 00.2A 80.2A 3E.2A 83.2A CF.2A 00.2A 75.2A 0A.2A
1A9E:0280 E8.2A D2.2A 01.2A 72.24
-G
***********************
* CONOCIENDO *
* ENSAMBLADOR *
* ING. ELECTRONICA *
***********************
El programa ha finalizado con normalidad
-N LOGO.COM
-RBX
BX 0000
:0000
-RCX
CX 0000
:0184
-W
Escribiendo 00184 bytes
-Q
C:>LOGO.COM
***********************
* CONOCIENDO *
* ENSAMBLADOR *
* ING. ELECTRONICA *
***********************
11. Haga un programa que imprima en pantalla el texto y realice la conversión:
NUMEROS BINARIOS
A7h = 10100111
-A100
1A9E:0100 MOV AH,09
1A9E:0102 MOV DX,200
1A9E:0105 INT 21
1A9E:0107 MOV AH,02
1A9E:0109 MOV BL,A7
1A9E:010B MOV CX,08
1A9E:010E RCL BL,1
1A9E:0110 MOV DL,00
1A9E:0112 ADC DL,30
1A9E:0115 INT 21
1A9E:0117 LOOP 10E
1A9E:0119 INT 20
1A9E:011B
-A200
1A9E:0200 DB "NUMEROS BINARIOS$"
1A9E:0211
-E210
1A9E:0210 26.0A B8.0D
-A212
1A9E:0212 DB"________________$"
1A9E:0223
-E222
1A9E:0222 26.0A 3E.0D
-A224
1A9E:0224 DB "________________$"
1A9E:0235
-E234
1A9E:0234 24.0A D7.0D
-E236
1A9E:0236 41.0A 37.0D
-A238
1A9E:0238 DB "A7h=$"
1A9E:023D
-G
NUMEROS BINARIOS
________________
________________
A7h=10100111
El programa ha finalizado con normalidad
12. Utilizando la operación aritmética SUB, realice lo siguiente:
- 5 saltos de dirección con JZ
-A100
1A9E:0100 MOV BL,05
1A9E:0102 SUB BL,01
1A9E:0105 JZ 109
1A9E:0107 LOOP 102
1A9E:0109 INT 20
1A9E:010B
-R
AX=0000 BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000
1A9E:0100 B305 MOV BL,05
-T
AX=0000 BX=0005 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000
1A9E:0102 80EB01 SUB BL,01
-T
AX=0000 BX=0004 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000
1A9E:0105 7402 JZ 0109
-T
AX=0000 BX=0004 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000
1A9E:0107 E2F9 LOOP 0102
-T
AX=0000 BX=0004 CX=FFFF DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000
1A9E:0102 80EB01 SUB BL,01
-T
AX=0000 BX=0003 CX=FFFF DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000
1A9E:0105 7402 JZ 0109
-T
AX=0000 BX=0003 CX=FFFF DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000
1A9E:0107 E2F9 LOOP 0102
-T
AX=0000 BX=0003 CX=FFFE DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000
1A9E:0102 80EB01 SUB BL,01
-T
AX=0000 BX=0002 CX=FFFE DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000
1A9E:0105 7402 JZ 0109
-T
AX=0000 BX=0002 CX=FFFE DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000
1A9E:0107 E2F9 LOOP 0102
-T
AX=0000 BX=0002 CX=FFFD DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000
1A9E:0102 80EB01 SUB BL,01
-T
AX=0000 BX=0001 CX=FFFD DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000
1A9E:0105 7402 JZ 0109
-T
AX=0000 BX=0001 CX=FFFD DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000
1A9E:0107 E2F9 LOOP 0102
-T
AX=0000 BX=0001 CX=FFFC DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000
1A9E:0102 80EB01 SUB BL,01
-T
AX=0000 BX=0000 CX=FFFC DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000
1A9E:0105 7402 JZ 0109
-T
AX=0000 BX=0000 CX=FFFC DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000
1A9E:0109 CD20 INT 20
-A100
1A9E:0100 MOV AH,02
1A9E:0102 MOV DL,60
1A9E:0104 ADD DL,01
1A9E:0107 CMP DL,7A
1A9E:010A JA 110
1A9E:010C INT 21
1A9E:010E LOOP 104
1A9E:0110 ADD DL,07
1A9E:0113 INT 21
1A9E:0115 ADD DL,1D
1A9E:0118 MOV CX,04
1A9E:011B ADD DL,01
1A9E:011E INT 21
1A9E:0120 LOOP 11B
1A9E:0122 INT 20
1A9E:0124
-G
abcdefghijklmnopqrstuvwxyzéáíóú
El programa ha finalizado con normalidad
- Haga un programa para que imprima en pantalla todas las letras del alfabeto en minúsculas (letra a = 61h). Debe usar por lo menos un salto, también que imprima las minúsculas acentuadas (é = 130, á =160, í = 161, ó = 162, ú = 163, todos estos valores están en decimal).
-A100
1A9E:0100 MOV AH,02
1A9E:0102 MOV DL, 2F
1A9E:0104 ADD DL,01
1A9E:0107 INT 21
1A9E:0109 CMP DL,39
1A9E:010C JL 104
1A9E:010E ADD DL,07
1A9E:0111 MOV CX,06
1A9E:0114 ADD DL,01
1A9E:0117 INT 21
1A9E:0119 LOOP 114
1A9E:011B INT 20
1A9E:011D
-G
0123456789ABCDEF
El programa ha finalizado con normalidad
- Haga un programa para que imprima en pantalla todos los números hexadecimales utilizando un solo LOOP y los saltos correspondientes.
-A100
1A9E:0100 MOV DL,5D
1A9E:0102 MOV AH,02
1A9E:0104 MOV CL,4
1A9E:0106 SHR DL,CL
1A9E:0108 ADD DL,30
1A9E:010B CMP DL,39
1A9E:010E JLE 113
1A9E:0110 ADD DL,07
1A9E:0113 INT 21
1A9E:0115 INT 20
1A9E:0117
-G
5
El programa ha finalizado con normalidad
- 5Dh
- 66h
-A100
1A9E:0100 MOV DL,66
1A9E:0102 MOV AH,02
1A9E:0104 MOV CL,4
1A9E:0106 SHR DL,CL
1A9E:0108 ADD DL,30
1A9E:010B CMP DL,39
1A9E:010E JLE 113
1A9E:0110 ADD DL,07
1A9E:0113 INT 21
1A9E:0115 INT 20
1A9E:0117
-G
6
El programa ha finalizado con normalidad
- Haga un programa para que imprima el dígito más significativo de los siguientes números hexadecimales:
-A100
1A9E:0100 MOV DL,5D
1A9E:0102 MOV AH,02
1A9E:0104 AND DL,0F
1A9E:0107 ADD DL,30
1A9E:010A CMP DL,39
1A9E:010D JLE 112
1A9E:010F ADD DL,07
1A9E:0112 INT 21
1A9E:0114 INT 20
1A9E:0116
-G
D
El programa ha finalizado con normalidad
- 5Dh
- 66h
-A100
1A9E:0100 MOV DL,66
1A9E:0102 MOV AH,02
1A9E:0104 AND DL,0F
1A9E:0107 ADD DL,30
1A9E:010A CMP DL,39
1A9E:010D JLE 112
1A9E:010F ADD DL,07
1A9E:0112 INT 21
1A9E:0114 INT 20
1A9E:0116
-G
6
El programa ha finalizado con normalidad
- Haga un programa que imprima en pantalla el dígito menos significativo de los números del ejercicio anterior.
-A100
1A9E:0100 MOV DL,5D
1A9E:0102 MOV AH,02
1A9E:0104 MOV CL,04
1A9E:0106 SHR DL,CL
1A9E:0108 MOV CX,02
1A9E:010B ADD DL,30
1A9E:010E CMP DL,39
1A9E:0111 JLE 116
1A9E:0113 ADD DL,07
1A9E:0116 INT 21
1A9E:0118 MOV DL,5D
1A9E:011A AND DL,0F
1A9E:011D LOOP 10B
1A9E:011F INT 20
1A9E:0121
-G
5D
El programa ha finalizado con normalidad
- 5Dh
- 66h
- Haga un programa que imprima en pantalla los dos dígitos
-A100
1A9E:0100 MOV DL,66
1A9E:0102 MOV AH,02
1A9E:0104 MOV CL,04
1A9E:0106 SHR DL,CL
1A9E:0108 MOV CX,02
1A9E:010B ADD DL,30
1A9E:010E CMP DL,39
1A9E:0111 JLE 116
1A9E:0113 ADD DL,07
1A9E:0116 INT 21
1A9E:0118 MOV DL,66
1A9E:011A AND DL,0F
1A9E:011D LOOP 10B
1A9E:011F INT 20
1A9E:0121
-G
66
El programa ha finalizado con normalidad
- Peter Abel: Lenguaje ensamblador
- Peter Norton: Lenguaje ensamblador
Autor:
Oscar Efraín Ramos Ponce
Alumno de Ingeniería Electrónica
Universidad Católica de Santa María – Arequipa – Perú