Entradas

Programas con librerias parte 2

Imagen
EJEMPLO 1: Mejora del programa 9. letras de colores(Ambrocio). CR EQU 13 ;Declaro retorno de carro LF EQU 10 ;Declaro salto de linea BIOS EQU 10H ;Declaro interrupcion 10h DOS EQU 21H ;Declaro interrupcion 21h TEXTO EQU 3 ;Declaro el servicio 03 para la impresion de texto desde BIOS FIN EQU 4C00H ;Declaro interrupcion de exit VARIABLES SEGMENT ;Declaro las variables include "emu8086.inc" TITULO DB "JUENITO_XD" ;Un texto COLORES DB 01001110B ;Una agrupacion de colores DB 11101111B ;0= cursos parpadeante 000=color de fondo 0000=color del texto DB 10110001B DB 01011100B DB 00110001B DB 01011111B DB 01101011B DB 01011100B DB 01101111B DB 01001110B DB 00110001B VARIABLES ENDS VPILA SEGMENT;STACK ;Declaro la pila DB 64 DUP("PILA") VPILA ENDS CODIGO SEGMENT COLO PROC FAR ;Declaro un procedimiento ASSUME CS:CODIGO, DS:VARIABLES, SS:VPILA MOV AX,VARIA

Cambiar de color la pantalla

Imagen
Código: CR EQU 13 LF EQU 10 TECLADO_8 EQU 8 IMPRIMIR_9 EQU 9 FIN_4C00H EQU 4C00H DOS_21H EQU 21H BIOS_10H EQU 10H TAB EQU 09H BELL EQU 07H DATOS SEGMENT RENGLON DB 0 COLUMNA DB 0 MENSAJE DB CR,LF,'POSICION (X,Y), DEL MENSAJE: Hola mundo' DB 'DESPUES DE BORRAR PANTALLA',CR,LF,'$' DATOS ENDS PILA SEGMENT STACK DW 100 DUP('0') PILA ENDS CODIGO SEGMENT CLSP PROC FAR ASSUME CS:CODIGO,DS:DATOS,SS:PILA MOV AX,DATOS MOV DS,AX LEA DX,MENSAJE CALL LIMPIA_PANTALLA CALL POSICIONA_CURSOR MOV AH,IMPRIMIR_9 INT DOS_21H MOV AX,FIN_4C00H INT DOS_21H CLSP ENDP LIMPIA_PANTALLA PROC NEAR MOV AX,0600H MOV BH,00111110b ;color que se modifico MOV CX,000H

Programas TASM

Imagen
 Programa No.1  ---  Hola Mundo --- CR EQU 13 LF EQU 0AH DATOS SEGMENT MENSAJE DB CR, LF, "HOLA MUNDO$" DATOS ENDS PILA SEGMENT STACK DB 64 DUP("PILA") PILA ENDS CODIGO SEGMENT HM PROC FAR ASSUME CS: CODIGO,DS:DATOS,SS:PILA MOV AX, DATOS MOV DS, AX LEA DX,MENSAJE MOV AH,9 INT 21H MOV AX,4C00H INT 21H HM ENDP CODIGO ENDS END HM Programa No.2  --- Uso de Constantes --- CR EQU 13 LF EQU 10 IMPRIMIR EQU 9 FIN EQU 4C00H DOS EQU 21H DATOS SEGMENT TEXTO DB CR, LF, "USO DE CONSTANTES$" DATOS ENDS PILA SEGMENT STACK DB 64 DUP("PILA") PILA ENDS CODIGO SEGMENT ASSUME CS: CODIGO,DS:DATOS,SS:PILA INICIO: MOV AX,DATOS MOV DS,AX MOV DX,OFFSET TEXTO MOV AH,IMPRIMIR INT DOS MOV AX,FIN INT DOS CODIGO ENDS END INICIO  Programa No.3  --- Hola Mundo con Función --- CR EQU 13 LF EQU 10 DATOS SEGMENT

Multiplicacion de dos numeros

Imagen
Hoy tenemos un pequeño programa que multiplica números de 2 cifras, podemos ver en los comentarios ciertas corridas de escritorio para la prueba de 20*30 respectivamente: .model small ;Modelo de memoria m?s utilizado .stack .data ;definición de datos(variables), donde se almacenara información .code chr1 db ? ;primer digito chr2 db ? ;segundo digito chr3 db ? ;multiplo chr4 db ? r1 db ? ;resultado 1 r2 db ? ;resultado 2 r3 db ? r4 db ? ac db 0 ;acarreo ac1 db 0 .startup ;cls mov ah,00h ;Function(Set video mode) mov al,03 ;Mode 80x25 8x8 16 int 10h ;Interruption Video mov ah,01h ;Function(character read) Guarda en AL int 21h ;Interruption DOS functions sub al,30h ;ajustamos valores mov chr1,al ;[chr1].chr2 * chr3 = ac.r1.r2 mov ah,01h ;Function(character read) Guarda en AL int 21h ;Interruption DOS functions sub al,30h ;Ajustamos valores

Programa lectura LOOPE

Imagen
Hoy veremos un ejemplo  de usos condicionales en ensamblador. hoy se usaran los LOOPS LOOPE Codigo: .model small .stack 64 .data .code inicio proc far ;INICIO DE PROCEDIMIENTO mov cx,10 ; CX=10 LEER_CAR: ;INICIO DE ETIQUETA mov al,"*" ;AL="*" mov ah,0Eh ;0Eh Imprime un caracter en pantalla desplazando el cursor y la pantalla de ser necesario int 10h ;Invoca a los servicios de pantalla mov ah,00 ;00 espera una pulsación del teclado int 16h ;Invoca los servicios del teclado cmp al,"S" ;Si la tecla introducida es una "S" mayuscula y la bandera ZF= 1 loope LEER_CAR ; Entonces el ciclo se repite decrementando CX en 1 ;Si es diferente el valor a "S" mayuscyla y la bandera ZF=0 mov ah,0Eh ;Entonces pido la impresion de un caracter int 10h ;E invoco los servicios de pantalla, esto imprimira en pantalla el ultimo caracter introducido por teclado

Programa detector de subcadena

Imagen
Los siguientes programas se encargan de detectar la subcadena dentro de otra cadena. En este caso ocupare la subcadena: diana y la cadena tecnologico código: org 100h include 'emu8086.inc' mov si, 0 ;ponemos si en 0 comienzo: mov al, msg2[0] ;copiar la primera letra de la palabra A al cmp msg[si],"$" ;si es el fin de la cadena mandar a final jz noAceptada ; brinca si en efecto es el final de la cadena ;si no continuo con las siguientes lineas cmp msg[si], al ;comparar si encuentra la primera letra de la cadena en msg2 jne seguir ;brica si es diferente ;si no continuo con la ejecución mov di, 1 ;poner en 1 di comprobar: mov al, msg2[di] ;extraigo el siguiente caracter de msg2 mov bx, di ;igualo bx=di cmp msg[si+bx], al ;consiguo el caracter ubicado en la posicion si+bx y lo comparo con al (al contiene el caracter de msg2) jne seguir ;si no coincide mandar

Ciclos condicionales (ejemplos)

 Ejemplo 1: EJEMPLO JMP org 100h mov ax,5 mov bx,2 jmp calc ;salta hacia el bloque calc back: jmp stop ;salta directamente a stop calc: add ax,bx jmp back ;salta hacia el bloque back stop: ;termina el programa ret ;http://jbwyatt.com/253/emu/asm_tutorial_07.html Ejemplo 2: EJEMPLO PUSH org 100h mov cx, 5 ;establecemos que CX valdra 5 para el loop externo k1: mov al, ' ' ;guardamos un espacio en al mov ah, 0eh ;invocamos el servicio de impresion de video int 10h ;imprimimos mov al, '1' ;guardamos un 1 en al mov ah, 0eh ;invocamos el servicio de impresión de video int 10h ;imprimimos push cx ;restamos 1 a cx: cx=cx-1 para el loop 1 mov cx, 5 ;seteamos cx a 5 para el loop interno 2 k2: mov al, '2' ;guardamos 2 en al mov ah, 0eh ;invocamos al servicio de impresión de video int 10h ;imprimimos push cx ;restamos 1 a cx: cx=cx-1 para el loop 2 mo