15.05.2013 Views

PRÁCTICA 1

PRÁCTICA 1

PRÁCTICA 1

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

LENGUAJE ENSAMBLADOR 80386 <strong>PRÁCTICA</strong> 1<br />

1. INTRODUCCIÓN<br />

AUTOR: PROFESOR SALVADOR SAUCEDO FLORES<br />

EDICIÓN: PROFESOR PABLO FUENTES RAMOS<br />

<strong>PRÁCTICA</strong> 1<br />

PROGRAMA PARA EXHIBIR EN PANTALLA<br />

EL CÓDIGO DE BARRIDO DE LA TECLA OPRIMIDA<br />

Mediante el desarrollo de esta práctica se realizará un programa que exhiba en pantalla el<br />

código de barrido de la tecla oprimida. El valor se exhibirá en decimal tanto para las teclas tipo<br />

normal como para las de tipo función. La tecla ESCAPE termina el programa.<br />

En general, cualquier programa puede requerir de algunos de los siguientes operadores y<br />

directivas:<br />

%TITLE Nos sirve para poner un titulo, por ejemplo:<br />

%TITLE "TITULO DE PROGRAMA"<br />

IDEAL Modo de ensamblado.<br />

DOSSEG Esta directiva se usa al principio de cualquier programa para especificar el<br />

orden de los segmentos del programa.<br />

MODEL Especifica el tamaño de la memoria. Ejemplo:<br />

MODEL small ;para programas *.EXE<br />

MODEL tiny ;para programas *.COM<br />

STACK Define el comienzo y tamaño del segmento de la pila.<br />

EQU Sirve para definir el nombre de la cadena. Numéricamente contiene el<br />

resultado de la evaluación de dicha expresión.<br />

DATASEG Define la inicialización del segmento de datos.<br />

CODESEG Define el comienzo del segmento de código que es usado en el<br />

programa.<br />

EXTRN Se usa para definir las rutinas que se usarán, definidas en otros módulos.<br />

DB Se usa para definir una variable tipo byte. Ejemplo:<br />

Nombre DB Expresión<br />

Donde:<br />

Nombre = Nombre de la expresión a usar.<br />

Expresión = Constante, carácter o cadena.<br />

1-1


LENGUAJE ENSAMBLADOR 80386 <strong>PRÁCTICA</strong> 1<br />

2. OBJETIVOS<br />

El alumno aprenderá a:<br />

2.1 Crear una biblioteca, ensamblar programas y crear un programa ejecutable.<br />

2.2 Exhibir letreros en la pantalla.<br />

2.3 Recibir e interpretar cualquier teclazo.<br />

2.4 Convertir valores binarios a ASCII y viceversa.<br />

2.5 Exhibirá el valor del código de barrido de la tecla oprimida.<br />

2.6 Hacer más amigable el programa.<br />

2.7 Depurar un programa con Turbo Debugger.<br />

AUTOR: PROFESOR SALVADOR SAUCEDO FLORES<br />

EDICIÓN: PROFESOR PABLO FUENTES RAMOS<br />

1-2


LENGUAJE ENSAMBLADOR 80386 <strong>PRÁCTICA</strong> 1<br />

3. DESARROLLO<br />

3.1 Procedimientos para empezar una nueva línea y exhibir una cadena de caracteres.<br />

%TITLE "RUTINAS DE ENTRADA/SALIDA DE CADENAS”<br />

IDEAL<br />

DOSSEG<br />

MODEL small<br />

; EQUs<br />

TamBuff EQU 255 ;Máxima longitud de cadena<br />

ASCnulo EQU 0 ;ASCII nulo<br />

rc EQU 13 ;ASCII de retorno de carro<br />

nl EQU 10 ;Ídem para nueva línea<br />

; Estructura del buffer para la cadena en función 0AH de DOS<br />

STRUC EstrBuff<br />

maxlon DB TamBuff ;Máximo tamaño del buffer<br />

cadlon DB 0 ;Largo de cadena<br />

Carac DB TamBuff DUP (?) ;Buffer para LeeCadena<br />

ENDS EstrBuff<br />

DATASEG<br />

Buffer EstrBuff ; Buffer variable para LeeCadena<br />

CODESEG<br />

; De MANCADE.OBJ<br />

%NEWPAG<br />

EXTRN LargoCad:proc<br />

PUBLIC SacaCadena,SacaCadena2,NuevaLinea<br />

AUTOR: PROFESOR SALVADOR SAUCEDO FLORES<br />

EDICIÓN: PROFESOR PABLO FUENTES RAMOS<br />

1-3


LENGUAJE ENSAMBLADOR 80386 <strong>PRÁCTICA</strong> 1<br />

;SacaCadena/SacaCadena2 ESCRIBE CADENA A SALIDA ESTÁNDAR<br />

;<br />

;Entrada: DI = dirección de cadena(s)<br />

; CX = número de caracteres a escribir (sólo SacaCadena2)<br />

;Salida: Cadena cad copiadas al dispositivo de salida estándar<br />

;Registros: CX (sólo para SacaCadena2)<br />

PROC SacaCadena<br />

call LargoCad ;Pone CX = largo de cadena<br />

PROC SacaCadena2 ;Punto alternativo de entrada<br />

@@10:<br />

push ax bx di ;Salva registros a usar<br />

mov bx,07 ;Handle para salida estándar<br />

mov al,[di] ;DS:DX apunta a dirección de cadena<br />

mov ah,0eh ;BIOS escribe a "teletipo"<br />

in 10h ;Llama a DOS (retorna con AX = bytes<br />

inc di<br />

loop @@10 ;escritos)<br />

pop di bx ax ;Repone registros<br />

ENDP SacaCadena2 ;Fin de rutina alternativa<br />

ENDP SacaCadena ;Fin de rutina normal<br />

;NuevaLinea EMPIEZA OTRA LÍNEA EN DISPOSITIVO ESTÁNDAR<br />

;<br />

;Entrada: Ninguna<br />

;Salida: Retorno de carro y nueva línea a la salida<br />

;Registros: AH y DL<br />

PROC NuevaLinea<br />

mov ah,2 ;Rutina de DOS para sacar un carácter<br />

mov dl,rc ;Pone retorno de carro en DL<br />

int 21h ;Manda y exhibe retorno de carro<br />

mov dl,nl ;Pone salta línea en DL<br />

int 21h ;Manda a nueva línea<br />

ENDP NuevaLinea<br />

END ;fin de módulo CADENAS.ASM<br />

El procedimiento SacaCadena llama a otro procedimiento para contar los caracteres de la<br />

cadena a exhibir, este procedimiento nos regresa en CX el número de caracteres a exhibir.<br />

Mediante la interrupción 10H servicio 0EH exhibimos letra por letra. La instrucción LOOP<br />

AUTOR: PROFESOR SALVADOR SAUCEDO FLORES<br />

EDICIÓN: PROFESOR PABLO FUENTES RAMOS<br />

1-4


LENGUAJE ENSAMBLADOR 80386 <strong>PRÁCTICA</strong> 1<br />

regresa a @@10 hasta que el contador CX sea cero.<br />

Con el procedimiento NuevaLinea se exhibe en pantalla un retorno de carro con una<br />

nueva línea. Esto se logra mediante la interrupción 21H, servicio 2.<br />

3.2 Capturar el módulo anterior con el nombre CADENAS.ASM y crear el programa objeto<br />

mediante el siguiente comando.<br />

C>TASM /zi CADENAS<br />

3.3 Crear la biblioteca REM con el programa anterior mediante los comandos siguientes:<br />

C>TLIB /E REM -+CADENAS<br />

3.4 Procedimiento para contar caracteres no nulos en una cadena.<br />

%TITLE "RUTINAS PARA MANIPULAR CADENAS”<br />

IDEAL<br />

DOSSEG<br />

MODEL small<br />

CODESEG<br />

PUBLIC LargoCad<br />

; Hacer ES = DS antes de llamar a estas rutinas.<br />

ASCnulo EQU 0 ;ASCII para terminador<br />

;LargoCad CUENTA CARACTERES NO NULOS EN UNA CADENA<br />

;<br />

;Entrada: DI = dirección de la cadena<br />

;Salida: CX = número de caracteres no nulos en la cadena<br />

;Registros: CX<br />

PROC LargoCad<br />

ENDP LargoCad<br />

AUTOR: PROFESOR SALVADOR SAUCEDO FLORES<br />

EDICIÓN: PROFESOR PABLO FUENTES RAMOS<br />

push ax di ;Salva registros que usa<br />

xor al,a ;Carácter a buscar (nulo)<br />

mov cx,0ffffh ;Máximo 65,535 caracteres<br />

cld ;Auto incrementa DI<br />

repnz scasb ;Barre mientras [DI] 0 y CX0<br />

not cx ;Complemento a 1 de CX<br />

dec cx ;Menos 1, igual a largo de cadena<br />

pop di ax ;Repone registros<br />

ret<br />

END ;Fin de módulo MANCADE.ASM<br />

1-5


LENGUAJE ENSAMBLADOR 80386 <strong>PRÁCTICA</strong> 1<br />

Hacemos el registro AL igual a cero (carácter nulo); en el registro CX colocamos el número<br />

máximo de caracteres. Borramos señalizador de dirección para auto incrementar los<br />

registros SI y DI. Con las instrucciones REPNZ SCASB barremos la cadena hasta encontrar<br />

el carácter nulo, mientras CX irá decrementando, posteriormente decrementamos CX en<br />

uno para que el carácter nulo no se exhiba en pantalla.<br />

3.5 Capturar el módulo con el nombre MANCADE.ASM y ensamblarlo mediante:<br />

C>TASM /zi MANCADE<br />

3.6 Poner en librería el módulo anterior con:<br />

C>TLIB /E REM -+MANCADE<br />

3.7 Procedimientos para verificar y retornar el valor de la tecla oprimida.<br />

%TITLE "RUTINA DE ENTRADA POR EL TECLADO"<br />

; EQUs<br />

IDEAL<br />

DOSSEG<br />

MODEL small<br />

rc EQU 13 ;ASCII del retorno de carro<br />

nl EQU 10 ;ASCII de nueva línea<br />

CODESEG<br />

PUBLIC EsperaTecla, TraeCar<br />

;EsperaTecla VERIFICA SI UNA TECLA HA SIDO OPRIMIDA<br />

;<br />

;Entrada: Ninguna<br />

;Salida: ZF = 0 si hay un carácter para ser leído<br />

; ZF = 1 en caso contrario<br />

;Registros: Sólo el de bandera<br />

PROC EsperaTecla<br />

push ax ;Salva el registro modificar<br />

mov ah,1 ;Función BIOS para verificar<br />

in 16h ;Invoca rutina del BIOS<br />

pop ax ;Repone registro<br />

ENDP EsperaTecla<br />

AUTOR: PROFESOR SALVADOR SAUCEDO FLORES<br />

EDICIÓN: PROFESOR PABLO FUENTES RAMOS<br />

1-6


LENGUAJE ENSAMBLADOR 80386 <strong>PRÁCTICA</strong> 1<br />

;TraeCar RETORNA EL VALOR DE LA TECLA<br />

;<br />

;Entrada: Ninguna<br />

;Salida: ZF = 0 (y AH = 1): AL = carácter ASCII normal<br />

; ZF = 1 (y AH = 0): AL = carácter de control o función<br />

;Registros: AX<br />

PROC TraeCar<br />

xor ah,ah ;Función de BIOS para leer teclazo<br />

in 16h ;Llama al BIOS<br />

or al,al ;El código ASCII es 0 ?<br />

jnz @@10 ;no, brinca fue normal<br />

xchg ah,a ;Hace AH = 0 y AL = código barrido<br />

add al,32 ;Ajusta código a ≥32<br />

jmp short @@20 ;Brinca para salir<br />

@@10:<br />

xor ah,ah ;Inicia AH = 0<br />

cmp al,32 ;El código ASCII es 32 (p.e. Ctrl-A)?<br />

jb @@20 ;sí, brinca<br />

inc ah ;Pone AH = 1, caso normal<br />

@@20:<br />

or ah,ah ;Pone a "0" o "1" en ZF<br />

ret<br />

ENDP TraeCar<br />

END ;Fin del módulo TECLADO.ASM<br />

Con la interrupción 16H, servicio 1, obtenemos el código ASCII de la tecla oprimida, en caso<br />

de no digitar tecla la bandera de 0 se pone a 1.<br />

En el procedimiento TraeCar utilizamos el servicio 0 de la interrupción 16H para obtener en<br />

AX el código de barrido de la tecla oprimida.<br />

3.8 Capturar el módulo anterior con el nombre TECLADO.ASM y ensamblarlo:<br />

C>TASM /zi TECLADO<br />

3.9 Guardarlo en la librería con el comando siguiente:<br />

C>TLIB /E REM -+TECLADO<br />

AUTOR: PROFESOR SALVADOR SAUCEDO FLORES<br />

EDICIÓN: PROFESOR PABLO FUENTES RAMOS<br />

1-7


LENGUAJE ENSAMBLADOR 80386 <strong>PRÁCTICA</strong> 1<br />

3.10 Procedimientos para conversiones.<br />

%TITLE "RUTINAS DE CONVERSIÓN DE BINARIO A ASCII Y VICEVERSA"<br />

; EQUs<br />

IDEAL<br />

DOSSEG<br />

MODEL small<br />

ASCnulo EQU 0 ;ASCII de carácter nulo<br />

%NEWPAG<br />

CODESEG<br />

PUBLIC DigitoHex, NumAsc, BinAscDec<br />

;DigitoHex CONVIERTE VALOR DE 4 BITS A DÍGITO HEXADECIMAL ASCII<br />

;<br />

;Entrada: DL = valor binario (nibble alto = 0)<br />

;Salida: DL = ASCII del dígito hexadecimal equivalente)<br />

;Registros: DL<br />

PROC DigitoHex<br />

@@5:<br />

cmp dl,10 ;DL < 10 (es decir hex 'A')?<br />

jb @@5 ;Sí, brinca<br />

add dl, 'A'-10 ;No, convertir A, B, C, D, E o F<br />

ret<br />

add dl,'0' ;Convierte a dígitos 0 a 9<br />

ret ;Retorna<br />

ENDP DigitoHex<br />

;NumAscr CONVIERTE BINARIO NO SIGNADO A ASCII<br />

;<br />

;Entrada: AX = valor de 16 bits a convertir<br />

; BX = base del resultado (2 = binario, 10 = decimal, 16 = hexadecimal)<br />

; CX = número mínimo de dígitos de salida<br />

; DI = dirección de cadena para resultados<br />

; Si CX = 0 y AX = 0, largo de la cadena es cero<br />

; Si CX = 1 y AX = 0, la cadena tendrá ‘0’<br />

;Salida: Ninguna<br />

;Registros: AX, CX<br />

PROC NumAsc<br />

push dx ;Entrada normal<br />

AUTOR: PROFESOR SALVADOR SAUCEDO FLORES<br />

EDICIÓN: PROFESOR PABLO FUENTES RAMOS<br />

1-8


LENGUAJE ENSAMBLADOR 80386 <strong>PRÁCTICA</strong> 1<br />

push di ;Salva registros<br />

push si<br />

; SI controla los dígitos guardados en la pila<br />

@@10:<br />

@@20:<br />

@@30:<br />

@@40:<br />

xor si,si ;Contador de dígitos a cero<br />

jcxz @@20 ;Si CX = 0 brinca a ponerlo a 1<br />

xor dx,dx ;Extiende AX a 32 bits<br />

div bx ;AX = DX. AX/BX, DX = residuo<br />

call DigitoHex ;Convierte DL a dígito hexadecimal<br />

push dx ;Salva dígito en la pila<br />

inc si ;Cuenta dígitos salvados<br />

loop @@10<br />

inc cx ;Pone CX = 1 por si no se hizo<br />

or ax,ax ;AX = 0? (todos los dígitos)<br />

jnz @@10 ;Si AX > 0 continua la conversión<br />

mov cx,s ;CX = contador de caracteres en pila<br />

jcxz @@40 ;Omite sgte bucle si CX=0000<br />

cld ;Autoincrementa DI en STOSB<br />

pop ax ;Trae siguiente dígito en AL<br />

stosb ;Pone dígito en cadena y avanza DI<br />

loop @@30 ;Repite el bucle<br />

mov [byte di],ASCnulo ;Pone cero al fin de cadena<br />

pop si di dx ;Repone registros<br />

ret ;Regresa<br />

ENDP NumAsc<br />

;BinAscDec CONVIERTE VALOR BINARIO A CADENA ASCII DECIMAL<br />

;<br />

;Entrada: Misma que BinAscHex<br />

;Salida: Ninguna<br />

;Registros: AX, CX (indirectamente)<br />

PROC BinAscDec<br />

push bx ;Salva BX en la pila<br />

mov bx,10 ;Base para conversión<br />

call NumAsc ;Pasa a ASCII<br />

pop bx ;Repone BX<br />

ret ;Regresa a programa fuente<br />

AUTOR: PROFESOR SALVADOR SAUCEDO FLORES<br />

EDICIÓN: PROFESOR PABLO FUENTES RAMOS<br />

1-9


LENGUAJE ENSAMBLADOR 80386 <strong>PRÁCTICA</strong> 1<br />

ENDP BinAscDec<br />

END ; fin de módulo BINASC.ASM<br />

El procedimiento BinAscDec coloca en BX la base de conversión y llama a la subrutina<br />

para hacer la conversión.<br />

El procedimiento NumAsc se encarga de hacer la conversión binaria a decimal.<br />

El contador de dígitos salvados será SI, inicializamos este registro a cero, verificamos que<br />

el registro CX tenga el valor de uno. Limpiamos el registro DX, hacemos la división AX/BX.<br />

En el registro AL se deposita el cociente y en el registro DX el residuo, llamamos al<br />

procedimiento DigitoHex, el cual nos compara el registro DL con el valor 10, si este valor<br />

es menor le añadimos al registro DL 30 (en hexadecimal) para convertirlo en un carácter<br />

numérico ASCII y poder visualizarlo en pantalla, regresamos al procedimiento NumAsc y<br />

salvamos el dígito en la pila, incrementamos registro SI. Con la instrucción LOOP @@10 se<br />

decrementa CX haciéndose cero, incrementamos otra vez CX, verificamos que el registro<br />

AX sea mayor que cero para continuar la conversión.<br />

Cuando el registro AX sea cero movemos lo que hay en el registro SI al contador CX,<br />

borramos la bandera de dirección para autoincrementar registro DI con la instrucción<br />

STOSB salvando dígito por dígito en el registro DI y al final introducimos el carácter nulo.<br />

3.11 Capturar y ensamblar los módulos anteriores con el nombre BINASC.ASM<br />

C>TASM /zi BINASC<br />

3.12 Introducir a la librería los módulos anteriores:<br />

C>TLIB /E REM -+BINASC<br />

3.13 Verificar que los procedimientos anteriores se encuentren en la librería REM mediante el<br />

siguiente comando:<br />

C>TLIB REM,CON<br />

3.14 Capturar el programa fuente. Este programa despliega un saludo y exhibe el valor<br />

decimal de la tecla oprimida.<br />

%TITLE "EXHIBE VALOR DE LAS TECLAS"<br />

; EQUs<br />

IDEAL<br />

DOSSEG<br />

MODEL small<br />

STACK 256<br />

rc EQU 13 ;ASCII del retorno de carro<br />

AUTOR: PROFESOR SALVADOR SAUCEDO FLORES<br />

EDICIÓN: PROFESOR PABLO FUENTES RAMOS<br />

1-10


LENGUAJE ENSAMBLADOR 80386 <strong>PRÁCTICA</strong> 1<br />

nl EQU 10 ;ASCII de nueva línea<br />

DATASEG<br />

ClaveFin DB 0<br />

TeclaNor DB rc,nl," Tecla tipo normal (DEC) : ",0<br />

TeclaFun DB rc,nl," Tecla de función (DEC) : ",0<br />

CadenaNum DB 7 dup (0)<br />

saludo DB rc,nl,"Exhibe valores de las teclas"<br />

DB rc,nl,"Presionar cualquier tecla, o ESC para salir"<br />

DB rc,nl,nl,0<br />

CODESEG<br />

; De BINASC.OBJ<br />

EXTRN BinAscDec:proc<br />

; De CADENAS.OBJ<br />

EXTRN SacaCadena:proc, NuevaLinea:proc<br />

; De TECLADO.OBJ<br />

Inicia:<br />

Repite:<br />

@@10:<br />

EXTRN EsperaTecla:proc, TraeCar:proc<br />

mov ax,@data ;Inicializa DS con<br />

mov ds,ax ;segmento de datos<br />

mov es,ax ;Hace ES = DS<br />

mov di, offset saludo ;Exhibe mensaje de bienvenida<br />

call SacaCadena ;en pantalla<br />

call EsperaTecla ;Espera cualquier teclazo,<br />

jz Repite ;no se oprimió regresa<br />

call TraeCar ;Lee la tecla oprimida<br />

mov di,offset TeclaNor ;Carga sesgo de cadena normal<br />

jnz @@10 ;Brincar si carácter normal<br />

cmp al,27 ;Fue tecla ESCape (1Bh)?<br />

je Salir ;Sí, brinca a la salida<br />

mov di,offset TeclaFun ;Carga sesgo de cadena función<br />

call SacaCadena ;Exhibe tipo de cadena<br />

sub ah,ah ;Convierte AL a valor de 16 bits<br />

mov cx,1<br />

mov di,offset CadenaNum ;Apunta a cadena numérica<br />

call BinAscDec ;Convierte número a cadena<br />

call SacaCadena ;y exhíbelo<br />

AUTOR: PROFESOR SALVADOR SAUCEDO FLORES<br />

EDICIÓN: PROFESOR PABLO FUENTES RAMOS<br />

1-11


LENGUAJE ENSAMBLADOR 80386 <strong>PRÁCTICA</strong> 1<br />

Salir:<br />

call NuevaLinea ;Exhibe línea en pantalla<br />

jmp Repite ;Procesa otra tecla<br />

mov ah,04ch ;Función DOS: Termina programa<br />

mov al,[ClaveFin] ;Regresa código de salida<br />

int 21h<br />

END inicia ;Fin de módulo TECLAS.ASM<br />

3.15 Ensamblar y crear el programa ejecutable mediante los comandos:<br />

C>TASM /zi TECLAS<br />

C>TLINK /v TECLAS,,,REM<br />

Si no se tiene el archivo TLINK, se puede teclear:<br />

C>LINK TECLAS,,,REM<br />

3.16 Ejecutar el programa con el comando.<br />

C>TECLAS<br />

3.17 Este programa se puede depurar con Turbo Debugger mediante el siguiente comando:<br />

C>TD TECLAS.EXE<br />

3.18 Ir a la ventana VIEW, en la opción CPU oprimir enter, hacer más chica la ventana con el<br />

ratón. Con F8 correr un procedimiento, con F7 va paso a paso y con F9 correr el programa.<br />

Analizar la conversión de binario a ASCII decimal, en especial.<br />

4. TAREAS<br />

4.1 Colocar en un cuadro los mensajes.<br />

4.2 Obtener el código ASCII de la tecla oprimida y visualizarlo en pantalla en<br />

hexadecimal. Hacer esto mediante el procedimiento BinAscHex y capturarlo en el<br />

módulo BINASC.ASM.<br />

4.3 Hacer un programa que exhiba en pantalla el juego completo de caracteres ASCII<br />

de IBM (ver página 16).<br />

4.4 Mediante un procedimiento CONFIRMA exhibir un letrero con opción de salida<br />

cuando se oprima la tecla ESC. Guardar el procedimiento en TECLADO.ASM.<br />

4.5 Crear un procedimiento llamado BORRAPAN para borrar la pantalla, guardarlo en<br />

el módulo CADENAS.ASM. Llamar a este procedimiento al salir del programa<br />

TECLAS.<br />

AUTOR: PROFESOR SALVADOR SAUCEDO FLORES<br />

EDICIÓN: PROFESOR PABLO FUENTES RAMOS<br />

1-12


LENGUAJE ENSAMBLADOR 80386 <strong>PRÁCTICA</strong> 1<br />

NOTA: Cuando se hagan modificaciones en un programa hay que ensamblarlo, meterlo a la librería o<br />

crear el ejecutable, según sea el caso.<br />

AUTOR: PROFESOR SALVADOR SAUCEDO FLORES<br />

EDICIÓN: PROFESOR PABLO FUENTES RAMOS<br />

CÓDIGO QUE DEBE REPORTAR EL PROGRAMA<br />

TECLA SOLA + MAYÚS + CTRL + ATL + ALTG<br />

F1<br />

F2<br />

:<br />

F9<br />

F10<br />

Ins<br />

Del<br />

Home<br />

RePag<br />

AvPag<br />

↑<br />

↓<br />

←<br />

→<br />

Fin<br />

Esc<br />

A<br />

B<br />

C<br />

D<br />

E<br />

F<br />

G<br />

H<br />

I<br />

J<br />

K<br />

L<br />

M<br />

N<br />

O<br />

P<br />

Q<br />

R<br />

S<br />

T<br />

U<br />

V<br />

W<br />

Z<br />

Y<br />

Z<br />

0<br />

1<br />

2<br />

3<br />

4<br />

5<br />

6<br />

7<br />

8<br />

9<br />

]<br />

[<br />

ENTER<br />

<<br />

ESPACIO<br />

TAB<br />

RETROCESO<br />

91<br />

92<br />

:<br />

99<br />

100<br />

114<br />

115<br />

103<br />

105<br />

113<br />

104<br />

112<br />

107<br />

109<br />

111<br />

27<br />

97<br />

98<br />

99<br />

100<br />

101<br />

102<br />

103<br />

104<br />

105<br />

106<br />

107<br />

108<br />

109<br />

110<br />

111<br />

112<br />

113<br />

114<br />

115<br />

116<br />

117<br />

118<br />

119<br />

120<br />

121<br />

122<br />

48<br />

49<br />

50<br />

51<br />

52<br />

53<br />

54<br />

55<br />

56<br />

57<br />

93<br />

45<br />

13<br />

60<br />

32<br />

9<br />

8<br />

116<br />

117<br />

:<br />

124<br />

125<br />

(114)<br />

(115)<br />

(103)<br />

(105)<br />

(113)<br />

(104)<br />

(112)<br />

(107)<br />

(109)<br />

(111)<br />

(27)<br />

65<br />

66<br />

67<br />

68<br />

69<br />

70<br />

71<br />

72<br />

73<br />

74<br />

75<br />

76<br />

77<br />

78<br />

79<br />

80<br />

81<br />

82<br />

83<br />

84<br />

85<br />

86<br />

87<br />

88<br />

89<br />

90<br />

41<br />

33 ¡<br />

64 “<br />

35 .<br />

36 $<br />

37 %<br />

94 &<br />

38 /<br />

42 (<br />

40 )<br />

125<br />

95<br />

126<br />

127<br />

:<br />

134<br />

135<br />

-<br />

-<br />

151<br />

164<br />

150<br />

-<br />

-<br />

147<br />

148<br />

149<br />

(27)<br />

1<br />

2<br />

3<br />

4<br />

5<br />

6<br />

7<br />

8<br />

9<br />

10<br />

11<br />

12<br />

13<br />

14<br />

15<br />

16<br />

17<br />

18<br />

19<br />

20<br />

21<br />

22<br />

23<br />

24<br />

25<br />

26<br />

-<br />

-<br />

-<br />

-<br />

-<br />

-<br />

-<br />

-<br />

-<br />

-<br />

29<br />

31<br />

136<br />

137<br />

:<br />

144<br />

145<br />

-<br />

-<br />

-<br />

-<br />

-<br />

-<br />

-<br />

-<br />

-<br />

-<br />

-<br />

62<br />

80<br />

78<br />

64<br />

50<br />

65<br />

66<br />

67<br />

55<br />

68<br />

69<br />

70<br />

82<br />

81<br />

56<br />

57<br />

48<br />

51<br />

63<br />

52<br />

54<br />

79<br />

49<br />

77<br />

53<br />

76<br />

161<br />

152<br />

153<br />

154<br />

155<br />

156<br />

157<br />

158<br />

159<br />

160<br />

-<br />

162<br />

124 ⏐<br />

64 @<br />

35 #<br />

170 ¬<br />

1-13


LENGUAJE ENSAMBLADOR 80386 <strong>PRÁCTICA</strong> 1<br />

AUTOR: PROFESOR SALVADOR SAUCEDO FLORES<br />

EDICIÓN: PROFESOR PABLO FUENTES RAMOS<br />

EJEMPLO DE CORRIDA<br />

Se corrió el programa TECLAS, para cotejar la tabla, dando las siguientes teclas:<br />

a, A, F1, FIN, INS, 8, ↑, ALT-U, #, @, +, CTRL-G, ñ, ), ?, teclas<br />

Exhibe valores de las teclas. Presionar cualquier tecla, o ESC para salir<br />

Tecla tipo normal: 97<br />

Tecla tipo normal: 65<br />

Tecla de función: 91<br />

Tecla de función: 111<br />

Tecla de función: 114<br />

Tecla tipo normal: 56<br />

Tecla de función: 104<br />

Tecla de función: 54<br />

Tecla tipo normal: 35<br />

Tecla tipo normal: 64<br />

Tecla tipo normal: 43<br />

Tecla de función: 7<br />

Tecla tipo normal: 164<br />

Tecla tipo normal: 41<br />

Tecla tipo normal: 63<br />

Tecla tipo normal: 60<br />

Tecla tipo normal: 32<br />

Tecla de función: 13<br />

Tecla de función: 9<br />

Tecla de función: 8<br />

Tecla de función: 10<br />

Tecla de función: 151<br />

Tecla de función: 149<br />

Tecla de función: 152<br />

Tecla de función: 153<br />

Tecla de función: 13<br />

Tecla de función: 8<br />

Tecla de función: 161<br />

Tecla tipo normal: 46<br />

Tecla tipo normal: 44<br />

Tecla tipo normal: 45<br />

Tecla de función: 115<br />

Tecla tipo normal: 38<br />

C:\SEM386><br />

1-14


LENGUAJE ENSAMBLADOR 80386 <strong>PRÁCTICA</strong> 1<br />

AUTOR: PROFESOR SALVADOR SAUCEDO FLORES<br />

EDICIÓN: PROFESOR PABLO FUENTES RAMOS<br />

JUEGO DE CARACTERES ASCII DE IBM<br />

H 0 1 2 3 4 5 6 7 8 9 A B C D E F<br />

0 ☺ ☻ ♥ ♦ ♣ ♠ ● ◘ ○ ◙ ♂ ♀ ♪ ♫ ☼<br />

1 ► ◄ ↕ !! § ▬ ↨ ↑ ↓ → ← ⌐ ↔ ▲ ▼<br />

2 ! " # $ % & ' ( ) * + , - . /<br />

3 0 1 2 3 4 5 6 7 8 9 : ; < = > ?<br />

4 @ A B C D E F G H I J K L M N O<br />

5 P Q R S T U V W X Y Z [ \ ] ^ _<br />

6 ` a b c d e f g h i j k l m n o<br />

7 p q r s t u v w x y z { | } ~ ⌂<br />

8 Ç ü é â ä à å ç ê ë è ï î ì Ä Å<br />

9 É ǽ Ǽ ô ö ò û ù ij Ö Ü Φ £ Ф ƒ<br />

A á í ó ú ñ Ñ ª º ¿ ® ¬ ½ ¼ ¡ « »<br />

B ░ ± ▓ │ ┤ Á Â À © ╣ ║ ╗ ` ¢ ¥ ┐<br />

C └ ┴ ┬ ├ ─ ┼ ã ¤ ╚ ╔ ╩ ╦ ╠ ═ ╬ ¤<br />

D ŏ Đ Ê Ë È ¹ Í Î Ï ┘ ┌ █ ▄ │ Ì ▀<br />

E Ó ß ô ò õ Ô μ þ þ Ú Û Ù ý Ý ¨ ´<br />

F - ± = ¾ § ÷ ¸ º ¨ . ¹ ³ ² ■<br />

1-15


Nombre de archivo: practica 1 ensamblador 80386<br />

Directorio: C:\Computacion V\practicas 80386<br />

Plantilla: C:\WINDOWS\Application<br />

Data\Microsoft\Plantillas\Normal.dot<br />

Título: <strong>PRÁCTICA</strong> 1<br />

Asunto: Prácticas de laboratorio de Computación V<br />

Autor: M. en C. Salvador Saucedo Flores<br />

Palabras clave:<br />

Comentarios:<br />

Fecha de creación: 29/07/02 12:20 P.M.<br />

Cambio número: 13<br />

Guardado el: 31/07/02 10:33 A.M.<br />

Guardado por: Pablo Fuentes Ramos<br />

Tiempo de edición: 392 minutos<br />

Impreso el: 31/07/02 10:33 A.M.<br />

Última impresión completa<br />

Número de páginas: 15<br />

Número de palabras: 2,283 (aprox.)<br />

Número de caracteres: 13,016 (aprox.)

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!