Professional Documents
Culture Documents
DB O BYTE: Define un byte, dice que la variable es un byte. DB puede contener una cadena de cualquier longitud, hasta el final de la lnea. En trminos nmeros decimales (-128 a 127)
DW o WORD: Define un Word o un array de Word. Una expresin de caracteres DW est limitada a dos caracteres. DW es de uso limitado para la definicin de cadenas. En trminos de nmeros decimales -32768 a 32767
DD o DWORD: Define un DWord, o un array de DWord. Son elementos que tienen longitud de dos palabras. Tambin esta limitada a dos caracteres de forma similar a DW. En trminos de nmeros decimales -2,147,483,648 a 2,147,483,647. DQ o QWORD: Define un QWord (ocho bytes) cuatro palabras. En cuanto al manejo de cadenas es similar a DD o DW. En trminos de nmeros decimales 1,152,921,504,606,846,976. DT o TBYTE: Define 10 Bytes. Su propsito est relacionado con los valores numricos empacados BCD (decimal codificado en binario), que son ms tiles para coprocesadores matemticos que para operaciones aritmticas.
1
Stack (POP, POPF, PUSH, PUSHF): Estas instrucciones proporcionan las localidades para colocar operandos y direcciones y retirarlos del stack.
Conteo (DEC, INC): Instrucciones empleadas para incrementar o decrementar el contenido de los contadores. Comparaciones (CMP, CMPS, CMPSB): Utilizadas para comparar operandos. Afectan el estado de las banderas. Bandera (CLC, CLD, CLI, CMC, etc.): Afectan el estado de las banderas.
JNE /JNZ Salta si no es igual o salta si no es cero JA / JNBE Salta si es mayor o salta si no es menor o si no es igual JAE / JNB Salta si es mayor o igual o salta si no es menor
CF
CF, AF
ZF
ZF, SF, OF SF, OF SF, OF ZF, SF, OF
Modos de direccionamiento
Los modos de direccionamiento indican la manera de obtener los operandos y son:
Direccionamiento de registro Direccionamiento inmediato Direccionamiento directo Direccionamiento indirecto mediante registro Direccionamiento indirecto por registro base Direccionamiento indexado Direccionamiento indexado respecto a una base
El tipo de direccionamiento se determina en funcin de los operandos de la instruccin. La instruccin MOV realiza transferencia de datos desde un operando origen a un operando destino (se ver ms con ms detalle en los siguientes apartados). Su formato es el siguiente:
MOV destino, origen
7
Direccionamiento inmediato Cuando el operando origen es una constante. Ejemplo: MOV AX, 500 ;almacena en AX el valor 500.
8
Direccionamiento directo
Cuando el operando es una direccin de memoria. sta puede ser especificada con su valor entre [ ], o bien mediante una variable definida previamente.
almacena en BX el contenido de la
10
11
Este tipo de direccionamiento permite acceder ,de una forma cmoda, a estructuras de datos que se encuentran en memoria.
12
Direccionamiento indexado
Cuando la direccin del operando es obtenida como la suma de un desplazamiento ms un ndice (DI, SI). Ejemplo: MOV AX, TABLA[DI] ; almacena en AX el contenido de la posicin de
memoria apuntada por el resultado de sumarle a TABLA el contenido de DI.
13
Ejemplo:
almacena en AX el contenido de la posicin de memoria apuntada por la suma de TABLA, el contenido de BX y el contenido de DI.
14
Cdigo ASCII
El ASCII asigna a las letras del alfabeto, a los dgitos decimales del 0 al 9 y a varios smbolos adicionales un nmero binario de 7 bits (ponindose el bit 8 en su estado de apagado o 0).
De esta forma cada letra, dgito o carcter especial ocupa un byte en la memoria de la computadora.
Se observar que este mtodo de representacin de datos es muy ineficiente en el aspecto numrico, ya que en formato binario nos basta un solo byte para representar nmeros de 0 a 255, en cambio con el cdigo ASCII un byte puede representar nicamente un dgito.
Debido a esta ineficiencia, el cdigo ASCII es principalmente utilizado en la memoria para representar texto.
15
Mtodo BCD
BCD es un acrnimo de Binary Coded Decimal.
En esta notacin se utilizan grupos de 4 bits para representar cada dgito decimal del 0 al 9. Con este mtodo podemos representar dos dgitos por byte de informacin. An cuando este mtodo es mucho ms prctico para representacin de nmeros en la memoria en comparacin al ASCII, todava se queda por debajo del binario, ya que con un byte en el mtodo BCD solo podemos representar dgitos del 0 al 99, en cambio, en formato binario podemos representar todos los dgitos desde 0 hasta 255. Este formato es utilizado principalmente para representar nmeros muy grandes en aplicaciones mercantiles ya que facilita las operaciones con los mismos evitando errores de redondeo.
16
Cuando se realiza una multiplicacin con valores de 8 bits el resultado se almacena en el registro AX y cuando la multiplicacin es con valores de 16 bits el resultado se almacena en el registro par DX:AX.
17
Si el divisor es de 8 bits se toma como dividendo el registro de 16 bits AX y si el divisor es de 16 bits se tomara como dividendo el registro par DX:AX, tomando como palabra alta DX y como baja AX.
Si el divisor fu un byte el cociente se almacena en el registro AL y el residuo en AH, si fu una palabra el cociente se guarda en AX y el residuo en DX. IDIV fuente Consiste bsicamente en lo mismo que la instruccin DIV, solo que esta ltima realiza la operacin con signo. Para sus resultados utiliza los mismos registros que la instruccin DIV.
18
Tarea No. 5
Investigar las siguientes instrucciones AAD DAA DAS AAA AAS AAM
19
Lectura de caracteres.
El siguiente cdigo nos permitir leer un carcter con eco. Leer un caracter con eco quiere decir que al leer el caracter, este lo mostrara y lo podemos hacer con el siguiente cdigo. mov ah,01h int 21h
*La primera instruccin (mov ah,01h) es lo que nos permite leer el caracter con eco. *En el ltimo solo mandamos a llamar el BIOS y listo.
Lectura de caracteres.
Este cdigo permite leer un caracter sin eco. Leer un caracter sin eco quiere decir que al pulsar un caracter esta no se mostrar hasta que se haga un mtodo para desplegar el caracter. mov ah,07h int 21h
*En la primera instruccin (mov ah,07h) permite leer el caracter sin eco * Y por ultimo se manda a llamar al BIOS.
Lectura de caracteres(Ej. 1)
.MODEL SMALL ;Directiva, define el tamao en memoria .STACK ;Asigana tamao al segmento de Pila .DATA ;Reserva un espacio para DS MSJ DB 'INTRODUCE UNA CADENA',10D,13D,'$' .CODE
INICIO: ;Define etiqueta de inicio MOV AX,@DATA ;Referencia al registro de datos MOV DS,AX ;Pasa de AX a DS
LEA DX,MSJ MOV AH,9H INT 21H ;Pasa a Dx la DIR efectiva de MSJ ;Imprime en pantalla
MOV SI,0 ;Inicializa SI CICLO: MOV AH,1H ;Espera entrada desde teclado INT 21H MOV[BX+SI],AL ;Avanza y guarda en la localidad correspondiente INC SI ;Incrementa SI CMP SI,10D ;Compara si SI=10 JNE CICLO ;Salta si no es igual MOV AH,4CH ;Interrupcion, devuelve el control al usuario INT 21H ;Int. del sistema END INICIO ;Fin etiqueta
Lectura de caracteres(Ej. 2)
.MODEL SMALL ;Directiva, define el tamao en memoria .STACK ;Asigana tamao al segmento de Pila .DATA ;Reserva un espacio para DS .CODE INICIO: ;Define etiqueta de inicio MOV AX,@DATA ;Referencia al registro de datos MOV DS,AX ;Pasa de AX a DS PIDE: MOV AH,7H ;Entrada desde teclado sin exhibir en pantalla INT 21H CMP AL,30H ;Pregunta si es cero JL FIN ;Salta si es menor CMP AL,39H ;Pregunta si es 9 JG FIN ;Salta si es mayor DESP: MOV DL,AL ;Para exhibirlo MOV AH,2H INT 21H JMP PIDE FIN: MOV AH,4CH ;Interrupcion, devuelve el control al usuario INT 21H ;Int. del sistema END INICIO ;Fin etiqueta
El uso de una palabra reservada para un propsito equivocado provoca que el ensamblador genere un mensaje de error. El apndice C muestra una lista de lenguaje ensamblador
Ejemplos f:
Como podemos ver los comentarios hacen mas clara la lectura del codigo al describir que hace cada linea.
if ESTRUCTURA DE CONTROL
Las estructuras de control deciden que hacer basados en la comparacin de datos. El resultado de una comparacin se almacenan
INSTRUCCIONES DE RAMIFICACIN
Las instrucciones de ramificacin pueden transferir la ejecucin del programa a un punto arbitrario. En otras palabras funcionan como goto. Hay dos tipos de ramificaciones:
Incondicional es tal cual como goto. Condicional puede o no hacer el salto dependiendo de las banderas del registro FLAGS. Si una ramificacin condicional no hace el salto, el control pasa a la siguiente instruccin.
La instruccin JMP (acrnimo de jump) hace ramificaciones incondicionales. Su argumento normalmente es la etiqueta de cdigo de la instruccin a la cual debe saltar. El ensamblador o el encadenador reemplazar la etiqueta con la direccin correcta de la instruccin.
30
31
32
cmp eax, 5 jge thenblock mov ebx, 2 jmp next thenblock: mov ebx, 1 next:
33
Lenguaje ensamblador
El lenguaje ensamblador, o assembler (assembly language en ingls), es un lenguaje de programacin de bajo nivel para las computadoras, microprocesadores, microcontroladore s y otros circuitos integrados programables.
Implementa una representacin simblica de los cdigos de mquina binarios y otras constantes necesarias para programar una arquitectura dada de CPU y constituye la representacin ms directa del cdigo mquina, especfico para cada arquitectura legible por un programador.
34
36
37
ENSAMBLADORES CRUZADOS
(CROSS-ASSEMBLER)
Se denominan as los ensambladores que se utilizan en una computadora que posee un procesador diferente al que tendrn las computadoras donde va a ejecutarse el programa objeto producido.
El empleo de este tipo de traductores permite aprovechar el soporte de medios fsicos (discos, impresoras, pantallas, etc.), y de programacin que ofrecen las mquinas potentes para desarrollar programas que luego los van a ejecutar sistemas muy especializados en determinados tipos de tareas.
ENSAMBLADORES RESIDENTES
Son aquellos que permanecen en la memoria principal de la computadora y cargan, para su ejecucin al programa objeto producido. Este tipo de ensamblador tiene la ventaja de que se puede comprobar inmediatamente el programa sin necesidad de transportarlo un lugar a otro, como se hacia en cross assembler, y sin necesidad de programas simuladores.
Sin embargo, puede presentar problemas de espacio de memoria, ya que el traductor ocupa espacio que no puede ser utilizado por el programador. Asimismo, tambin ocupara memoria el programa fuente y el programa objeto. Esto obliga a tener un espacio de memoria relativamente amplio y el indicado para desarrollos de pequeos sistemas de control y automatismo empleando microprocesadores.
ENSAMBLADORES MACROENSAMBLADORES
Son ensambladores que permiten el uso de microinstrucciones (macros). Debido a que su potencia, normalmente son programa robustos que no permanecen en memoria una vez generado el programa objeto. Puede variar la complejidad de los mismos dependiendo de las posibilidades de definicin y manipulacin de las macroinstrucciones, pero normalmente son programas bastantes complejos, por lo que suelen ser ensambladores residentes.
MICRO ENSAMBLADORES
Generalmente, los procesadores utilizados en las computadoras tienen un repertorio fijo de instrucciones es decir, que el interprete de las mismas interpretaba de igual forma un determinado cdigo de operacin. El programa que indica al interprete de instrucciones de la UCP como debe actuar se denomina microprograma. El programa que ayuda a realizar este microprograma se llama micro ensamblador. Existen procesadores que permiten la modificacin des sus microprogramas, para lo cual se utilizan micro ensambladores.
44
EL PROCESADOR
Un elemento importante del hardware de la Pc, es la unidad del sistema, que contiene una tarjeta de sistema, fuente de poder y ranuras de expansin para tarjetas opcionales. Los elementos de la tarjeta son un microprocesador INTEL (o equivalente), memoria de solo lectura (ROM) y memoria de acceso aleatorio(RAM). El cerebro de la Pc y compatibles es un microprocesaro basado en la familia 8086 de INTEL, que realiza todo el procesamiento de datos e instrucciones.
45
46
EL PROCESADOR (Cont. 2)
EU: Unidad de Ejecucin
AX
AH AL
BX CX
DX
BH
CH
BL
CL
DH
SP
DL BP
SI
DI
ALU UC FLAGS
1 2 3 N
Bus
Cola de instruccion es
47
APUNTADOR DE INSTRUCCIONE S
49
50
DI (ndice destino): Contiene el desplazamiento con respecto al segmento extra de un elemento de una cadena o arreglo.
.
IP (Apuntador de instrucciones): Contiene siempre el desplazamiento con respecto al segmento de cdigo de la localidad de memoria que contiene la siguiente instruccin que va a ejecutar el microprocesador.
54
Registros De Segmentos
Los registros de segmentos se utilizan para formar la direccin efectiva o real de una localidad de memoria. Los registros de segmentos contienen la direccin de segmento de un dato o una instruccin. El cdigo y los datos de un programa en ejecucin se encuentran cada uno en uno o ms segmentos de memoria. La pila del programa ocupa otro segmento.
55
Registros De Segmentos
(Cont. 2)
DS (Datos): Tiene la direccin lgica del segmento en que se encuentran los datos estticos de un programa. Si los datos ocupan ms de un segmento, contiene la direccin lgica de uno de los segmentos.
56
Registros De Segmentos
(Cont. 3)
ES (Extra): Este registro tambin tiene la direccin lgica de uno de los segmentos en que se encuentran los datos estticos de un programa. Este registro se utiliza en ciertas operaciones del microprocesador para el manejo de cadenas. SS (Pila): Tiene la direccin lgica del segmento en que se encuentran la pila del sistema. La pila no puede ser mayor a un segmento.
57
Registros De Segmentos
(Cont. 3)
Para calcular una direccin efectiva o real de un dato o una instruccin, el microprocesador toma de uno de los registros de segmento el valor del segmento y de otro registro el valor del desplazamiento:
.
En el clculo de la direccin de una instruccin, el valor del segmento se encuentra en el registro de segmento de cdigo, CS, y el desplazamiento en el registro apuntador de instrucciones, IP.
58
Registros De Segmentos
(Cont. 4)
En el clculo de la direccin de un dato, el valor del segmento se encuentra en el registro de segmento de datos, DS, y el desplazamiento puede estar en los registros BX, DI, SI, o ser un nmero de 16 bits.
.
En algunas instrucciones para cadenas, tambin se emplea el registro de segmento extra, ES, y el registro DI para el clculo de la direccin de los datos. ES contiene, el valor del segmento y DI el valor del desplazamiento.
.
En el clculo de la direccin de los datos almacenados en la pila, el valor del segmento se encuentra en el registro de segmento de pila, SS, y el desplazamiento en el registro apuntador de pila, SP o en el registro apuntador de base, BP.
59
El Registro De Banderas
Cada bandera es un bit en el registro de banderas, tambin llamado registro de cdigo de condiciones. En la figura de la parte inferior se ilustra el registro de banderas del microprocesador 8086. Aunque el registro de banderas es de 16 bits slo hay nueve banderas: O, D, I, T, S, Z, A, P, C. Los otros 7 bits no son usados.
60
El Registro De Banderas
(Cont. 2)
De estas nueve banderas, seis de ellas cambian despus de ejecutar muchas de las instrucciones aritmticas y lgicas. Estas seis banderas son:
.
C (Acarreo): Indica un acarreo despus de una suma o un prstamo despus de una resta. La bandera de acarreo tambin indica condiciones de error en ciertos programas y procedimientos. P (Paridad): Es un cero para una paridad impar y un 1 para una paridad par. La paridad es un conteo de unos expresada como un nmero par e impar.
61
El Registro De Banderas
(Cont. 3)
A (Acarreo auxiliar): Indica un acarreo despus de una suma o un prstamo, despus de una resta del bit 3 al bit 4 en el resultado. Esta bandera slo se utiliza en las operaciones daa y das para ajustar el valor de AL despus de una suma o resta BCD.
Z (Cero): Indica que el resultado de una operacin aritmtica o lgica es cero. Si Z = 1, el resultado es cero y si Z = 0, el resultado no es cero.
62
El Registro De Banderas
(Cont. 4)
S (Signo): Indica el signo aritmtico del resultado despus de una suma o una resta. Si S = 1, el resultado es negativo. Si S = 0, el resultado es positivo. Se debe tener en cuenta que el valor del bit ms significativo aparece en el bit de signo en cualquier instruccin que afecte las banderas. O (Sobreflujo): Es una condicin que ocurre cuando se suman o se restan nmeros con signo. Un sobreflujo indica que el resultado ha excedido la capacidad de la mquina. Por ejemplo si se suma 7FH + 01H (127 + 1) el resultado es 80H (-128). Este resultado representa una situacin de sobreflujo sealado por la bandera para la suma con signo. Para operaciones sin signo esta bandera se ignora.
63
El Registro De Banderas
(Cont. 5)
Las otras tres banderas se utilizan para controlar ciertas caractersticas del microprocesador. Esas tres banderas y su uso son:
T (Trampa): Activa, si se pone a 1, o desactiva, si se pone a 0, el modo de ejecucin paso a paso. Este modo es utilizado por los depuradores para ejecutar las instrucciones una a la vez y permitir observar el efecto de la instruccin sobre los registros y la memoria.
64
El Registro De Banderas
(Cont. 6)
I (Interrupcin): Habilita, si se pone a 1, o deshabilita, si se pone a 0, las interrupciones al microprocesador. El estado de esta bandera se controla con las instrucciones sti (habilitar interrupciones) y cli (desactivar las interrupciones).
D (Direccin): Controla la seleccin de autoincremento o autodecremento de los registros DI o SI durante las instrucciones de cadenas y arreglos. Si D = 1 hay autodecremento en los registros y si D = 0 hay autoincremento. El estado de esta bandera se controla con las instrucciones std (habilitar direccin) y cld (desactivar direccin).
65
66
Ventajas
1. Velocidad. como trabaja directamente con el microprocesador al ejecutar un programa, como este lenguaje es el mas cercano a la mquina la computadora lo procesa ms rpido. 2. Eficiencia de tamao.Un programa en ensamblador no ocupa mucho espacio en memoria porque no tiene que cargan libreras y dems como son los lenguajes de alto nivel 3. Flexibilidad.Es flexible porque todo lo que puede hacerse con una mquina, puede hacerse en el lenguaje ensamblador de esta mquina; los lenguajes de alto nivel tienen en una u otra forma limitantes para explotar al mximo los recursos dela mquina.
67
Desventajas
Tiempo de programacin .- Un lenguaje de bajo nivel requiere ms instrucciones para realizar el mismo proceso, en comparacin con un lenguaje de alto nivel. Requiere de ms cuidado por parte del programador, dado a lo propenso a que los errores de lgica se reflejen ms fuertemente en la ejecucin. Programas fuente grandes .- Por las mismas razones que aumenta el tiempo, crecen los programas fuentes; simplemente requerimos ms instrucciones primitivas para describir procesos equivalentes. Esto es una desventaja porque dificulta el mantenimiento de los programas, y nuevamente reduce la productividad de los programadores.
68
Desventajas (Cont. 2)
Peligro de afectar recursos inesperadamente .- Que todo error que podamos cometer, o todo riesgo que podamos tener, podemos afectar los recursos de la mquina, programar en este lenguaje lo ms comn que pueda pasar es que la mquina se bloquee o se reinicialize. Falta de portabilidad.- Porque para cada mquina existe un lenguaje ensamblador; por ello, evidentemente no es una seleccin apropiada de lenguaje cuando deseamos codificar en una mquina y luego llevar los programas a otros sistemas operativos o modelos de computadoras.
69
main proc mov ax,seg saludo mov ds, ax mov ah,09 lea dx,saludo int 21h mov ax,4c00h int 21h main endp endm main
.model samll
.stack .data cadena1 db " Dame un numero:","$" cadena2 db " Dame otro numero:","$" cadena3 db " Dame el ultimo numero:","$" cadena4 db 10,10,13," El numero mayor es:","$" cadena5 db 10,10,13," Los tres numeros son iguales","$" dato1 db ? dato2 db ? dato3 db ? mayor db ? .code
main proc mov ax, seg cadena1 mov ds,ax mov ah,2h mov dh,1 ;posicion del texto mov dl,0 int 10h mov bl,02h ;gotoxy mov cx,05h mov ah,09h int 10h mov bl,02h ;color mov cx,10h ; repeticion mov ah,09h int 10h
lea dx,cadena1 ;pide primer numero mov ah,09 int 21h mov ah,01 ;teclado mov bl,al int 21h mov dato1,al;guardamos valor
mov ax, seg cadena2 mov ds,ax mov ah,2h mov dh,2 ;posicion del texto mov dl,0 int 10h mov bl,02h ;gotoxy mov cx,05h mov ah,09h int 10h mov bl,05h ;color mov cx,12h ; repeticion mov ah,09h int 10h
lea dx,cadena3 ;pedimos segundo valor mov ah,09 int 21h mov ah,01 ;teclado mov bl,al int 21h mov dato3,al
mov ah,2h mov dh,3 ;posicion del texto mov bl,dato1 mov dl,0 ;guardo dato1 en bl int 10h cmp bl,dato2 mov bl,02h ;gotoxy ;comparacion mov cx,05h jg primero mov ah,09h mov bl,dato2 int 10h mov bl,09h ;color mov cx,16h ; repeticion mov ah,09h int 10h primero:cmp bl,dato3 jg imprime1 mov bl,dato3 je iguales
.model small .stack .data m1 db 'ingresa un numero:','$' m2 db 10,10,13,'el numero binario es:','$' salto db 10,13," ","$" cont db 0 cont2 db 0 num dw 0 base db 2 .code main proc
mov ax,seg m1;IMPRIME LETRERO DE MSN mov ds,ax mov ah,09 int 21h while: ;ciclo cmp al,0Dh ;validacion del enter je salir ;valida si es igual se va a salir mov ah,01h int 21h ;captura numeros mov ah,0 sub ax,30h ;resta para hacer la convercion decimal push ax ;guarda en pila add ax,30h ;suma 30h para que regrese al valor de enter si no queda en DD inc cont ;contardor para ver cuantos elementos guarda jmp while ; regresa al ciclo mientras no tecle enter
mov ax,0 ;limpia los registro ax poniendolos a 0 fuera: pop ax pila mul bx ;multiplicar los elementos de ax por bx:unidad,decena,centena... add num,ax ;suma los numeros para hacer la cantidad ejemplo 123 mov ax,bx ;mueve los valores de bx a ax mov bx,10 ;mover 10 a bx esto para multiplicar y aumentar el valor de unidad,decena.. mul bx ;multiplica por 10 para aunmentar mov bx,ax ;mueve el valor de ax a bx dec cont ;decrementa valores de la pila cmp cont,0 ; si el contador llega a 0 se sale ja fuera ;ciclo2 ;saca elementos de la
salir: pop ax dec cont mov bx,1 lea dx,m2 mov ah,09 int 21h
;saca al enter de la pila ;decrementa uno del contador ;pone 1 en el registro bx ;IMPRIME LETRERO DE MSN
mov ax,num
;limpia la variable ax
bin: ;ciclo de conversion binaria mov bx,2 ;inicializa a bx en 2 para divir ax div bx ;divide el valor decimal en 2 en ax para calcular la conversion mov bx,ax ;mueve el valor de ax a bx para seguir dividiendo hasta que sea 0 push dx ;guardar el residuo de la pila el cual esta en dx mov bx,0 ;limpia bx iniciando en 0 inc cont2 ;incrementa un contador2 cmp al,0 ;si despues de la ultima de division el divedendo es 0 se sale je imprimir ;se va a imprimir si es = jmp bin ;buelve hacer el ciclo
imprimir: ;continuacion de imprimi mov ax,0 ;limpia ax imprimirbin: ;ciclo imprimir binario pop dx ;saca los elementos de la pila 0,1 add dl,30h ;le suma 30h hexadecimal para que no imprima otros valores mov ah,02h ;parte de la impresion int 21h ;manda a imprimir en pantalla dec cont2 ;decrementa contador2 cmp cont2,0 ;si contador2 es igual a 0 se sale ja imprimirbin ;regresa al ciclo imprimirbin mov ax,4c00h ;regresa el control al sistema int 21h endp main end main
.model small .stack .data cadena1 db "Ingresa tu cadena de parentesis:","$" cadena2 db 10,10,13,"Existen mas parentesis (","$" cadena3 db 10,10,13,"Existen mas parentesis )","$" cadena4 db 10,10,13,"Expresion de parentesis correcta","$" A db ? B db ? .code main proc mov ax,seg cadena1 mov ds,ax mov ah,09 lea dx,cadena1 int 21h
imprimir: mov al,B; pasa el valor del contador B a al cmp A,al ;comrpueba si en contador A es mayor al contador B ja mayor jb menor je igual
while: ;captura los parentesis por teclado mov ah,01d int 21h
mayor: mov ah,09 lea dx,cadena2 int 21h ;imprime dx jmp salir
menor: mov ah,09 lea dx,cadena3 int 21h ;imprime cadena menor2 jmp salir igual: mov ah,09 lea dx,cadena4 int 21h ;imprime cadena igual1 jmp salir
;comprueba si se da enter si es asi se va a imprimir cmp al,13 je imprimir ;comprueba si es parentesis abierto cmp al,28h je Pabierto ;comprueba si es parentesis cerrado cmp al,29h je Pcerrado ;si es abierto incrementa el contador A Pabierto: inc A jmp while ;si es cerrado incrementa el contador B Pcerrado: inc B jmp while
.model small .stack .data cadena1 db "Dame un numero:","$" salto db 10,10,13," ","$" num db ? .code main proc mov ax,seg cadena1 mov ds, ax lea dx,cadena1 mov ah,09 int 21h ;pedimos un nmero mov ah,01h int 21h ;esa interrupcion nos da el carcter (asccii) del nmero en AL sub al,30h ;Ajustamos para realizar operaciones internas mov num,al ;Tabla a visualizar mov cl,1 ;Contador auxiliar
tabla: mov al,num mul cl aam mov bx,ax mov ah,02h mov dl,' ' int 21h mov ah,02h mov dl,bh add dl,30h int 21h mov ah,02h mov dl,bl add dl,30h int 21h inc cl cmp cl,11 ;AL = N ;AL = AL * CL ;Ajuste en ASCII para separa Acarreo ;AX lo almacenamos en BX
;Separador
;PARTE ALTA
;PARTE BAJA
;CL = CL + 1
je salir jmp cont je salir ;IF CL = 11 jne tabla ;[Operaciones] salir: .exit end
.model small .stack .data cadena1 db 10,10,13," Hola mundo","$" i dw 0 .code main proc mov ax, seg cadena1 mov ds,ax mov cx,i while:cmp cx,10 je finwhile lea dx,cadena1 mov ah,09h int 21h inc cx jmp while finwhile: mov ax,4c00h int 21h
.model small .stack .data mensaje db 'Ingresa un numero del 1 al 4:',10,13,'$' base db 2 par db 10,10,13,'par','$' impar db 10,10,13,'impar','$' facto db 1 salto db 10,13,'el factorial es:','$' salto1 db 10,13,'el Exponente es:','$' .code main proc mov ax,seg mensaje ;mensaje mov ds,ax mov ah,09 int 21h mov ah,01;pide teclado int 21h sub al,30h;resta para convertirlo a decimal mov facto,al;rescatamos nuestro numero div base ;divide entre 2 cmp ah,0 je npar
mov dl, Al add dl, 30h mov ax,seg salto1 ;mensaje mov ds,ax mov ah,09 int 21h mov ah,02h int 21h
lea dx,impar mov ah,09 int 21h mov ax,0 mov cx,0 mov cl,facto mov al,facto ;realiza multiplicacion mov bx,ax mov ax,1 expon: mul bx loop expon
jmp salir npar: mov ax,0 mov cx,0 mov cl,facto sub cl,1 mov al,facto CICLO: mul cx loop CICLO ;imprime 2 numeros mov bl,10 div bl push ax mov dl, Al add dl, 30h mov ax,seg salto ;mensaje mov ds,ax mov ah,09 int 21h
lea dx,par mov ah,09 int 21h salir: mov ax,4c00h int 21h
while: fuera: cmp al,0Dh pop ax .model small je salir1 .stack mul bx .data mov ah,01h m1 db 'MENU','$' add num,ax m2 db 10,13,'Ingresa la temperatura:','$' m3 db 10,13,'Ingresa valores de 1 al 100 para convertir de farethein a int 21h mov ax,bx celcius','$' m4 db 10,13,'Igresa valores de 101 a 1000 para convertir de celcius a mov ah,0 mov bx,10 farethein','$' m5 db 10,13,'Ingresa 5000 para salir','$' sub ax,30h mul bx m6 db 10,13,'los grados Fareheing','$' m7 db 10,13,'los grados Celcius','$' push ax mov bx,ax salto db 10,10,13,'la conversion es:','$' cont db 0 add ax,30h dec cont num dw 0 f dw 0 inc cont cmp cont,0 valor dw 10 jmp while ja fuera .code
main proc mov ax, seg m1 mov ds,ax mov ah,09 int 21h lea dx,m3 mov ah,09 int 21h lea dx,m4 mov ah,09 int 21h lea dx,m5 mov ah,09 int 21h lea dx,m2 mov ah,09 int 21h
primero: ;C=(F-32).5/9 sub ax,32 mov bx,5 mul bx mov bx,9 div bx push ax jmp salir segundo: cmp ax,1001 jb segundo1 cmp ax,5000 je salir: segundo1: mov bx,9 mul bx mov bx,5 div bx add ax,32 salir:
mov ax,num salir1: lea dx,salto mov ah,09 int 21h pop ax dec cont mov bx,1 mov ax,0 cmp ax,100 jb primero cmp ax,101 ja segundo
pop ax add al,30h mov dl,al mov ah,02h int 21h mov ax,4c00h int 21h