Está en la página 1de 77

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

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

3
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 11000001 X BINARIO

-83 10101101 X EL NEGATIVO-83

01101110 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.

2+ 1x161+15x160=3x256+16+15=768+31= 79910.
31f 16 =3x16

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
7 B
1 6A
161 10

MICROPROCESADOR (PROECESADOR)

8086/80186.- Registro de 16 bits y bus de datos de 16 vista,


5
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.

S E G. DE C O D I G O

720896-786431 S E G. DE D A T O S
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

PROGRAMA *SEGMENTO DE DATOS(DS)---DECLAR DE VARIABLES

*SEGMENTO DE PILA(SS)----PILAS

BYTE ALTO NIVEL , BYTE BAJO NIVEL


6
04

01

01 04

Direccionamiento: se le llama al proceso de cómo se guarda la


información en la RAN

LIMITES Y SEGMENTOS

SEGMENTOCODIGO
DE PILA
64K SS
DIR
SEGMENTO DE
SS
DATOS
DIR
64K DS DS
SEGMENTOS DE
CS DIR

64K

DIRECCION DE MEMORIA

SEGMENTOS DE DATOS

Edad dpb(1 byte)

Sueldo da(2 bits tipo de palabra )

Núm. dpb cup(30)

Días da(2 bytes)


7
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

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

8
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

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
9
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
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.

10
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 ,
á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

11
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
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


12
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

NOMBRE OPERACIÓN OPERANDO CONVENTARIO

Nom segmento SEGMENT PARA `code`

Nom proc PROC FAR

Nom proc ENOP

Nom segment ENDS

13
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 ;

EXTRUCTURA DE UN PROGRAMA EN ENSAMBLADOR

PAGE 60,132

TITLE pro01 estructura de un programa

14
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

`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

::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

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


15
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.

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.

16
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”

cad4 dpb `Mis PC” S son Intel`

CONJUNTO DE INSTRUCCIONES DEL PROCESADOR

PAG 88,89,90,91….92

17
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.

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

18
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

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.

19
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

Num1 num2

20 25 ………

OFPSET: calcula el despalzamiento

Mov BX

20
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

Num1 dpb?

Num 2 dw?

…..

Mov AX ,25

MOV NUM1, 25

MOV AX, CA

21
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.

Mov ax, bx 8bits -------16bits

Mov ah, bl byte---------palabra

Mov ah, bx 16 bits------32 bits

Palabra-------palabra doble

22
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 ?

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:
23
[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

Mov ax, datos

mov ds, ax

lea bx cod1

lea si, cod2

mov al,[bx] ; mover la letra I

mov [si],a/
24
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

Terminamos el capitulo 6 .

I T S L V I T V V V

BX BX SI SI

25
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

lea Di,nomcom

a10: mov al[bx]

mov [Di],al

loop a10

inc Di

mov cx,6

26
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:

Nom db “juan”

Ape db “perez”

Nomcom db 10 dup ('0')

======================================================================

pag 60,132
27
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],al

inc bx

inc di

mov al,[bx]; mover la letra U

mov [di],al

inc bx

inc si

inc di

28
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],al

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

29
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 ends

codigosg segment para 'code'

inicio proc far

assume ss:pilasg,ds:datosg,cs:codigosg

mov ax,datosg

mov ds,ax

lea bx,cad1

30
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

mov al,[bx]

mov [di],al;se movio V

mov ax,4c00h

int 21h

inicio endp

codigosg ends

31
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.

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

32
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

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.

33
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

mov des, ax

mov cx,5

lea bx,cad1

lea si, cad2

a10:

mov ah,[bx]

mov [si],ah

34
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 ('')

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

35
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 ends

end begin

===============================================================

page 60,132

title prog07 instruccion loop

stacksg segment para stack 'stack'

dw 32 dup (0)

pilasg ends

datosg segment para 'data'

36
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 a10

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

37
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

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=


38
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
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

39
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

;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:


40
.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.

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

41
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.

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


42
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.

24

79

Colocación del cursor

Mov Ah, 02h; peticion para colocar el cursor

Mov Bh , 00; numero de paginas 0

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

43
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

=======================================================================

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
44
;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 programa

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

45
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,02h

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

46
;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

.data

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

47
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,men2

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

48
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 a40

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

49
.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 10h

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

50
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 '*','$'

.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

51
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 endp

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

52
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 10h

;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

53
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 a10

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

54
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.

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

55
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

.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
56
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,men1

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

57
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

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','$'
58
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

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

59
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 men2

int 21h
.

;colocar

mov ah,02h

mov bh,8

mov dl,30

int 10h

;imprimir

mov ah,09h

lea dx,men7

int 21h
60
;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

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

61
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;4

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*


62
============================================================
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

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
63
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 21h

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

64
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:

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

65
============================================================
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

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


66
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 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

67
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

.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

68
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 men1

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
69
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

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

70
lea dx,cadena

int 21h

endm

marco macro x1,y1,x2,y2

local b10

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

71
gotoxy x2,y1

printf esqsd

gotoxy x1,y2

printf esqii

gotoxy x2,y2

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 '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 ?

72
campo db 3 dup('')

.code

begin proc far

iniciar

a10:

clrscr 0000,184fh,71h

call menu

scanf opc

lea bx,campo

mov al,[bx]

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

73
jne a50

call division

jmp a10

a50:

cmp al,35h ;5

jne a10

mov ax,4c00h

int 21h

begin endp

menu proc near

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

74
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 num2

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]

75
Sum al,bl

Printf [al]

ret

resta endp

multiplicacion proc near

;limpiar pantalla

Clrscr 0000,184fh,71h

Printf men8

Scanf num

Lea bx ,campo02

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

76
Printf men9

Scanf num2

Lea bx,campo2

Mov al, [bx]

Sub Ah,bx

Div campo3

Clrscr 0000,184fh,17h

Printf [Al]

ret

division endp

end begin

77

También podría gustarte