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}- Banderas que afecta: AF, CF, OF, PF, SF y
- ¿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.491A9E:0208 96.44 80.4F E8.53 C3.20 1F.43 E8.41 D7.43
E2.481A9E: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ú