Documentos de Académico
Documentos de Profesional
Documentos de Cultura
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
LENGUAJE ENSAMBLADOR
EL PROCESADOR
MEMORIA INTERNA
DIRECCIONMEINTO DE LOCALIDADES
1 Megabye.-(1024)*(1024)=1048,576bytes
1 Gigabyte.-1024mb=1,073,741,824 byte
BYTES RELACIONADOS
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:
R= 786,432,000 BYTES
B) UN DVD=7.7GB
R=50,46,586,573 BYTES
DECIMAL A BINARIO
A=65D= 1000001
B)129D=11011001B
C)68D= 1000100B
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
01101110 SUMAMOS
Los resultados forman el numero hexadecimal equivalente, siendo el ultimo residuo mas
siginificativo y el primero al en numero significativo.
186910 es de 74 16
2+ 1x161+15x160=3x256+16+15=768+31= 79910.
31f 16 =3x16
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
10011101010 a hexadecimal.
4 E A
La conversión de hexadecimal a binario se facilita por que cada digito hexadecimal se convierte
directamente en 4 dígitos binarios equivalentes.
C B
7 B
1 6A
161 10
MICROPROCESADOR (PROECESADOR)
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
*SEGMENTO DE PILA(SS)----PILAS
01
01 04
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
+ DESPLAZAMIENTO 32
REGISTRO CS 25A40H
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
Ejemplo:
15 30 30 34 64 15 9 42 125 78 …
(Reg.SS)
CH CL
DH DL
F)REGISTRO DE BANDERAS:
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
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.
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 :
Ejemplos
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.
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]
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
DIRECTIVA SEGMENT
Las directivas para definir un segmento, segment, ends tiene el formato siguiente:
FORMATO
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 :
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 ENDS
Directiva PRO
FORMATO
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
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 .
END nomproc ;
PAGE 60,132
14
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
……
pilaseg ENDS
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
…..
datosseg ENDS
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
MOV AX,datosseg
MOV DS, AX
……….
INT 21H
Inicio ENDP
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 .
INT 21H
21H
DEFINICION DE 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.
NOMBRE] Dn expresión.
Edad db?
Una expresión puede contener varios valores constantes , separados por comas
ilimitados solo por la longitud de la línea , como sigue:
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
...
Num3 dw 10 DUP(?)
? ? ? ? ?
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”
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.
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
RET
INC CX
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
Edad dpb 20
….
Mov edad, 25
ADD C X, 12
Ejemplo: num1 da 0
Num2 db 0
….
Mov Num2, CL
19
ii).- tabla db 25 CUP(?)
MOV, AL Tablax + 4
Num1 db ?
….
Mov [BX] , 25
Mov [BX], 25
MOV BX, 25
Num1 num2
20 25 ………
Mov BX
20
NOTA:
Ejemplo:
Tablax db 25 Dup(?)
…..
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
Num1 dpb?
Num 2 dw?
…..
Mov AX ,25
MOV NUM1, 25
MOV AX, CA
21
MOV NUM1, BH
MOV[SI], AX
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.
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
Instrucción LEA:Es útil para inicialicar, un registro con una dirección de desplazamiento
.El formato general es:
[etiqueta] LEA{registro/memoria}
Caract db ?
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
Dw 32 du(0)
Pilas ends
Cad1 db ‘ ITSLV’
Cad2 db 5 dup(‘b`)
Datosg ends
mov ds, ax
lea bx cod1
mov [si],a/
24
inc bxçinc siçmov al, [bx],mover la letra T
mov[si],a/
INC bx
Inc si
Mov [si],al
Inc bx
Inc si
Mov [si], al
Inc bx
Inc si
Mov [si],al
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
.model small
.stack 64
.data
nomcomp cx 25 du('')
.code
mov ax,@data
mov ds,ax
mov cx,18
lea Si,ape
lea Di,nomcom
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
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”
======================================================================
pag 60,132
27
title 03 3 variables
dw 32 dup(0)
pilasg ends
nom db 'Juan'
ape db 'perez'
Datos ends
assume ss:pilasg,ds:datosg,cs:codigosg
mov ds,ax
mov[di],al
inc bx
inc di
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 [di],al
inc di
inc di
mov[di],al
inc si
inc di
mov[di],al
inc su
inc di
mov[di],al
inc si
inc di
mov[di],al
inc si
inc di
29
mov [di],al
mov ax,4c00h
int 21h
inicio endp
codigosg ends
end-inicio
codigosg ends
end inicio
=======================================================================
Page 60,132
dw 32 dup(0)
pilasg ends
cad1 db 'ITSLV'
cad2 db 5 dup(?)
datosg ends
assume ss:pilasg,ds:datosg,cs:codigosg
mov ax,datosg
mov ds,ax
lea bx,cad1
30
lea di,cad2
mov al,[bx]
inc bx
inc di
mov al,[bx]
inc bx
inc di
mov al,[bx]
inc bx
inc di
mov al,[bx]
inc bx
inc di
mov al,[bx]
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.
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.
INNN OR RCT/ROL
LOOP X OR RCL/ROL
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:
JMP A90
...
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
A50
...
JMP A50
B) ...
JMP A60
...
AGO ...
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 :
Programa ejemp:
=================================================================
dw 32 dup(0)
pilasg ends
cad1 de 'ITLSV'
cad2 db 5dup
datosg ends
assume ss:pilasg,ds:datosg,cs:codigosg
mov des, ax
mov cx,5
lea bx,cad1
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
dw 32 dup (0)
pilasg ends
cad1 db 'JUAN'
cad2 db 'PEREZ'
datasg ends
mov ds, ax
mov cx, 4
35
lea si, cad2
a10:
mov [di], al
inc bx
inc di
mov cx, 5
a20:
mov [di], ah
inc si
inc di
b20:
int 21h
begin endp
codesg ends
end begin
===============================================================
page 60,132
dw 32 dup (0)
pilasg ends
36
cad1 db 'ITLSV'
cad2 db 5 dup
datosg ends
mov ax,datosg
mov cx, 5
add bx,4
a10:
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
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]
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.
Mov ds, ax
=============================================================
Page 60,132
.model small
.stack 64
.data
Num db 100
.code
Mov ds, ax
Add num, 10
Int 21h
Inicio endp
End inicio.
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.
Símbolo Descripcion
41
Símbolo Descripción
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
Ubicación en pantalla
24
79
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.
43
Mov dx, 184fn; esquina inferior derecha renglon; columna
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.
...
lea dx,cad
int 21h
=======================================================================
page 60,132
.model small
.stack 04
.data
.code
Mov ax@data
Mov ds,ax
44
;limpiar pantalla
Mov bh , 71h
Mov 10h
;colocar cursor
Mov ah,o2h
;imprimir
mov ah,09h
lea dx,cad
int 21h
int 21h
inicio endp
end inicio
=======================================================================
page 60,132
.model small
.stack 64
.data
edad db 20
45
men 1
.code
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
lea dx,men1
int 21h
46
;imp a20
a10:
mov ah,09h
lea dx,men2
int 21h
int 21h
inicio endp
end inicio
=======================================================================
pag 60,132
.model small
.stack 64
.data
edad db 20
sexo db '70'
estat db '75'
.code
mov ds, ax
;limpiar pantalla
47
mov bh,71h
int 10h
;colocar cursor
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
cmp sexo, 70
JE a20
;imprimir
int 21h
jmp a40
a20;comparar estatura
48
cmp est,170
JAE a30
;imprimir
mov ah,09h
int 21h
Jmp a40
cmp est,190
JBE a50
;imprimir
int 21h
jmp a40
int 21h
int 21h
inicio endp
end inicio
=======================================================================
pag 60,132
.model small
49
.stack 64
.data
col db 10
lin db 4
car db '*','$'
.code
mov ax,@data
mov ds,ax
;limpiar
mov ax,0600h
mov bh,71h
mov cx,0000h
int 10h
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
.model small
.stack 64
.data
col db 10
lin db 4
car db '*','$'
.code
mov ax,@data
mov ds,ax
;limpiar
mov ax,0600h
mov bh,71h
mov cx,0000h
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
.model small
.stack 64
.data
cod db 'murcielago'
a db 0
52
e db 0
i db 0
o db 0
u db 0
count db 10
.code
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
a10:mov al[bx]
jne a20
mov a,1
jmp a60
a20:cmp al 65h;e
jne a30
mov e,1
53
jmp a60
jne a40
mov i,1
jmp a60
a40:cmp al 6fh;0
jne a50
mov a,1
jmp a60
a50;
jne a60
mov u,1
a60:inc bx
loop a10
cmp a,1
jne b10
jmp b50
je b20
jmp b50
je b30
jmp b50
je b40
54
jmp b50
b40:cmp u,1
je b60
b50:mov ah,09h
lea dx,men2
int 21h
jmp b70
lea dx,men1
int 21h
b70:mov ax,4c00h
int 21h
begin endp
end begin.
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.
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:
max long db 20
...
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),
lea dx,cadena
int 21h
===========================================================
Pag 60,132
.model
.stack 64
.data
maxlong db 20
campo db 2¡dup('')
men2 db 'hola','$'
.code
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
lea dx,men1
int 21h
;leer teclado
mov ah,nombre
int 21h
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
lea dx,09h
lea 21h
mov ax,4c00h
int 21h
begin endp
end begin
Page 60,132
.model small
.stack 64
.data
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:','$'
maxcar db 1
campo db 2dup(0)
.code
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
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:
jne a40
mov ah,09h
lea dx,men10
int 21h
jmp a10
jne a50
mov ah,09h
int 21h
jmp a10
jne a10
mov ah,4c00h
int 21h
begin endp
end begi
.model small
.stack 64
.data
car db '*','$'
marca db1
col db40
ren db12
.code
mov ax,@data
mov ds,ax
a10:
;limpiar
mov ax,04c00h
mov bh,71h
mov cx,0000
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
int 21h
lea bx campo
mov al,[bx]
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:
jne a50
inc ren
cmp ren,24
jne a10
mov ren,1
jmp a10
a50:
jne a10
mov ax,4c00h
int 21h
begin endp
end begin
65
============================================================
Page 60,132
iniciar macro
mov ax,@data
mov ds,ax
endm
finalizar macro
mov ax,4c00h
int 21h
endm
mov ax,0600h
mov bh,color
mov cx,esq1
mov dx,esq2
int 10h
endm
mov ah,02h
mov bh,00
mov dh,ren
mov dl,col
int 10h
endm
lea dx,mensaje
int 21h
endm
mov ah,0AH
lea dx,cadena
int 21h
endm
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,'$'
68
maxcar db 20
carint db ?
campo db 21 dup('')
.code
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
iniciar macro
mov ax,@data
mov ds,ax
69
endm
finalizar macro
mov ax,4c00h
int 21h
endm
mov ax,0600h
mov bh,color
mov cx,esq1
mov dx,esq2
int 10h
endm
mov ah,02h
mov bh,00
mov dh,ren
mov dl,col
int 10h
endm
mov ah,09h
lea dx,mensaje
int 21h
endm
mov ah,0AH
70
lea dx,cadena
int 21h
endm
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,'$'
men2 db '1.SUMA','$'
men3 db '2.RESTA','$'
men4 db '3.MULTIPLICACION','$'
men5 db '4.DIVISION','$'
men6 db '5.SALIR','$'
maxcar db 2
carint db ?
72
campo db 3 dup('')
.code
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
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
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
;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 campo3
Clrscr 0000,184fh,71h
Printf [Ax]
Multiplicación endp
ret
;limpiar pantalla
Clrscr 0000,184fh,71h
Printf men8
Scanf num
76
Printf men9
Scanf num2
Lea bx,campo2
Sub Ah,bx
Div campo3
Clrscr 0000,184fh,17h
Printf [Al]
ret
division endp
end begin
77