You are on page 1of 14

Fuentes varias e internet

UFPS
Clase

DEBUG

Programa del DOS que es utilizado para probar y depurar programas ejecutables. Es muy til para
escribir programas muy pequeos en lenguaje ensamblador, examinar el contenido de un archivo o
examinar el contenido de memoria.
Para empezar a trabajar en debug dgito la su nombre respectivo y pulso enter, al pulsar la entrada o
archivo ejecutable del DOS aparecer el promt de debug el cual es un guin -.
FUNCIONES PRINCIPALES

Recorrer y modificar la memoria ram


Observar y modificar los registros
Cargar en memoria programas
Ensamblar en memoria directamente un programa
Generar programas a partir de codigo en memoria
Visualizar y modificar el estado del computador (prtos,inform,etc)
Permite ejecutar un programa en modo de paso sencillo (una paso a la vez) de manera que
podamos ver el efecto de cada instruccin sobre las localidades de memoria y los registros.

Caractersticas de Debug
1.
2.
3.
4.

Despliega todo el cdigo de un programa y los datos en formato hexadecimal.


No distingue entre maysculas y minsculas.
Se debe colocar un espacio entre el comando y el parmetro.
Su despliegue consta de tres partes:
(Izquierda) Direccin hexadecimal del ltimo byte de la izquierda que se despliega en forma
segmento:desplazamiento.
(Centro) Representacin hexadecimal del rea desplegada.
(Derecha) Representacin en ASCII de los bytes que contienen caracteres desplegables.

5. Cada lnea desplegada consta de 16 bytes separados en 8 bytes por un guin -.


6. Por cada byte en la lnea se representan por dos caracteres hexadecimales ms un espacio en
blanco.
7. Teclas F1 repite carcter por carcter de la ultima instruccin y F5 la repite toda.

Comandos de DEBUG
Ensamblar

A [Direccin]

Comparar bloques de memoria

C [Direccin de intervalo]

Volcar Desplegar

D [Intervalo]

Escribir Ingresar

E Direccin [Lista]

Esp.I.S Miguel Fabian Robles A.

www.robgon.net

Material Arq del Compt UFPS

Pgina 1

Fuentes varias e internet

UFPS

Llenar localidades memoria con valores

F [Lista de intervalos]

Ir hasta un punto especificado

G [=Direccin] [Direcciones]

Hex Suma y diferencia de 2 HEX

H Valor 1 Valor 2

Entrada

I Puerto

Cargar en memoria

L [Direccin] [Unidad] [1 Sector] [Nmero]

Mover el contenido de memoria

M Direccin de intervalo

Nombre al programa

N [Nombre ruta] [Lista de argumentos]

Salida

0 Bytes de puerto

Proceder a llamar una subrutina

P [-Direccin] [Nmero]

Salir

Registrar mostrar registros

R [Registrar]

Buscar caracteres en memoria

S [Lista de intervalos]

Seguimiento paso a paso

T [-Direccin] [Valor]

Desemsamblar

U [Intervalo]

Escribir un archivo desde debug

W [Direccin] [Unidad] [1 Sector] [Nmero]

Asignar memoria expandida

XA [Nmero de pginas]

Desasignar memoria expandida

XD [Identificador]

Asignar pginas de memoria expandida

XM [Lpgina] [Ppgina] [Identificador]

Mostrar estado de memoria expandida

XS

Ejemplos de DEBUG
1. C:\WINDOWS>debug
-d
Muestra el contenido de memoria a partir del segmento de datos en un desplazamiento de 200H
(6810):(512)
1A9A:0200

AA 0A C0 75 FA 80 3E C0 - D7 00 74 73 E8 68 07 BE

...u..>...ts.h..

1A9A:0210

91 D6 BF 54 CB A0 39 DF - E8 1B 0A E8 FB 09 75 16

...T..9.......u.

1A9A:0220

80 3E 83 CF 00 75 0F BA - 96 80 E8 C3 1F E8 D7 E2

.>...u..........

Esp.I.S Miguel Fabian Robles A.

www.robgon.net

Material Arq del Compt UFPS

Pgina 2

Fuentes varias e internet

UFPS

1A9A:0230

BA B8 7E E9 CF 06 80 3E - 8D CF 00 75 42 E8 F1 03

..~....>...uB...

1A9A:0240

72 10 80 3E 83 CF 00 75 - 36 80 3E C1 D7 00 75 46 r

..>...u6.>...uF

1A9A:0250

EB 2D 80 3E 9C D7 00 75 - 07 80 3E 83 CF 00 74 08

.-.>...u..>...t.

1A9A:0260

C6 06 8E CF 01 E9 CA FE - E8 C4 00 74 86 80 3E C2

...........t..>.

1A9A:0270

D7 00 74 03 E9 1F FF C6 - 06 8E CF 01 E9 17 FF 80

..t.............

2. Una palabra rudimentaria en la BIOS nos explica una indicacin rudimentaria de los dispositivos
instalados.
BIOS
-d 40:10 Localidades en que se encuentra instalados los dispositivos detectados por la BIOS
0040:0010

23 C2 FE 80 02 92 10 A0-00 00 28 00 28 00 30 0B

#.........(.(.0.

0040:0020

3A 34 31 02 30 0B 0D 1C-E0 4F E0 50 E0 50 E0 48

:41.0....O.P.P.H

23C2 es una localidad de memoria para pasarlo a la realidad sebemos invertirlo:


23 C2 = C2 23 en binario es 1100001000100011
1 1

0 1 0 0 0 0 0 1 0 0 0 1 0 portatil

15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
11

0 0 0 0 1 0 0 0 1 0 0 0 1 1 = C2 23

Para la siguiente explicacin nos basamos en:

15,14 (2 bits) Nmeros de puertos paralelos conectados. En el ejemplo es 3


00=0 01=1 10=2 11=3 BIOS maneja 3 estados Normal, EPP, ECP
por eso en el ejemplo nos da resultado 3 puertos
11-9 (3 bits) Nmero de puertos seriales conectados. En el ejemplo es 1
000=0 001=1 010=2 011=3
7,6 (2 bits) Nmero de dispositivos de disco flexible. En el ejemplo es 0

Esp.I.S Miguel Fabian Robles A.

www.robgon.net

Material Arq del Compt UFPS

Pgina 3

Fuentes varias e internet

UFPS

00=1 01=2 10=3 11=4


5,4 (2 bits) Modo inicial de vdeo. En el ejemplo es 80 x 25 a color.
00 = No usado 01 = 40*25 color 10 = 80*25 color 11= 80*25 Mono
2 Mouse instalado 1= Si En el ejemplo es No=0
1 Coprocesador matemtico presente. En el ejemplo es Si = 1
0 Unidad de disco flexibles presente. En el ejemplo es Si = 1

3. Unas localidades de memoria nos muestra la marca, modelo y derechos de autor de la BIOS
como lo es
-d FE00:0 luego de pulsar enter siguen pulsando d y sigue apareciendo toda la informacin
4. Unas localidades de memoria nos muestra la fecha de la BIOS como lo es
-d FFFFF:5
5. Para cambiar el estado del teclado a encendido
Posicin del Bit

76543210

Decimal

Hexadecimal

Insert activa

1 0 0 0 0 0 0 0 = 128 (10) = 80H

Capslock active

0 1 0 0 0 0 0 0 = 64(10) = 40H

Numlock activa

0 0 1 0 0 0 0 0 = 32 (10) = 20H

Scroll Lock active

0 0 0 1 0 0 0 0 = 16 (10) = 10H

Alt presionada

0 0 0 0 1 0 0 0 = 8 (10) = 08H

Ctrl presionada

0 0 0 0 0 1 0 0 = 4 (10) = 04H

Shift izquierdo presionado

0 0 0 0 0 0 1 0 = 2(10) = 02H

Shift derecho presionado

0 0 0 0 0 0 0 0 = 1(10) = 01H

Ejemplos:
-e 40:17 10 Activa el scroll lock
-e 40:17 20 Activa el Num Lock

Esp.I.S Miguel Fabian Robles A.

www.robgon.net

Material Arq del Compt UFPS

Pgina 4

Fuentes varias e internet

UFPS

-e 40:17 40 Activa el Caps Lock


-e 40:17 60 Activa el Num lock y el Caps Lock
-e 40:17 50 Activa el Caps Lock y el Scroll Lock
-e 40:17 00 Desactiva todo
Suma total de valores de combinaciones

Valor de Comb

Insert

Caps

Num

Scroll

Valor de
Comb

F0H

E0H

D0H

C0H

B0H

A0H

09H

08H

Caps

Num

06H

05H

04H

Scroll

03H

02H

01H
X

07H

Insert

00H

ENSAMBLAR EN MEMORIA
Para ensamblar un programa en el Debug se utiliza el comando "a" (assemble); cuando se utiliza este
comando se le puede dar como parametro la direccin donde se desea que se inicie el ensamblado.
Si se omite el parametro el ensamblado se iniciar en la localidad especificada por CS:IP, usualmente
0100H, que es la localidad donde deben iniciar los programas con extensin .COM, y sera la localidad
que utilizaremos debido a que debug solo puede crear este tipo especfico de programas.
Aunque en este momento no es necesario darle un parametro al comando "a" es recomendable hacerlo
para evitar problemas una vez que se haga uso de los registros CS:IP, por lo tanto tecleamos:
-a 0100 [Enter] debido a que el CS contiene 0C1B
Al hacer sto aparecer en la pantalla algo como: 0C1B:0100 y el cursor se posiciona a la derecha de
estos nmeros, ntese que los primeros cuatro dgitos (en sistema hexadecimal) pueden ser diferentes,
pero los ltimos cuatro deben ser 0100, ya que es la direccin que indicamos como inicio. Ahora
podemos introducir las instrucciones:
0C1B:0100 mov ax,0002

; coloca el valor 0002 en el registro ax

Esp.I.S Miguel Fabian Robles A.

www.robgon.net

Material Arq del Compt UFPS

Pgina 5

Fuentes varias e internet

UFPS

0C1B:0103 mov bx,0004

; coloca el valor 0004 en el registro bx

0C1B:0106 add ax,bx

; le adiciona al contenido de ax el contenido de bx

0C1B:0108 int 20;

provoca la terminacin del programa y se vuelve al prompt del debug

0C1B:010A
Int 20 No es una instruccin de ensamblador, es una llamada a una interrupcin del sistema operativo.
Para ejecutar el programa que escribimos se utliza el comando "g" (Correr el programa en memoria),
al utilizarlo veremos que aparece un mensaje que dice: "Program terminated normally". Naturalmente
con un mensaje como ste no podemos estar seguros que el programa haya hecho la suma, pero existe
una forma sencilla de verificarlo, utilizando el comando "r" del Debug podemos ver los contenidos de
todos los registros del procesador, simplemente teclee:
- r [Enter]
AX=0006 BX=0004 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000
DS=0C1B ES=0C1B SS=0C1B CS=0C1B IP=010A NV UP EI PL NZ NA PO NC
0C1B:010A 0F DB oF
-g 108, esta instruccin ejecuta el programa, se detiene en la direccin 108 y muestra los contenidos
de los registros.

GUARDAR Y CARGAR LOS PROGRAMAS


Los pasos a seguir para guardar un programa ya almacenado en la memoria son:

1. Obtener la longitud del programa restando la direccin final de la direccin inicial,


naturalmente en sistema hexadecimal.

2. Darle un nombre al programa y extensin.


3. Poner la longitud del programa en el registro CX.
4. Ordenar al Debug que escriba el programa en el disco.
Al terminar de ensamblar el programa se vera as:
0C1B:0100 mov ax,0002
0C1B:0103 mov bx,0004
0C1B:0106 add ax,bx
0C1B:0108 int 20
0C1B:610A

Esp.I.S Miguel Fabian Robles A.

www.robgon.net

Material Arq del Compt UFPS

Pgina 6

Fuentes varias e internet

UFPS

- h 10a 100 ; h obtener la longitud programa donde se hace: dir. final y luego dir. inicial
020A 000A ; resultado del comando anterior donde es: rta de suma y rta resta de las 2 dir anterior.
- n virus.com ; n nos permite colocarle un nombre al programa
- r CX ;cambio el valor del registro CX por el obtenido en el tamao del comando h 000A CX
0000:000A
Nota: Muchas veces toca observar los registros BX y DX para tambin colocarlos en Cero por si
tienen algn valor, pues l Debug toma a uno de estos dos registros como parte alta del CX.
-w ; w escribe el programa en el disco y nos indica cuantos bytes escribio. El programa queda
almacenado en el directorio en D.O.S. que nos encontremos ubicados.
Writing 000A bytes

Para cargar un archivo ya guardado son necesarios dos pasos:


Proporcionar el nombre del archivo que se cargar. Cargarlo utilizando el comando "l" (load).
- n prueba.com ; n coloca el nombre de prueba.com
- l ; l carga programa
- u 100 109 ; u verificar que el programa se cargo en memoria (desensambla para mostrarlo) siempre
se cargan a partir de la direccin 100H
0C3D:0100 B80200 MOV AX,0002
0C3D:0103 BB0400 MOV BX,0004
0C3D:0106 01D8 ADD AX,BX
0C3D:0108 CD20 INT 20
EJERCICIOS
1. Explicacin de la Interrupcin INT 21 para obtener datos de la BIOS
-a 0100
1A9A:0100 Mov AH,2A EN LA PROXIMA INSTRUCCION EL IP AUMENTO EN 2
1A9A:0102 INT21
1A9A:0104 NOP
Ejecutemos -r para observar los contenidos de los registros y ejecutemos el paso a paso pero con -p
La fecha de la BIOS se nos da de la siguiente manera:
AL: Da de la semana donde 0= domingo

Esp.I.S Miguel Fabian Robles A.

www.robgon.net

Material Arq del Compt UFPS

Pgina 7

Fuentes varias e internet

UFPS

CX: Ao en HEX
DH: Mes 01 al 12
DL: Dia 01 al 31
2. Ejercicios de sumas y restas, e incrementos y decrementos
MOV AX,FFEE
MOV BX,45BC
MOV CX,AX
INC CX
DEC BX
ADD AX,BX
MOV DX,AX
SUB CX,0001
MOV AX,CX
ADD BX,0001
NOP ; Al final de los valores deben quedar igual AX,BX y CX que al inicio del programa.
3. Ejercicio de Pila
MOV AX,8BCF
ADD BX,0002
INC AX
PUSH BX
PUSH AX
INC SP
DEC SP
POP AX
POP BX
MOV CX,BX
NOP
4. Ejemplo de guardar el programa anterior en el disco duro.
1A9A:0100 B8CF8B MOV AX,8BCF
1A9A:0103 83C302 ADD BX,+02
1A9A:0106 40 INC AX
1A9A:0107 53 PUSH BX
1A9A:0108 50 PUSH AX
1A9A:0109 44 INC SP
1A9A:010A 4C DEC SP
1A9A:010B 58 POP AX
1A9A:010C 5B POP BX
1A9A:010D 89D9 MOV CX,BX
1A9A:010F 90 NOP
- h 10F 100
020F 000F

Realizo el calculo del tamao en bytes del programa en memoria.


Retorna la SUMA y RESTA de los valores colocados como parmetros.

- n prueba.com

Defino el nombre para mi archivo

- r CX

Modifico el valor del CX pues es el No. que toma Debug para calcular tamao

Esp.I.S Miguel Fabian Robles A.

www.robgon.net

Material Arq del Compt UFPS

Pgina 8

Fuentes varias e internet


-w

UFPS

Escribo el programa en disco osea genero un archivo

Writing 000F bytes


INSTRUCIONES INICIALES
Instruccin MOV: Transferencia de datos entre celdas de memoria, registros y acumulador.
Sintaxis: MOV Destino,Fuente
Donde Destino es el lugar a donde se movern los datos y fuente es el lugar donde se encuentran
dichos datos.
Los diferentes movimientos de datos permitidos para esta instruccin son:
Direccionamiento de Registro
Copia un byte, palabra o palabra doble a un registro.
Ejemplo: MOV AH,AL

MOV AX,CX

MOV EBX,EDX

Direccionamiento inmediato
Copia un byte, palabra o palabra doble a un registro o localidad de memoria.
Ejemplo: MOV AH,10

MOV AX,A

MOV EDX,22331221H

Direccionamiento directo
Copia un byte, palabra o palabra doble a un registro.
Ejemplo: MOV AX,[ 10H ]

MOV VAT, AX

MOV EDX, [ 23H ]

Direccionamiento indirecto por registro


Copia un byte, palabra o palabra doble entre un registro y la localidad de memoria direccionada por un
registro ndice o base.
Ejemplo: MOV AX,[ BX ]

MOV [ SI ],AX

MOV EDX, [ EDI ]

Direccionamiento base ms ndice


Copia un byte, palabra o palabra doble entre un registro y la localidad de memoria direccionada por un
registro base mas un registro ndice.
Ejemplo: MOV AX,[ BX + SI ]

MOV [ BX + DI ], AX MOV EDX, [ EBX + ESI ]

Direccionamiento relativo al registro


Copia un byte, palabra o palabra doble entre un registro y la localidad de memoria direccionada por un
registro ndice o base ms un desplazamiento.
Ejemplo: MOV AX,[ BX + 2]

MOV [ SI + 4 ],AX

MOV EDX, [ EDI +1]

Ejemplos
MOV AL,AH

Si

Esp.I.S Miguel Fabian Robles A.

MOV AX,CX Si

www.robgon.net

Material Arq del Compt UFPS

Pgina 9

Fuentes varias e internet


MOV EBX,EDX Si
MOV EDX,AL Si
MOV SI,DI
Si
MOV BL,DX No
MOV ES,DS No

UFPS
MOV CX,DH Si
MOV EAX,CX Si
MOV CS,AX No
MOV AX,EDX No
MOV V1,[ SI ] No

Instruccin PUSH: Coloca una palabra en la pila 2 o 4 bytes.


Sintaxis: PUSH fuente
La instruccin PUSH decrementa en dos el valor de SP y luego transfiere el contenido del operando
fuente a la nueva direccin resultante en el registro recin modificado.
El decremento en la direccin se debe a que al agregar valores a la pila sta crece de la direccin
mayor a la direccin menor del segmento, por lo tanto al restarle 2 al valor del registro SP lo que
hacemos es aumentar el tamao de la pila en dos bytes, que es la nica cantidad de informacin que
puede manejar la pila en cada entrada y salida de datos.
Ejemplo: Suposicin SP=FFEE
PUSH AX ; Coloca en el registro de pila el valor de AX y decremento el SP SP=FFEC
PUSH BX ; Coloca en el registro de pila el valor de BX y decremento el SP SP=FFEA
Instruccin POP: Recupera un dato de la pila de 2 bytes o 4 bytes
Sintaxis: POP destino
Esta instruccin transfiere el ltimo valor almacenado en la pila al operando destino, despues
incrementa en dos el registro SP.
Este incremento se debe a que la pila va creciendo desde la direccin mas alta de memoria del
segmento hacia la mas baja, y la pila solo trabaja con palabras (2 bytes), entonces al incrementar en
dos el registro SP realmente se le esta restando dos al tamao real de la pila.
Ejemplo: Suposicin de que el SP= FFEA
POP AX ; Saca del registro de pila el valor de AX e incrementa el SP SP=FFEC
POP BX ; Saca del registro de pila el valor de BX e incrementa el SP SP=FFEE

Ejemplos
PUSH AX
POP AX
PUSHF
PUSHA
POPA
POP CS

Copia a la pila el valor contenido en AX


Saca el valor apuntado por el SP, y lo copia en el registro AX
Copia el estado de las banderas sobre la pila
Copia las palabras registro propsito general, apuntadores e ndices en la pila.
Proceso inverso al anterior.
Instruccin ILEGAL

Instruccin ADD: Adicin de los operandos.

Esp.I.S Miguel Fabian Robles A.

www.robgon.net

Material Arq del Compt UFPS

Pgina 10

Fuentes varias e internet

UFPS
Sintaxis: ADD destino, fuente

Suma los dos operandos y guarda el resultado en el operando destino.

Ejemplo:
MOV AX,0006 ; Mueve al AX el nmero 0006H
MOV BX,0010 ; Mueve al BX el nmero 0010H
ADD AX,BX ; Suma el contenido del AX con el BX y guarda el resultado en AX=0016H
INT 21H ; Finaliza el programa.

Instruccin SUB: Substraccin de operandos.


Sintaxis: SUB destino, fuente
Resta el operando fuente del destino.
Ejemplo:
MOV AX,02E4H ; Mueve al AX el nmero 02E4H
MOV BX,00FFH ; Mueve al BX el nmero 00FFH
SUB AX,BX ; Suma el contenido del AX con el BX y guarda el resultado en AX=01E5H
INT 21H ; Finaliza el programa.

Instruccin DEC: Decrementar el operando


Sintaxis: DEC destino
Esta operacin resta 1 al operando destino y almacena el nuevo valor en el mismo oeprando.
Ejemplo:
MOV AX,4567 ; Mueve al AX el nmero 4567H
MOV BX,1234 ; Mueve al BX el nmero 1234H
DEC AX ; Decrementa el AX en 1 osea el AX=4566H
DEC BX ; Decrementa el BX en 1 osea el BX=1233H

Instruccin INC: Incrementar el operando.


Sintaxis: INC destino
La instruccin suma 1 al operando destino y guarda el resultado en el mismo operando destino.
Ejemplo:
MOV AX,4567 ; Mueve al AX el nmero 4567H
MOV BX,1234 ; Mueve al BX el nmero 1234H
INC AX ; Incrementa el AX en 1 osea el AX=4568H

Esp.I.S Miguel Fabian Robles A.

www.robgon.net

Material Arq del Compt UFPS

Pgina 11

Fuentes varias e internet

UFPS

INC BX ; Incrementa el BX en 1 osea el BX=1235H

Instruccin MOVSX y MOVZX: Se utilizan para complementar las limitaciones de MOV. Permitiendo
mover de un byte a dos y de dos a cuatro sea de una byte a una palabra o de una palabra a una
palabra doble
[ Etiqueta ] MOVS(Z)V [ registro / memoria ], [ registro / memoria / inmediato ]
MOVSX: Para mover valores aritmticos con signo relleno de unos de izquierda a derecha.
MOVZX: Para mover valores sin signo rellena de ceros de izquierda a derecha.
Ejemplo:
Var1 DB 1111b
Var2 DW 10101111b
MOVSX AX,Var1 // Mueve el valor Var1 al AX el cual toma el valor AX=1111 1111
MOVZX EBX,Var2 // Mueve el valor Var2 al EBX el cual toma el valor EBX=0000 0000 1010 1111
MOVSX Var1,AH // Mueve el valor AH a Var1 el cual toma el valor Var1=1111
Instruccin XCHG: Intercambio de los valores de los operandos
Realiza una transferencia de datos diferente a la realizada por MOV Mueve valores copiando del origen
al destino, permitiendo intercambiar los datos del origen al destino y del destino al origen.
Solo se permite su uso para el intercambio de datos entre dos registros y entre registro y memoria.
Por ejemplo:
XCHG AX,CX
XCHG AX,VAR1
XCHG VAR1,BX
Instruccin LEA Load Offset Address : Cargar direccin desplazamiento
Su funcin es la de inicializar un registro con un valor de desplazamiento.
Sintaxis: [ Etiqueta ] LEA [ registro / memoria ]
Ejemplo:
Si suponemos que los valores de los registros son:
AX=0000 BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000
DS=166C ES=166C SS=166C CS=166C IP=0100 NV UP EI PL NZ NA PO NC
166C:0100 BA3986 MOV DX,8639
VAR3=3434
VAR3 DB 1234
LEA AX,VAR3 // Carga la direccin de desplazamiento de VAR3 al AX:3434
MOV BX,[AX] // Mueve el valor de la posicin 3434 que sera 1
MOV CX,[AX+2] // Mueve el valor de la posicin 3436 que sera 3

Esp.I.S Miguel Fabian Robles A.

www.robgon.net

Material Arq del Compt UFPS

Pgina 12

Fuentes varias e internet

UFPS

Valor de las teclas


Insert
Caps Lock
Bloq Num
Scroll Lock

80H
40H
20H
10H

ESTRUCTURA BASICA PARA HACER UN PROGRAMA .EXE


.MODEL SMALL
.386
.STACK 64
.DATA

; modelo de memoria (1 segmento de cdigo 1 segmento de datos)


; directiva para ejecutar instrucciones a 32 bits
; declaracin segment de pila
; declaracin del segmento de datos

; aca van todas las variables


.CODE
holamiamor PROC FAR
MOV AX,@DATA
MOV DS,AX

; declaracin del segmento de cdigo principal


; inicio asociativo segmento de cdigo y de datos
; carga la direccin al segmento de datos

; aca va todo el cdigo del programa

MOV AX,4C00h
INT 21
holamiamor ENDP

; carga de la interrupcin para salir al S.O.


; ejecucin de la interrupcin llamando al valor que est en el AX
;fin del segmento de cdigo

comoestas PROC NEAR

;inicio procedimiento particular

; procedimientos particulares

comoestar ENDP

;fin del procedimiento particular

END

; fin de todo el programa

Programa para cambiar el estado de las teclas


Page 60,120
TITLE programa cambio del estado de las teclas

Esp.I.S Miguel Fabian Robles A.

www.robgon.net

.MODEL SMALL
.STACK 64

Material Arq del Compt UFPS

Pgina 13

Fuentes varias e internet

UFPS
NUM:

.DATA
POS DB 00
VAX DW ?
VALOR DB 0A0H

CMP AL,20H
JE MNUM
JMP SALIR
MINSERT:
MOV DX,0080H
SUB DS:[17H],DX
MOV AL,DS:[17H]
JMP NUM
MNUM:
MOV DX,0020H
SUB DS:[17H],DX
MOV AL,DS:[17H]
SALIR:
POP DS
MOV AX,4C00h
INT 21
BEGIN ENDP
END BEGIN

.CODE
BEGIN PROC FAR
MOV AX,@DATA
MOV DS,AX
PUSH DS
MOV DX,0000H
MOV BX,40H
MOV DS,BX
MOV AL,DS:[17H]
MOV AH,DS:[18H]
INSERT:
CMP AL,0A0H
JE MINSERT

Esp.I.S Miguel Fabian Robles A.

www.robgon.net

Material Arq del Compt UFPS

Pgina 14

You might also like