Antologia de Lenguaje Ensamblador
-
Upload
faustino-vazquez-camporro -
Category
Documents
-
view
605 -
download
10
Transcript of Antologia de Lenguaje Ensamblador
UNIDAD I
1.2 El microprocesador
1.3 Interrupciones
1.4 Estructura Programa en Ensamblador
1.4.1 DataSegment
1.4.2 StackSegment
1.4.3 CodeSegment
1.4.4 Instrucciones del programa Ensamblador
1.4.5 Directivas Lenguaje Ensamblador
1.5 Procedimiento Ensamble Enlace y Ejecucion
1.6 Entorno de programacion lenguaje ensamblador
1
1. Introducción
LENGUAJES DE ALTO NIVEL JAVA,NET,PHP,ETC
LENGUAJE ENSAMBLADOR
LENGUAJES DE BAJO NIVEL ENSAMBLADOR
LENGUAJE DE PROGRAMACION COMPILADORE ARCH FUENTE, OBJ, EJECUTABLE
INTERPRETADOS ARCH FUENTE,PAG 1 HTML.
EL PROCESADOR
MEMORIA INTERNA
DIRECCIONMEINTO DE LOCALIDADES
BIT=0 Ó 1.- UNIDAD DE INFORMACION
BYTE: 8 BITS .- almacenamiento
1kilobyte.- 1024 bytes
1 Megabye.-(1024)*(1024)=1048,576bytes
1 Gigabyte.-1024mb=1,073,741,824 byte
BYTES RELACIONADOS
1 BYTE =8BITS(I CARACTER)
PALABRA=2 BYTES(16 BITS)
PALABRA DOBLE= 4 BYTES(32 BITS)
PALABRA CUADRUPLE= 8 BYTES(64 BITS)
PARRAFO=16 BYTES(12 8 BITS)
KILOBYTES=1024 BYTES.
SISTEMAS NUMERICOS
DECIMAL (0,1,2,3,4,5,6,7,8,9,)
2
OCTAL(0,1,2,3,4,5,6,7)
HEXADECIMSL(0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F)
BINARIO(0,1)
EJEMPLOS:
A) CUANTAS LETRAS LE CABEN A,UN CD=750 MG
R= 786,432,000 BYTES
B) UN DVD=7.7GB
R=50,46,586,573 BYTES
DECIMAL A BINARIO
A=65D= 1000001
2/65=1, 2/32=0, 2/16=0, 2/8=0, 2/4=0, 2/2=1
2/217=1, 2/108=0, 2/54=0, 2/27=1, 2/13=1, 2/6=0, 2/3=1
B)129D=11011001B
2/126=1 ,2/64=0, 2/32=0, 2/16=0, 2/8=0, 2/4=0 , 2/2=0
C)68D= 1000100B
2/68=0, 2/34=0, 2/7=1, 2/8=0, 2/4=0 2/2=0
BINARIO DECIMAL
101011=43D
3
1 0 1 0 1 1
2₅ 2₄ 2₃ 2₂ 2₁ 2₀
32 16 8 4 2 1
32 0 8 0 2 1=99
B)1100011=99D
C)1000100=68D
D)10101110=174D
SUMA BINARIA
64
+128
192
0 1 0 0 0 0 0 0
1 0 0 0 0 0 0 0
1 1 0 0 0 0 0 0
RESTA BINARIO
193 1 1 0 0 0 0 0 1 X BINARIO
-83 1 0 1 0 1 1 0 1 X EL NEGATIVO-83
0 1 1 0 1 1 1 0 SUMAMOS
1.-COMO CONVERTIR DE DECIMAL A HEXADECIMAL
En la conversion de una magnitud decimal a hexadecimal se realizan sucesivos por 16 hasta obtener un cociente de 0.
Los resultados forman el numero hexadecimal equivalente, siendo el ultimo residuo mas siginificativo y el primero al en numero significativo.
19/13=13, 16/116, 16/7=0,
186910 es de 74 16
2.-COMO CONVERTIR DE HEXADECIMAL A DECIMAL
4
En el sistema cada digito tiene asociado un peso equivalente a una potencia 16 , entonces se multiplica el valor decimal del digito correspondiente por el respectivo peso y realizar las suma de los productos.
Ejemplo: convertitr el numero 3116 a Decimal.
31f 16 =3x16 2+ 1x161+15x160=3x256+16+15=768+31= 79910.
3.- COMO CONVERTIR DE BINARIO A HEXADECIMAL
El método consiste en forma 4 bits hacia la izquierda y hacia la derecha del punto que indica las fracciones, hasta cubrir la totalidad del número. Enseguida se convierte cada grupo de número binario de 1 bists
Así equivalente hexadecimal.
10011101010 a hexadecimal.
0100 1110 1010 = 4EA16
4 E A
4.-COMO CONVERTIR DE HEXADECIMAL A BINARIO
La conversión de hexadecimal a binario se facilita por que cada digito hexadecimal se convierte directamente en 4 dígitos binarios equivalentes.
5.-COMO SUMAR EN HEXADECIMAL
La suma es igual que una suma ordinaria solo que si el resultado no esta entre 0 y 1 ,le tendríamos que restar 16 y llevar 1
7 B 7B16--- 12510----- --CB16=237
C B
1 6 A
MICROPROCESADOR (PROECESADOR)
5
7 B
161 10
8086/80186.- Registro de 16 bits y bus de datos de 16 vista,
80286/80386.-Reegistros de 32 bits y bus de datos de 32 bits.
80486.- Pentium .Registros de 32 bits y bus de datos de 64 bits.(Intel 64)
M. RAM.- se guarda todo lo que propagamos que ejecutamos
SWAP.-se le llama al proceso de mover procesos ala memoria.
720896-786431
655360-720895
655360-720895
589254-655359
524258-589823
45872-524287
393126-458751
327680-393215
262144-329679
196908-262143
65536-146607
0------65535 0 1 2 3 4 5 6 7 8
65535
SEGMENTO Y DIRECCIONAMIENTO(VARIABLES)
*SEGMENTO DE CODIGO(CS)----- CODIGO DE PROG
6
S E G. DE C O D I G O
S E G. DE D A T O S
PROGRAMA *SEGMENTO DE DATOS(DS)---DECLAR DE VARIABLES
*SEGMENTO DE PILA(SS)----PILAS
BYTE ALTO NIVEL , BYTE BAJO NIVEL
01
Direccionamiento: se le llama al proceso de cómo se guarda la información en la RAN
LIMITES Y SEGMENTOS
64K SS
SS
64K DS DS
CS
64K
DIRECCION DE MEMORIA
SEGMENTOS DE DATOS
Edad dpb(1 byte)
Sueldo da(2 bits tipo de palabra )
7
04
01 04
SEGMENTOCODIGO DE PILA
SEGMENTO DE DATOS
SEGMENTOS DE
DIR
DIR
DIR
Núm. dpb cup(30)
Días da(2 bytes)
REGISTRO DEL SEGEMENTO 917505
+ DESPLAZAMIENTO 32
DIRECCION DE MEMORIA REAL 917537
A) REGISTROS DE SEGEMENTOS: Sirven para guardar la dirección del reg. del segmento tiene 16 bits de longitud y facilita una área de memoria para direccionamiento conocida como el segmento actual.
Registro CS.- En DOS almacena la dirección inicial del segmento de código de un programa en el registro Cs, esta dirección de segmentos,+ 1 valor de desplazamiento en el registro de un apuntador de instrucción (IP)indica dirección, de una instrucción que es buscada para su ejecución
Registro Ds: la dirección inicial de un segmento de datos de programa es almacenada en el reg Ds.
Registro SS: permite la colocación en memoria de una pila, para el almacenamiento temporal de direcciones y datos (el sistema operativo de disco)almacena la dirección de inicio , del seg de pilas de un programa en el reg ss, esta dirección de segmento + un valor de desplazamiento de una instrucción ,genera una referencia , en el reg del apuntador de la pila (sp)indica la palabra actual en la fila, que esta siendo direccionada.
Registros ES: Algunas operaciones con cadenas de caracteres , utilizan el reg extra de seg para manejar el direccionamiento de memoria , en este contexto , el reg(ES) esta asociado, con el reg (DI)
B) REGISTRO DE APUNTADOR DE INSTRUCCIONES IP(CODIGOS)
REGISTRO CS 25A40H
+ DESPLAZAMIENTO (IP) 412H
DIRECCION DEL SEG. INSTRUCCIÓN. 25E5H
8
C) REGISTRO DE APUNTADORES : Los registros SP(apuntador de pila)y bp(apuntador base)están asociadas con el registro SS y permiten al sistema accesar datos en el segmento de la pila
Registro SP: El apuntador de la pila de 16 bits esta asociada con el registro SS y proporciona un valor de desplazamiento que se refiere ala palabra actual que esta procesada en la pila.
Reg. SS 27B30H
+ DESPLAZAMIENTO (SP) 312H
Dirección. de memoria del 27E42H
Ultimo dato almacenado en la pila
Ejemplo:
Dirección de memoria 27E42H
15 30 30 34 64 15 9 42 125 78 …
27B30H desplazamiento (SP) 312h
(Reg.SS)
D) REGISTRO DE BP : El bp de 16 bits , facilita la referencia de parámetros los cuales son los datos y direcciones transmitidos a vía pila.
Para corriente de bits , hacia la R o hacia la L
CH CL
REGISTRO DX: El dx es conocido como el registro de datos , algunas operaciones de multiplicación x división con cifras grandes suponen
Al DX Y al AX, trabajando juntos
DH DL
9
E) REGISTROS DE INDICE: Los registros SI y DI están disponibles para direccionamiento indexado y para sumas y restas.
Registro SI : el registro índice fuente de 16 bits es requerido por algunas operaciones con cadenas .en este contexto, el SI esta asociado con el registro DS
Registro DI: el registro índice destino también es requerido para algunas operaciones con cadenas de caracteres . en este contexto el DI esta asociado con el registro ES
F)REGISTRO DE BANDERAS:
De los 16 bits del registro de banderas , 9 son comunes o toda la familia de procesadores 80/86, y sirven para indicar el estado actual de la maquina y el resultado del procesamiento . E n resumen los bits de las banderas son como sigue:
OF(OVERFLOW ,desbordamiento)
DF:(Direction)
IF:(Interruption)
TF:(Trampa)
SF: (Signo)
ZF: (Cero)
AF(Acarreo auxiliar)
PF(Paridad)
CF(Acre)
OF OF IF TF SF ZF AF PF CF
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
Registry =16 bits =2 bytes 0 ò 1
Comentarios en Lenguaje ensamblador: el uso de comentarios al largo de un programa puede mejorarse claridad, en especial en L.E , donde el propósito de un conjunto de instrucciones con frecuencia no es clara . un comentario empieza con; Y , en donde quiera que lo codifiquen , el ensamblador supone que en todo los caracteres
10
ala R en línea son comentarios .Un comentario puede contener cualquier carácter imprimible incluyendo el espacio en blanco.
Ejemplo toda esta línea es un comentario ADD,AX,BX; comentario en la misma línea.
Palabras Reservadas: Ciertas palabras en L.E están reservadas para sus propósitos propios y son usadas solo bajo condiciones especiales.
Instrucciones; como MOV Y ADD; que son operaciones que la computadora puede ejecutar.
Directivas: como END O SEGMENT, que se emplean para proporcionar comandos en ensamblador
Operadores como FAR Y SIZE, que se utilizan en expresiones
Símbolos predefinidos: como @DATA Y @MODEL, que regresa información a su programa.
INSTRUCCIONES
Un programa de lenguaje ensamblador consiste en un conjunto de enunciados . los 2 tipos de enunciados son:
1.- INSTRUCCIONES, tal como MOV Y ADD que el ensamblador traduce a código objeto:Directivas que indican ensamblador que realice una acción especifica, como definir un elemento de dato, el formato general del enunciado es :
[identificador]operación [operandos (s)][; comentarios]
Ejemplos
Directiva: contador dpb 1; Declaración de variable.
Instrucción mov Ax,0; Operación, 2 operadnos
IDENTIFICADOR: El termino nombre se aplica al nombre de un elemento o directiva definida, mientras que el termino de etiqueta se aplica al nombre de una institución.
OPERACIÓN: La operación , debe ser codificada , es con mayor frecuencia usada para la definición de áreas de dato , una operación tal como db o dw define un campo ,
11
área de trabajo o constante .Para una instrucción como mov o add indica una acción a realizar.
OPERANDO: el operando proporciona información para la operación que actúa sobre sobre el, para un elemento de datos, el operando identifica su valor inicial, para una instrucción, un operando indica en donde realizara la acción .Un operando de una instrucción puede tener una 2 0 mas tal vez ninguna entrada.
DIRECTIVAS
Directivas PAGE : designa el numero máximo de líneas para listar en una pagina y el numero máximo de caracteres en una línea, su formato general es PAGE[longitud][,ancho]
Ejemplo PAGE 60,132
TITLE: Se puede emplear la directiva titile para hacer que un titulo para un programa se imprima en la línea 2 de cada pagina , en el listado del programa
Ejemplo: TITLE prog 01 mi primer programa.
DIRECTIVA SEGMENT
Un programa ensamblado consiste, en uno o más seg. Un segmento de pila define el almacén de la pila, un segmento de datos define los elementos de datos y un segmento de código proporciona un código ejecutable .
Las directivas para definir un segmento, segment, ends tiene el formato siguiente:
FORMATO
NOMBRE OPERACIÓN OPERANDO COMENTARIO
NOMBRE SEGMENT [OPCIONES] ; INICIO EL SEGMENTO
NMOBRE ENDS ; FIN DEL SEGMENTO.
OPCIONES
El enunciado segment define el inicio de un segmento .El nombre del segmento debe estar presente, ser único y cumplir las convenciones para nombres de lenguajes. El enunciado ends indica el final del segmento y contiene el mismo nombre del
12
enunciado segment. El operando de un enunciado segment puede tener 3 tipos de opciones :
Alineación, combinar y clases, codificadas en este formato
NOMBRE OPERACIÓN OPERANDO OPERANDO
NOMBRE SEGMENT Alineación combinar `clase` ; INICIO EL SEGMENTO
NMOBRE ENDS ; FIN DEL SEGMENTO
Tipo alineación.- la entrada alineación indica el limite en que inicia el segmento para el requerimiento típico PARA ,alinea el segmento con el limite de un párrafo, de manera que la dirección inicial es divisible /16 o 10H en ausencia de un operando hace que el ensamblador por omisión tome PARA
Tipo combinar.-la entrada combinar indica si se combina el segmento con otro segmentos cuando son enlazados después de ensamblar(se explica posteriormente en “como enlazar el programa” )los tipos combinar son STACK, CON MON,PUBLIC Y LA EXPRESION AT. Por ejemplo: el segmento de la pila por lo común es definido como
NOMBRE SEGMENT PARA STACK
Puede utilizar public CON MON en donde tenga el propósito de combinar de forma separada programas ensamblados cuando los enlazan .En otros casos donde un programa es combinado con otros puede omitir la opción o codificar NOLE
Tipo clase.- la entrada a clase , encerrada entre apostrofo, es utilizada para agrupar segmentos cuando se enlazan .Se utiliza la clase entre apóstrofos “coden” para el segmento de código “data “ por segmentos de datos y “stack” para el segmento de la pila
Ejemplo:
Pila SEGMENT STACK `Stack`
Pila ENDS
Directiva PROC.- El segmento de código contiene el código ejecutable
De un programa. También tiene 1 o mas procedimientos , definidos con la directiva PROC.Un segmento que tiene solo un procedimiento puede aparecer como sigue :
Directiva PRO
FORMATO
13
NOMBRE OPERACIÓN OPERANDO CONVENTARIO
Nom segmento SEGMENT PARA `code`
Nom proc PROC FAR
Nom proc ENOP
Nom segment ENDS
El nombre del procedimiento debe de estar presente, ser único y seguir las reglas para la formación de nombres de lenguaje . el operando FAR en este caso esta relacionado con la ejecución del programa . La directiva ENDP indica la de un procedimiento y contiene el mismo nombre que el enunciado PROC para permitir que el ensamblador relacione a los 2 .
DIRECTIVA ASSUME
Un programa utiliza al registro CS para direccionar la pila, al registro DS para direccionar el segmento de datos y al registro CS para direccionar el segmento de código. Para este pink, usted tiene que indicar al ensamblador el propósito de cada segmento en el programa. La directiva para este propósito es ASSUME codificada en el segmento de código como sigue:
ASSUME SS: nompila,DS:nombsegdatos,CS: nombsegcodigo
Este es en los puntos nompila, significa que el ensamblador asocia el nombre del segmento dela pila con el registro CS y de manera similar con los otros operadnos demostrados .
DIRECTIVA END: la directiva END `NDS`, finaliza un segmento y la directiva ENDP finaliza un procedimiento. Una directiva end finaliza todo el programa .su formato general es :
END nomproc ;
14
EXTRUCTURA DE UN PROGRAMA EN ENSAMBLADOR
PAGE 60,132
TITLE pro01 estructura de un programa
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
`pilaseg SEGMENT PARA STACK `Stack`
……
pilaseg ENDS
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
`datos seg SEGMENT PARA `data`
…..
datosseg ENDS
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
Codigoseg SEGMENT PARA `code`
Inicio PROC FAR
ASUME SS:pilaseg, DS: datosseg, CS:codigoseg
MOV AX,datosseg
MOV DS, AX
……….
MOV AX, 4C00H
INT 21H
Inicio ENDP
Código seg ENDS
END Inicio
15
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
INPT21H : Es una operación de interrupción común del DOS que utiliza un código de función el el registro AH para especificar una acción que será realizada . Las diferentes funciones de IN21H incluye entrada desde el teclado manejo de la pantalla, E- S de disco y salida ah impresora la función que nos interesa aquí es la 4CH que IN21H reconoce como una petición para la terminación de la ejecución de un programa .
Terminar la ejecución de un programa
MOV AH , 4CH
MOV AL, 00H
INT 21H
MOV AX, 4C 00H
21H
DEFINICION DE DATOS.
El ensamblador permite la definición de elementos de varias longitudes, de acuerdo con el conjunto de directivas que defina datos .
por ejemplo, DPB define 1 byte y Da define una palabra , un elemento de dato puede contener un valor indefinido o una constante, definida como una cadena de caracteres o como un valor numérico el formato general es :
FORMATO
{NOMBRE} Dn expresión.
Nombre.-un programa que hace referencia a un elemento de dato lo hace por medio de un nombre.
Directivas.-las directivas que definen elementos de datos son Db(byte),Dw(palabra ), DD(Palabra doble), DF(palabra larga , DQ(palabra cuádruple) y DT(bytes), cada una indica de manera explicita la longitud del elemento definido.
Expresión.- la expresión es un operando que puede contener un signo de interrogación para indicar un elemento no utilizado , como Ejemplo:
NOMBRE] Dn expresión.16
Edad db?
También puede utilizar el operando para definir una constante , como :
Num1 dpb 25.
Una expresión puede contener varios valores constantes , separados por comas ilimitados solo por la longitud de la línea , como sigue:
Num2 db 11 ,12, 13, 14 ,15 ,16 ,17.
El ensamblador define esas constantes en bytes continuos, una referencia a num2 es ala primera constante de 1bytes, 11(puede pensar en el primer bytes como num2+0), y una referencia a num2+1 es ala segunda constante, 12 por ejemplo, la instrucción
...
MOV AL, num2 + 3
Carga en el valor 14 en el registro AL.
También la expresión permite duplicación de constantes en un enunciado de la forma general
[nombre] Dn contador repeticiones CUP (Expresion)
Num3 dw 10 DUP(?)
Num4 dpb 5 DUP(4)
? ? ? ? ?
CADENAS DE CARACTERES:
Son usadas para datos descriptivos como nombre de personas y titulos de paginas .
La cadena esta definida dentro de apóstrofos , como “PC” o dentro de comillas, como “PC”.
DPB es el único formato que define una cadena de caracteres que excede a 2 caracteres y los almacena en la secuencia normal de izquierda a derecha .- Ejemplo:
cad1 Db “ITSLV”
cad2 Db “ITSLV”
cad3 Db “ Mis PC`S son Intel”
17
+
cad4 dpb `Mis PC” S son Intel`
CONJUNTO DE INSTRUCCIONES DEL PROCESADOR
PAG 88,89,90,91….92
Un conjunto de instrucciones o repertorio de instrucciones, juego de instrucciones o ISA (del inglés Instruction Set Architecture, Arquitectura del Conjunto de Instrucciones) es una especificación que detalla las instrucciones que una CPU de un ordenador puede entender y ejecutar, o el conjunto de todos los comandos implementados por un diseño particular de una CPU. El término describe los aspectos del procesador generalmente visibles a un programador, incluyendo los tipos de datos nativos, las instrucciones, los registros, la arquitectura de memoria y las interrupciones, entre otros aspectos.
Existe principalmente de 3 tipos: CISC (Complex Instruction Set Computer), RISC (Reduced Instruction Set Computer) y SISC (Specific Instruction Set Computer).
La arquitectura del conjunto de instrucciones (ISA) se emplea a veces para distinguir este conjunto de características de la microarquitectura, que son los elementos y técnicas que se emplean para implementar el conjunto de instrucciones. Entre estos elementos se encuentras las microinstrucciones y los sistemas de caché.
Procesadores con diferentes diseños internos pueden compartir un conjunto de instrucciones; por ejemplo el Intel Pentium y AMD Athlon implementan versiones casi idénticas del conjunto de instrucciones x86, aunque tienen diseños internos completamente opuestos.
UNIDAD II
INSTRUCCIONES DEL PROCESADOR
OPERANDOS
Un operando es una fuente de datos para una instrucción. Algunas instrucciones como CLC Y RET , No necesitan un operando mientras que otras pueden tener 1 o 2 operandos donde existan 2 operadnos, el segundo es el fuente , que contienen ya sea datos que serán entregados (inmediatos)o bien la dirección de los datos.
18
El dato fuente no es cambiado por la operación .El primer operando es el destino, que contiene datos en un registro o en memoria y que sera procesada
Operación operando1, operando2,
RET
INC CX
MOV AX, MUN1
OPERANDO REGISTRO: El registro proporciona el nombre de alguno de los registros de 8, 16 *32 bits. Dependiendo de la instrucción, el registro puede condificarse en el primero *segundo operadnos, o en ambos .
Num1 da 350
………
Mov cx , num1
Mov num1, Bx
Mov CL, AH
Operandos inmediatos: el formato inmediato, el Segundo operando contiene un valor constante con una expresión constante .El campo destino en el primer operando define la longitud de los datos, y puede ser un registro o una localidad de memoria, ejemplo:
Edad dpb 20
….
Mov edad, 25
ADD C X, 12
OPERANDO DE MEMORIA DIRECTA: En este formato, uno de los operadnos hace referencia a una localidad de memoria y el otro a un registro note que no existe instrucciones que permite que ambos operadnos sean direcciones de memoria. Para el direccionamiento de datos en memoria, el registro DS, es el registro por omisión .
Ejemplo: num1 da 0
19
Num2 db 0
….
Mov AX, num1
Mov Num2, CL
A continuación, un elemento de datos actúa como una dirección de desplazamiento en un operando de instrucción.
ii).- tabla db 25 CUP(?)
…
MOV SL, Tbalax 4 ]
MOV, AL Tablax + 4
d).- OERANDO DE MEMORIA INDIRECTA: El direccionamiento indirecto, es una técnica sufisticada que hace uso de las capacidades de la computadora para el direccionamiento del segmento: desplazamientos. Los registros utilizados para este propósito BX,DI ,SI, Y BP codificados con corchetes como un operador de índice. Bx , DI Y SI están asociados con el registro DS, como DS:VX, DS:DI: DS:SI, para procesamiento de datos en el segmento de datos .el BP esta asociado con el registro SS, como SS:BP, para el manejo de datos en la pila .
Cuando el 1er operando contiene una dirección indirecta, el 2do se refiere a un registro o a un valor inmediato ; cuando el segundo operando contiene una dirección indirecta , el 1ro se refiere a un registro una dirección indirecta tal como [bx]me indica en ensamblador que la dirección de memoria a usar estará en el registro Bx.
Num1 db ?
….
Mov BX, OFFSET num1
Mov [BX] , 25
MOV BX , OFPPSET num2
Mov [BX], 25
MOV BX, 25
20
Num1 num2
20 25 ………
OFPSET: calcula el despalzamiento
Mov BX
NOTA:
EXISTEN 2 FORMAS DE ENTRAR A UN CUADRITO 1.- ES POR EL NOMBRE DE LA VARIABLE Y LA OTRA ES POR EL NUMERO.
LA SIG INSTRUCCIÓN MOV-0 ALA LOCALIDAD QUE SE ENCUENTRA 2 BTYES DESPUES DE NUM2:
NOV [BX+2],0 (DS)
DESPLAZAMIENTODE DIRECCION: Este método utiliza un desplazamiento de dirección para un operando. El código sig mueve el contenido de CL a tabla x( una tabla de 25 bytes); exactamente en donde tabla x esta determinada por el contenido de DI.
Ejemplo:
Tablax db 25 Dup(?)
…..
Mov tablax [DI],CL
INSTRUCCIÓN MOV: La instrucción mov transfiere (esto es, copia )los datos referenciados por la dirección del 2do operando ala dirección del 1er opernado. El campo que se envía permanece sin cambios .los operadnos que hacen referencia a memoria o registros deben coincidir en tamaño . El formato general es :
Formato general
[etiqueta]mov registro/memoria ,registro/memori/inmediato
21
Num1 dpb?
Num 2 dw?
…..
Mov AX ,25
MOV NUM1, 25
MOV AX, CA
MOV NUM1, BH
MOV[SI], AX
MOV BA, NUM 1
INSTRUCCIONES PARA LLEVAR MOVER Y LLENAR
Una limitación de la instrucción mover es que el destino debe ser de la misma longitud que un fuente tal como un bye a byte a una palabra a una palabra.
Las instrucción , mufx y movzx 8mover llenar 9 facilita la transferencia de datos de 1 byte o palabra , fuente a una palabra o palabra doble de destino.
El formato general es:
{etiqueta} MOV SX/MOVZX{REGISTROS},{REGISTRO/MEMORIA/INMEDIATO}
EJ.- mov sx: 1111 1111 1011 0000
Mov zx: 0000 0000 1011 0000
MOV SX, (Para uso con valores aritméticos con signo, mueve un 1 bye o palabra doble de destinoy llena con el Y de signo, el ultimo bits ala izquierda del origen).los bits de mas ala izquierda de destino, Mov zx, para uso con valores numéricos sin signo, mueve 1 bye o palabra a una palabra o palabra doble de destino y llena con bits 0 , los bits de mas ala izquierda del destino.
22
Mov ax, bx 8bits -------16bits
Mov ah, bl byte---------palabra
Mov ah, bx 16 bits------32 bits
Palabra-------palabra doble
Instruccion XCHG: la instruccion xchg realize otro tipo de transferencia de datos, pero en lugar de copiar los datos de una localidad a otra, xchg,intercambia los datos.El formato general es:
Formato General:
[Etiqueta]xchg{registro/memoria},{registro/memoria}
Ej
Var1 dw?
…
→
Xchg AL, AH
Xchg Ax, var1
Instrucción LEA:Es útil para inicialicar, un registro con una dirección de desplazamiento .El formato general es:
[etiqueta] LEA{registro/memoria}
Un uso común de LEA es para inicializar un desplazamiento en el registro bx, bi o si para indexar una dirección de memoria ejemplo:
Nombre db “LA VENTA”
Caract db ?
…
23
LEA BX, nombre
Mov caract [Bx]
Instrucción INC Y DEC:
INC Y DEC.- son instrucciones adecuadas para aumentar u disminuir en uno los contenidos de registros y localidades de memoria . el formato general es:
[etiqueta] INC/DEC{registro/memoria}
INC Ax
DEC Contador
Este programa lo único que hace es pasar letra por letra de cad1 y cad2
Ejemplo:
=======================================================================
Page 60,132
Title prog01 operaciones de movimientos
Pilasg segment para stack ‘stack’
Dw 32 du(0)
Pilas ends
Datosg segment para data
Cad1 db ‘ ITSLV’
Cad2 db 5 dup(‘b`)
Datosg ends
Codigo sg segment para ‘code’
Inicio proc far
Assume ss:pilasg, ds:datos,cs:codigosg
24
Mov ax, datos
mov ds, ax
lea bx cod1
lea si, cod2
mov al,[bx] ; mover la letra I
mov [si],a/
inc bxçinc siçmov al, [bx],mover la letra T
mov[si],a/
INC bx
Inc si
Mov al, [bx], mover la letra s
Mov [si],al
Inc bx
Inc si
Mov a/,[bx] ;mover la letra L
Mov [si], al
Inc bx
Inc si
Mov al[bx] ;mover la letra V
Mov [si],al
Mov ax, 4c00h
Int 21h
Inicio endp
Codigosg ends
End inicio
25
Terminamos el capitulo 6 .
I T S L V I T V V V
BX BX SI SI
AH AL
=======================================================================pag 60,142
title 02 copiar nombre completo
.model small
.stack 64
.data
nomb db 'gilbert del carmen'
ape deb 'avalos'
nomcomp cx 25 du('')
.code
begin proc for
mov ax,@data
mov ds,ax
mov cx,18
lea Si,ape
26
T
lea Di,nomcom
a10: mov al[bx]
mov [Di],al
loop a10
inc Di
mov cx,6
a20:
mov ah[Si]
mov[Di,ah
inc Di
inc Si
loop a20
mov ah,00h
lea dx, nombre
int 2,h
mov ax,(00h)
int 2,h
begin ,endp
end begin
======================================================================
EJERCICIO
DESARROLLE UN PROGRAMA donde se tenga una variable para el nombre ,otra para el apellido paterno y una tercer variable donde se almacenara el nombre completo ej:
27
Nom db “juan”
Ape db “perez”
Nomcom db 10 dup ('0')
======================================================================
pag 60,132
title 03 3 variables
pilasg segment para stack 'stack'
dw 32 dup(0)
pilasg ends
datos segment para data
nom db 'Juan'
ape db 'perez'
nom com db 10 dup(0)
Datos ends
codigosg segment para 'num'
inicio proc far
assume ss:pilasg,ds:datosg,cs:codigosg
mov ax, datosg
mov ds,ax
lea bx, nom
lea si, ape
lea di, nomcom
mov al,[bx];mover la letra J
mov[di],al28
inc bx
inc di
mov al,[bx]; mover la letra U
mov [di],al
inc bx
inc si
inc di
mov al[bx];momer la letra A
mov [di],al
inc bx
inc si
inc di
mov al,[bx];mover la letra N
mov [di],al
inc di
inc di
mov al, [si];mover la letra P
mov[di],al
inc si
inc di
mov al, [si];mover la letra e
mov[di],al
inc su
inc di
mov al,[si];mover la letra r
mov[di],al29
inc si
inc di
mov al,[si];mover la letra e
mov[di],al
inc si
inc di
mover al,[si];mover la letra z
mov [di],al
mov ax,4c00h
int 21h
inicio endp
codigosg ends
end-inicio
codigosg ends
end inicio
=======================================================================
Page 60,132
Title prog04 Operaciones de movimientos
pilasg segment para stack 'stack'
dw 32 dup(0)
pilasg ends
datosg segment para'data'
cad1 db 'ITSLV'
cad2 db 5 dup(?)
datosg ends30
codigosg segment para 'code'
inicio proc far
assume ss:pilasg,ds:datosg,cs:codigosg
mov ax,datosg
mov ds,ax
lea bx,cad1
lea di,cad2
mov al,[bx]
mov [di],al;se movio I
inc bx
inc di
mov al,[bx]
mov [di],al;se movio T
inc bx
inc di
mov al,[bx]
mov [di],al;se movio S
inc bx
inc di
mov al,[bx]
mov [di],al;se movio L
inc bx
inc di
31
mov al,[bx]
mov [di],al;se movio V
mov ax,4c00h
int 21h
inicio endp
codigosg ends
end inicio
=====================================================================================
los programas que hemos determinado han sido ejecutados en forma lineal,esto es por una instruccion secuencialmente a continuacion de otra sin embargo ,rara vez un problema programable estan secncillo. La mayoria de los programas constan de varios ciclos, en los que una serie de pasos se repiten hasta alcanzar un resquisito especifico y varias pruebas para determinar que accion se realiza de entre varias posibles.
Resquisitos como estos implican la transferencia de control ala direccion de una instruccion queno sigue de inmediato de la que se esta ejecutamdop actualmente.
Una transferencia de control puede ser hacia adelante ,para ejecutar una serie de pasos nuevosd , o hacia atras para volver a ejecutar los mismos pasos.
Operaciones Operaciones Operaciones Corrimiento
CMP CALL AND SAR/SHR
TEST JMP NOT SAL/SHL
INNN OR RCT/ROL
LOOP X OR RCL/ROL
Direcciones corta cercana y lejana
Una operacion de salto alcanza una direccion corta x medio de un desplazameinto de 1 byte limitada a una distanciade -128 a 127 bytes.
32
Una operacion de salto, alcanza una direccion cercana pormedio de un desplazamiento de una palabra , limitada a una distancia, de -32,768 a 32,767 bytes dentro del msimo segmento y es alcanzada por medio de una direccion de segmento y alcanzada por medio de una direccion de segmento y un desplazamiento ;call es la instruccionj normal para este proposito.
CORTA CERCANA LEJANA
MISMO SEGMENTO MISMO SEGMENTO OTRO SEGMENTO
INSTRUCCION 128 A 127 -32768 A 32767 OTRO SEGMENTO
JMP SI SI SI
JNNN SI NO NO
LOOP SI NO NO
CALL N/A SI SI
ETIQUETAS DE INSTRUCCIONES
Las instrucciones Call y Loop requieren un operando que se requiere ala etiqueta de una Instruccion ; ejemplo:
E tiquetas de Instrucciones ej:
JMP A90
...
A90 MOV AH,00
Istruccion JMP: una instruccion cruzada para la transferencia de control es la instruccion jpm. Un salto incondicional , ya que la operacion transfiere el control bajo caulquier circunstancia.El formato general es:
Intruccion JMP
[etiqueta]JMP direccion-corta,cercan o lejana Ej:
A50
...
JMP A50
33
B) ...
JMP A60 ...AGO ...
La Instruccion Loop: la instruccion jmp provoca un ciclo infinito, pero es mas probable que una rutina realize un ciclo un numero especifico de veces o hasta que se alcanze una condicion particular, la instrucciom “loop” que sirve para este proposito requiere u valor inicial en en registro cx en cada interacion loop de forma automatica, disminuye 1 de cx.
Si el valor en el cx es cero, el control pasa ala instruccion que sigue -, si el valor es el cx no es 0 , el control pasa ala direccion del operando. El formato es :
[etiqueta]loop direccion –corta
Programa ejemp:
=================================================================
Page 60, 132
Title 05 instruccion loop
Pilasg segment para satck 'stack'
dw 32 dup(0)
pilasg ends
datosg segment para data
cad1 de 'ITLSV'
cad2 db 5dup
datosg ends
codigosg segment para code
inicio proc far
assume ss:pilasg,ds:datosg,cs:codigosg
mov ax, datosg
34
mov des, ax
mov cx,5
lea bx,cad1
lea si, cad2
a10:
mov ah,[bx]
mov [si],ah
inc bx
inc si
loop a10
mov ax,4c00h
int 21h
incio endp
codigosg ends
end inicio
=================================================================
page 60,132
title prog06 instruccion loop
stacksg segment para stack 'stack'
dw 32 dup (0)
pilasg ends
datosg segment para 'data'
cad1 db 'JUAN'
cad2 db 'PEREZ'
cad3 db 10 dup ('')35
datasg ends
codesg segment para 'code'
begin proc far
assume ss:stacksg, ds: datasg, cs: codesg
mov ax, datasg
mov ds, ax
mov cx, 4
lea bx, cad1
lea si, cad2
lea di, cad3
a10:
mov al, [bx]
mov [di], al
inc bx
inc di
mov cx, 5
a20:
mov ah, [si]
mov [di], ah
inc si
inc di
b20:
mov ax, 4c00h
int 21h
begin endp
codesg ends36
end begin
===============================================================
page 60,132
title prog07 instruccion loop
stacksg segment para stack 'stack'
dw 32 dup (0)
pilasg ends
datosg segment para 'data'
cad1 db 'ITLSV'
cad2 db 5 dup
datosg ends
codesg segment para 'code'
begin proc far
assume ss:stacksg, ds: datasg, cs: codesg
mov ax, datasg
mov ax,datosg
mov cx, 5
lea bx, cad1
lea si, cad2
add bx,4
a10:
mov al, [bx]
mov [si], al
Dec. bx
inc si
loop a1037
mov ax,4c00h
int 21h
inicio endp
codigosg ends
end inicio
=================================================================
Un dato con signo trata al bit de mas de la izquierda como un signo , endonde 0 es + y 1 es -.Muchos valores ,numericos pueden ser positivos o negativos
Datos con signo y sin signo
a) Sin signo:
7 6 5 4 3 2 1 0
8bits
b) Con sigo:
7 6 5 4 3 2 1 0
Saltos Cons base en datos sin signo:
Simbolo Descripcion Bandera
JE/JZ salta si es =0 salta si es 0 zf
JNE/JNZ salta si no es=0 salta sino es 0 zf
JR/JNBE salta si es>0salta si es < o = cf,zf
JAE/JNB salta si es > 0 salta sino es > cf
38
JB/JNGE salta es >0 salta si no es >0= cf
JBE/JNA salta si es <0 salta si no es > cf,zf.
Saltos con base en datos con signo
Simbolo Descripcion Banderas
JE/JZ salta si es = 0 salta si es 0
JNE/JNZ salta si no es= o salta sino es 0
JG/JNLE salta si es > 0 salta sino es <0=
JGE/JNL salta si es > 0 = o salta sino wa menor
JL/JNGE salta si es mayor 0 salta si no es >
JLE/JNG Salta si no es menor 0 = o salta si es >
Instruccion CMP: la instruccion cmp por lo comun es utilizar para comparar 2 campos de datos , 1 ambos de los cuales estan contenidos en un registro el formato general es:
[etiquet] cmp {REGISTRO/MEMORIA},{REGRISTRO/memoria/inmediato}
El resultado de una operacion cmp afecta las banderas,af,c,f,of,pf,cf,zf, aunque no tienen que probar estas banderas de formas general.
Ej: cmp Bx, 00
1z 850;salta si,Bx es cero
Instrucciones de datos condicional: ensamblador permite usar una variedad de instrucciones de saltos que condicional que transfiere de control dependiendo de las configuraciones en el registro de banderas, X puede comparar 2 campos y despues saltar de acuerdo con los valores de las banderas que las comparacion estable el formato genral es: instrucciones de dato condicional formato general:
[etiqueta] Jnnn direccion –corta
Datos con signo 1 sin signos: el tipo de datos si signos o con signos , sobre los que se realizan las comparaciones o la aritemtica pueden determinar cual es la instrucccion a utilizar un dato sin signo trata todos los bits como
39
bits de datos, ej: tipos son los datos de cadenas de caracteres tal como nombres o direcciones.
Formato general:
.Stack [tamaño]
.dato
.code [nombre]
Cada una de estas directivas hacen que el ensamblador generen el enunciado segment necesario y su correspondiente ends
Los nombres por audicion de los segmentos son data, el tamaño, por adicion de la pila es de 1000 byte el cual tambien puede pasarse por alto.se utilizan estas directivas para identificar, en donde en el programa estan ubicados los 3 segmentos.
Para inicializar la direccion del segmento de datos en el des ds son: mov ,ax,@data
Mov ds, ax
=============================================================
Page 60,132
Title prog08 programa de directivas simplificado
.model small
.stack 64
.data
Num db 100
.code
Inicio proc far
Mov ax, @data
Mov ds, ax
;inicio del programa
Add num, 10
40
;fin del programa
Mov ax, 4c00h
Int 21h
Inicio endp
End inicio.
Directivas simplificada de segmentos: los ensambladores de Microsoft proporcionan algunas formas abreviadas para definir segementos .
El formato general es:
.model modelo-de –memoria
El modelo de mamoria puede ser modelo tiny,small,médium,compact
Los resquisitos de memoria son:
Modelos numero de segmentos de código segmentos de datos.
Tiny * *
Small 1 1
Médium 1 1
Compact 1 mas de 1
large 1 mas de 1
pueden utilizar cualquiera de estos modelos para modelo autonoma; el modelo tiny, esta destinado para uso exclusive de programas .com , los cuales tienen sus datos codigo y pilas en segmento . El modelo small, exige el código fue en segmento. El modelo small exige el código fuera un segmento de 64 k y los datos en otro segmento de 64k; este modelo es considerado para la mayor parte de los programas la directiva .Medium genera de forma automática en el enunciado assumen necesaria.
Las formales generales para los directivas que definen los segmentos de pila, de datos y código.
SALTOS CONDICIONES EN DATOS CON SIGNO.
41
Símbolo Descripcion
JE/JZ salta si es igual o salta si es cero zf
JNE/JNZ salta si no es igual o salta sino es cero zf
JG/JNLE salta si es mayor o salta si no es menor o igual zf 0 sf
IGE/JNL salta si es menor o salta si es mayor o igual, sf o f
JL/JNGE salta si es menor o salta si es mayor o igual, sf o f
JLE/JNG salta si es menor o igual salta sino es mayor zf,sf,of
Pruebas aritméticas especiales
Símbolo Descripción
JS Salta si es el signo es negativo bandera
JNS salta si el signo es positivo provada
JC salta si hay acarreo s.f
JNC salta sino hay acarreo s.f
JO salta si hay desbordamiento c.f
JNO salta sino hay desbordamiento c.f
JP/JPE salta si hay paridad o salta si la paridad es par of
JNP/JPO salta si no hay paridad o salta si la paridad es impar pf
Introduccion al procesamiento en pantalla del teclado
Hasta este punto,nuestros programas han definido datos ya sea en el area de datos o como datos inmediatos, sin embargo, la mayoría de los programas necesitan entradas desde un teclado, disco, raton o modem , proporciona salidas en un formato útil, en la
pantalla, impresora o disco.
42
La introducción(int) interrupción, para la mayoría de los propósitos maneja e/s, los 2 tipos de interrupciones son las funciones de int del bios para manejar la pantalla de int 21h de dos para mostrar salidas en pantalla y aceptar entrada desde el teclado.
Estas funciones solicitan una acción ; para identificar el tipo de operación que la interrupción va a realizar inserte un numero de función en el registro Ah.
La pantalla
La pantalla es una malla de posiciones direccionales como en cualquiera de las cuales se puede colocar el cursor .Un monitor común de video tiene 25 renglones de 80
columnas.
Ubicación en pantalla
Renglón columna renglón columna
Esquina superior izquierda 00 00 00h 00h
Esquina superior derecha 00 79 00h 4fh
Centro de la pantalla 12 39 0ch 27h
Esauina inferior izquierda 24 00 18h 00h
Esquina inferior derecha 24 79 18h 4fh
Colocación del cursor
Es un resquisito común en modo de texto, ya que su posicion determina en donde será desplegado el siguiente carácter ,el modo grafico no permite el uso del cursor la inc 10h es la operación del bios para manejo de la pantalla, y la función 02h en el Ah ,indica la operación que coloca al cursor.
0
24
79
Colocación del cursor
Mov Ah, 02h; peticion para colocar el cursor
Mov Bh , 00; numero de paginas 043
Mov Dh, 05; renglon 05
Mov Dl , 12; columna 12
Int 10h; interrupcion que llama al bios.
Limpiar la pantalla
La función cero 06h de la Int 10h del bios . maneja el borrado o recorrido de la pantalla puede limpiar todo o parte de un despliegue iniciando cualquier localidad de la pantalla y terminarlo en cualquier localidad con numero mayor.
Mov Ax, 06 00h; Ah 06(recorrido)
Mov bh, 71h; atributo ; blanco(7) sobre azul (1)
Mov cx,0000h; esquina superior izquierda renglón; columna
Mov dx, 184fn; esquina inferior derecha renglon; columna
Int 10h; interrupcion que llama al bios.
FUNCIÓN 09H DEL DOS PARA EL DESPLIEGUE EN PANTALLA
Requiere la definición de una cadena de despliegue en el area de datos. La cadena es seguida inmediatamente, por un delimitador de signo de $, el cual utiliza la operación para finalizar el despliegue: ejemplo
cad db 'hola mundo...','$'; cadena para despliegue
coloque la función 09h el en registro Ah, utilize lea para cargar la dirección de la cadena de despliegue en el dx, y emita una instrucción int 21h.
la operación despliega los caracteres de izquierda a derecha y reconoce el final de los datos al encontrar el delimitador de signos de pesos ejemplo:
...
mov ah, 09h
lea dx,cad
int 21h
44
=======================================================================
page 60,132
title prog10 imprimir hola mundo
.model small
.stack 04
.data
Cad db 'hola mundo... ', '$'
.code
Inicio proc far
Mov ax@data
Mov ds,ax
;limpiar pantalla
Mov ax, 0600h
Mov bh , 71h
Mov cx, 0000h
Mov dx, 184fh
Mov 10h
;colocar cursor
Mov ah,o2h
Mov bh,00 ; renglon
Mov dl, 36 ; columna
;imprimir
mov ah,09h
lea dx,cad
int 21h
;fin del programa45
Mov ax, 4c00h
int 21h
inicio endp
end inicio
=======================================================================
page 60,132
title prog 11 “ imprimir si eres mayor de edad”
.model small
.stack 64
.data
edad db 20
men 1
men 1 db 'Eres mayorde edad','$'
men 2 db 'Eres menor de edad ','$'
.code
inicio proc far
mov ax, @data
mov ds,ax
; limpiar
mov ax,0600h
mov bh,71h
mov cx,0000h
mov dx,184fh
int 10h
;colocar cursor
mov ah,02h46
mov bh,00
mov dh,12;renglon
mov dl,30;columna
int 10h
;comparar la edad
cmp edad 18
jb a10
;imprimir
mov ah, 09h
lea dx,men1
int 21h
;imp a20
a10:
mov ah,09h
lea dx,men2
int 21h
a20: mov ax,4c00h
int 21h
inicio endp
end inicio
=======================================================================
pag 60,132
title pag 12 Imprimir si eres seleccionada para chica tec
.model small
.stack 64
.data47
edad db 20
sexo db '70'
estat db '75'
men 1db 'Estas seleccionada para chica Tec ','$'
men 2db 'suerte para la proxima ','$'
.code
inicio proc far
mov ax, @data
mov ds, ax
;limpiar pantalla
mov ax, 0600h
mov bh,71h
mov cx,0000hçmov dx, 184fh
int 10h
;colocar cursor
mov ah, 02h
mov bh,00
mov dh,12;
mov dl,B0;
int 10h
; comparar la edad
cmp edad 18
JAE a10
;imprimir
mov ah,09h
lea dx,men248
int 21h
jmp a40
a10; comparar sexo
cmp sexo, 70
JE a20
;imprimir
mov ah, 09h
lea dx, men2
int 21h
jmp a40
a20;comparar estatura
cmp est,170
JAE a30
;imprimir
mov ah,09h
lea dx, men2
int 21h
Jmp a40
a30; comparar estatura
cmp est,190
JBE a50
;imprimir
mov ah, 09h
lea dx, men2
int 21h
jmp a4049
a50:mov ah, 09h
lea dx, men1
int 21h
a40: mov ax, 4c00h
int 21h
inicio endp
end inicio
=======================================================================
pag 60,132
title prog 13 imprime una linea de asteriscos
.model small
.stack 64
.data
col db 10
lin db 4
car db '*','$'
.code
begin proc far
mov ax,@data
mov ds,ax
;limpiar
mov ax,0600h
mov bh,71h
mov cx,0000h
mov dx, 184 fh
int 10h50
a10: colocar el cursor
mov ah,02h
mov bh,00h
mov dh,lin
mov dl,col
int 10h
;imprimir
mov ah,09h
lea dx,car
int 21h
inc col
cmp col,70
jbe a10
mov ax,4c00h
int 21h
begin endp
end begin
=======================================================================
pag 60,132
title prog 14 imprime una columna de asteriscos
.model small
.stack 64
.data
col db 10
lin db 4
car db '*','$'51
.code
begin proc far
mov ax,@data
mov ds,ax
;limpiar
mov ax,0600h
mov bh,71h
mov cx,0000h
mov dx, 184 fh
int 10h
a10:colocar el cursor
mov ah,02h
mov bh,00h
mov dh,col
int 10h
;imprimir
mov ah,09h
lea dx,car
int 21h
inc lin
cmp lin,20
jbe a10
mov ax,4c00h
int 21h
begin endp52
end begin
=======================================================================
Page 60,132
Title 15 que verifique si una palabra tiene 5 vocales
.model small
.stack 64
.data
cod db 'murcielago'
men1 db 'la palabra si tiene las 5 vocales ','$'
men2 db 'la palabra no tiene las 5 vocales ','$'
a db 0
e db 0
i db 0
o db 0
u db 0
count db 10
.code
begin proc far
mov ax,@data
mov ds,ax
;limpiar pantalla
mov.ax 0600h
mov bh,71h
mov cx,0000dh
mov dx,184fh
int 10h53
;iniciar programa
mov cx,10
lea bx, cad
a10:mov al[bx]
cmp al, 61h;a
jne a20
mov a,1
jmp a60
a20:cmp al 65h;e
jne a30
mov e,1
jmp a60
a30: cmp al,69h;i
jne a40
mov i,1
jmp a60
a40:cmp al 6fh;0
jne a50
mov a,1
jmp a60
a50;
cpm al, 75h;u
jne a60
mov u,1
a60:inc bx
loop a1054
cmp a,1
jne b10
jmp b50
b10: cmp e,1
je b20
jmp b50
b20: cmp i,1
je b30
jmp b50
b30: cmp 0,1
je b40
jmp b50
b40:cmp u,1
je b60
b50:mov ah,09h
lea dx,men2
int 21h
jmp b70
b60: mov ah,09h
lea dx,men1
int 21h
b70:mov ax,4c00h
int 21h
begin endp
end begin.
55
FUNCION 0AH DEL DOS PARA ENTRADA DEL TECLADO
En particular, la función 0ah, de la int 21h para aceptar datos desde el teclado es poderosa.
El area de entrada para los caracteres teclados requiere de una lista de parámetros que contenga los campos especificados que la operación int va a procesar , primero , la interrupcion necesita concer la longitud máxima de los datos de entrada .
El propósito es advertir alos usuarios que tecleen características envía sonidos por la bocina y no acepta caracteres adicionales.
Segundo , la operación envía ala lista de parámetros el numero de bytes que realmente se produjeron , el código que sigue define una lista de parámetros para un area de entrada.
Label
Es una directiva con el tipo de atributo de BYTE que , solo provoca alineación en un limite de byte , el código el leg ensamblador es:
cadena label byte
max long db 20
caract int db?
campo deb 20 Dup(' ')
...
Para colicitar una entrada establezca la función 0ah, en AAH, cargue la dirección de la lista de parámetro (en el ejemplo cadea),
mov , ah, 04h
lea dx,cadena
int 21h
===========================================================
Pag 60,132
title prog 16 leer teclado
.model
56
.stack 64
.data
nombre cabel byte
maxlong db 20
carac int db?
campo db 2¡dup('')
men1 db 'dame tu nombre:','$'
men2 db 'hola','$'
.code
begin proc far
mov ax,@data
mov ds,ax
;limpiar pantalla
mov.ax 0600h
mov bh,71h
mov cx,0000dh
mov dx,184fh
int 10h
;colocar cursor
mov ax,02h
mov ah,10
int dl 20
int 10h
;imprimir
mov ah, 09h
lea dx,men157
int 21h
;leer teclado
mov ah,nombre
int 21h
;remplazar enter por $
mov bh, caracint
mov campo[bx],'$'
;colocar cursor
mov ah,02h
mov bh,00
mov dh,12
mov dl,20
int 10h
;imprimir men2
mov ah,09h
lea dx,men2
int 21h
;imprimir el nombre
mov ah, 09h
lea dx,09h
lea 21h
mov ax,4c00h
int 21h
begin endp
end begin
58
Page 60,132
title prog 17 MENU EN PANTALLA
.model small
.stack 64
.data
men1 db 'menu principal','$'
men2 db '1.suma','$'
men3 db '2.resta','$'
men4 db '3.multiplicacion','$'
men5 db '4.division','$'
men6 db '5.salir','$'
men7 db '6.opcion:','$'
opcion label byte
maxcar db 1
car int db?
campo db 2dup(0)
men8 db '7.entraste ala opcion sumar','$'
men9 db '8. entraste alaopcion restar','$'
men10 db'9.entraste ala opcion multiplicacion','$'
men11db '10.entraste ala opcion division','$'
opc laberl byte
.code
begin proc far
59
mov ax,@data
mov ds,ax
a10;limpiar pantalla
mov.ax 0600h
mov bh,71h
mov cx,0000dh
mov dx,184fh
int 10h
;colocar
mov ax,02h
mov bh,00
mov dl,35
int 10h
;imprimir
mov ah.09h
lea dx,men1
int 21h
;colocar
mov ah,02h
mov bh,00
mov dh,3
mov dl,30
int 10h
;imprimir
mov ah,09h
lea dx men260
int 21h
.
.
.
;colocar
mov ah,02h
mov bh,8
mov dl,30
int 10h
;imprimir
mov ah,09h
lea dx,men7
int 21h
;leer
mov ,9h 0ah
lea dx opc
int 21h
lea bx,campo
mov al,[bx]
;limpiar
mov ax,0600h
mov bh,71h
mov cx,0000h
mov dx,184fh
int 10h
;colocar
61
mov ah,02h
mov bh,00
mov dh,12
mov dl,30
int 10h
cmp al,31h;1
jne a20
mov ah,09h
lea dx,men8
int 21h
jmp a10
a:20
cpm al,32h;2
jne a30
mov ah,09h
lea dx,men9
int 21h
jmp a10
a30:
cmp al, 33h;3
jne a40
mov ah,09h
lea dx,men10
int 21h
jmp a10
a40:cmp al, 34h;462
jne a50
mov ah,09h
lea dx, men 11
int 21h
jmp a10
a50: cpm al,35h;5
jne a10
mov ah,4c00h
int 21h
begin endp
end begi
UNIDAD 3 *MACROS Y PROCEDIMIENTOS*
============================================================
page 60,132
title prog 18 mover asterisco
.model small
.stack 64
.data
car db '*','$'
opc label byte
marca db1
car int db?
campo db2 dup()
col db40
63
ren db12
.code
begin proc far
mov ax,@data
mov ds,ax
a10:
;limpiar
mov ax,04c00h
mov bh,71h
mov cx,0000
mov dx, 184 fh
int 10h
; colocar el cursor
mov ah,02h
mov bh,00
mov dh,men
mov dl,col
int 10h
;imprimir
mov ah,09h
lea dx,car
int 21h
;leer
mov ah,0AH
lea dx, opc
int 21h64
lea bx campo
mov al,[bx]
cmp al, 65;A
jne a20
dec col
cmp col,0
jne a10
mov col,78
jmp a10
a20:
cmp al,68;D
jne a30
inc col
cmp col,79
jne a10
mov col,1
jmp a10
a30;
cmp al,87;W
jne a40
dec ren
cmp ren,0
jne a10
mov ren, 23
jmp a10
a40:65
cmp al, 88;X
jne a50
inc ren
cmp ren,24
jne a10
mov ren,1
jmp a10
a50:
cmp al, 83;S
jne a10
mov ax,4c00h
int 21h
begin endp
end begin
============================================================
Page 60,132
title prog19 Uso de macros
iniciar macro
mov ax,@data
mov ds,ax
endm
finalizar macro
mov ax,4c00h
int 21h
endm
66
clrscr macro esq1,esq2,color
mov ax,0600h
mov bh,color
mov cx,esq1
mov dx,esq2
int 10h
endm
gotoxy macro col,ren
mov ah,02h
mov bh,00
mov dh,ren
mov dl,col
int 10h
endm
printf macro mensaje
mov ah,09h
lea dx,mensaje
int 21h
endm
scanf macro cadena
mov ah,0AH
lea dx,cadena
int 21h
endm
marco macro x1,y1,x2,y2
local b1067
local b20
mov cl,x1
b10:
gotoxy cl,y1
printf carh
gotoxy cl,y2
printf carh
inc cl
cmp cl,x2
jbe b10
mov cl,y1
b20:
gotoxy x1,cl
printf carv
gotoxy x2,cl
printf carv
inc cl
cmp cl,y2
jbe b20
gotoxy x1,y1
printf esqsi
gotoxy x2,y1
printf esqsd
gotoxy x1,y2
printf esqii
gotoxy x2,y268
printf esqid
endm
.model small
.stack 64
.data
carh db 205,'$'
carv db 186,'$'
esqsi db 201,'$'
esqsd db 187,'$'
esqii db 200,'$'
esqid db 188,'$'
men1 db 'INSTITUTO TECNOLOGICO SUPERIOR DE VILLA LA VENTA TABASCO','$'
men2 db 'LENGUAJE ENSAMBLADOR','$'
men3 db 'DAME TU NOMBRE: ','$'
nombre label byte
maxcar db 20
carint db ?
campo db 21 dup('')
.code
begin proc far
iniciar
clrscr 0000,184fh,17h
marco 0,0,79,23
marco 2,2,77,5
gotoxy 20,3
printf men169
gotoxy 30,4
printf men2
gotoxy 10,10
printf men3
scanf nombre
finalizar
begin endp
end begin
page 60,132
title prog20 Uso de procedimientos
iniciar macro
mov ax,@data
mov ds,ax
endm
finalizar macro
mov ax,4c00h
int 21h
endm
clrscr macro esq1,esq2,color
mov ax,0600h
mov bh,color
mov cx,esq1
mov dx,esq2
70
int 10h
endm
gotoxy macro col,ren
mov ah,02h
mov bh,00
mov dh,ren
mov dl,col
int 10h
endm
printf macro mensaje
mov ah,09h
lea dx,mensaje
int 21h
endm
scanf macro cadena
mov ah,0AH
lea dx,cadena
int 21h
endm
marco macro x1,y1,x2,y2
local b10
local b20
mov cl,x1
b10:
gotoxy cl,y1
printf carh71
gotoxy cl,y2
printf carh
inc cl
cmp cl,x2
jbe b10
mov cl,y1
b20:
gotoxy x1,cl
printf carv
gotoxy x2,cl
printf carv
inc cl
cmp cl,y2
jbe b20
gotoxy x1,y1
printf esqsi
gotoxy x2,y1
printf esqsd
gotoxy x1,y2
printf esqii
gotoxy x2,y2
printf esqid
endm
.model small
.stack 64
.data72
carh db 205,'$'
carv db 186,'$'
esqsi db 201,'$'
esqsd db 187,'$'
esqii db 200,'$'
esqid db 188,'$'
men1 db 'MENU PRINCIPAL','$'
men2 db '1.SUMA','$'
men3 db '2.RESTA','$'
men4 db '3.MULTIPLICACION','$'
men5 db '4.DIVISION','$'
men6 db '5.SALIR','$'
men7 db 'OPCION: ','$'
opc label byte
maxcar db 2
carint db ?
campo db 3 dup('')
.code
begin proc far
iniciar
a10:
clrscr 0000,184fh,71h
call menu
scanf opc
lea bx,campo
mov al,[bx]73
cmp al,31h ;1
jne a20
call suma
jmp a10
a20:
cmp al,32h ;2
jne a30
call resta
jmp a10
a30:
cmp al,33h ;3
jne a40
call multiplicacion
jmp a10
a40:
cmp al,34h ;4
jne a50
call division
jmp a10
a50:
cmp al,35h ;5
jne a10
mov ax,4c00h
int 21h
begin endp
menu proc near74
marco 0,0,79,23
gotoxy 35,5
printf men1
gotoxy 30,7
printf men2
gotoxy 30,8
printf men3
gotoxy 30,9
printf men4
gotoxy 30,10
printf men5
gotoxy 30,11
printf men6
gotoxy 30,13
printf men7
menu endp
suma proc near
;limpiar pantalla
Clrscr 0000,184fh,71h
Printf men8
Scanf num
Lea bx ,campo2
Mov al,[bx]
Clrscr 0000,184fh,71h
Printf men9
Scanf num275
Lea bx,campo3
Mov bl,[bx]
Add al,bl
Printf [al]
ret
suma endp
resta proc near
;limpiar pantalla men8
Scanf num
Lea bx,campo 2
Mov al ,[bx]
Clrscr 0000,184fh,71h
Printf men9
Scanf num2
Lea bx,campo2
Mov bl,[bx]
Sum al,bl
Printf [al]
ret
resta endp
multiplicacion proc near
;limpiar pantalla
Clrscr 0000,184fh,71h
Printf men8
Scanf num
Lea bx ,campo0276
Mov al,[bx]
Clrscr 0000,184fh,71h
Printf men9
Scanf num2
Lea bx,campo 2
Mov al, [bx]
Mov campo3
Clrscr 0000,184fh,71h
Printf [Ax]
Multiplicación endp
ret
division proc near
;limpiar pantalla
Clrscr 0000,184fh,71h
Printf men8
Scanf num
Printf men9
Scanf num2
Lea bx,campo2
Mov al, [bx]
Sub Ah,bx
Div campo3
Clrscr 0000,184fh,17h
Printf [Al]
ret
division endp77
end begin
78