Entradas

Mostrando las entradas de abril, 2019

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

Investigacion Ciclos condicionales (Unidad 2)

Imagen
Saltos, ciclos y procedimientos Un ciclo, conocido también como iteración, es la repetición de un proceso un cierto número de veces hasta que alguna condición se cumpla. En estos ciclos se utilizan los brincos "condicionales" basados en el estado de las banderas. Por ejemplo la instrucción  jnz  que salta solamente si el resultado de una operación es diferente de cero y la instrucción  jz  que salta si el resultado de la operación es cero. Por último tenemos los procedimientos o rutinas, que son una serie de pasos que se usarán repetidamente en el programa y en lugar de escribir todo el conjunto de pasos unicamente se les llama por medio de la instrucción  call . Un procedimiento en ensamblador es aquel que inicie con la palabra  Proc  y termine con la palabra  ret . Realmente lo que sucede con el uso de la instrucción call es que se guarda en la pila el registro  IP  y se carga la dirección del procedimiento en el mismo registro, conociendo que IP contiene la l