PRÁCTICA 1
PRÁCTICA 1
PRÁCTICA 1
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.)