softa1090
Usuario (México)

Hola chicos: Este post es dedicado a aquellos que les da dolor de cabeza programar en ensamblador .. Les dejo unos ejemplos , espero les sirvan. Ejemplo1 ;* Programa que calcula el area de un triangulo ;********************************************************************** .model small .data N db ? M db ? mia1 db '',10,13,'Ingrese la base: $' mia2 db '',10,13,'Ingrese la altura: $' mia3 db '',10,13,'Area es = $' .code inicio: mov ax,@data mov ds,ax mov dx,offset mia1 mov ah,09 int 21h lea SI,N mov ah,01h int 21h sub al,30h mov bl,al mov dx,offset mia2 mov ah,09 int 21h lea SI,M mov ah,01h int 21h mov cl,al mov dx,offset mia3 mov ah,09 int 21h mov al,cl sub al,30h mul bl; multiplica el valor de al * dl y lo deja en Ax ;################################################################### mov cl,2 div cl ;################################################################### add al,30h; numero a cadena mov dl,al; cadena a imprimir mov ah,02h; imprimir un caracter int 21h; Ejecuta la instruccion previa ;################################################################### mov ah,4ch; Prepara la salida int 21h; Ejecuta la instruccion previa .Stack end inicio

Hola: Paso de rapidin a dejarles otro programita que genera e imprime la tabla del 2, sencillito pero practico el ejemplo. ;=== PROGRAMA QUE GENERA E IMPRIME LA TABLA DEL DOS ;========================================================== .model small .data tabla db '2$'; genere la tabla del dos por db 'x$' c db '1$' igual db'=$' salta db 10,13,' $' .code genera: mov ax, @data mov ds, ax ;-----Imprimir el 2--------------------------- mov dx, offset tabla mov ah, 09 int 21h ;-----Imprimir la "x"------------------------- mov dx, offset por mov ah, 09 int 21h ;-----Imprimir el num del ciclo--------------- mov dx, offset c mov ah, 09 int 21h ;-----Imprimir el "="------------------------- mov dx, offset igual mov ah, 09 int 21h ciclo: sub c, 30h; convertir de cadena a numero mov al, c; Respaldo del valor c mov bl, tabla; mover el valor de la tabla hacia bl sub bl, 30h; convertir de cadena a numero ;-----Multiplicacion--------------------------- mul bl; multiplica AL= AL x BL add al, 30h; pasar de numero a cadena mov dl, al; mover el valor para dl mov ah, 02h; Para imprimir por pantalla int 21h ;-----Imprimir un salto de linea--------------- mov dx, offset salta mov ah, 09 int 21h ;-----Ciclo------------------------------------ add c, 1; incrementar a 1 add c, 30h; convertir a cadena ;cmp c, '10' ;jne genera ;---------------------------------------------- mov dx, offset tabla mov ah, 09 int 21h mov dx, offset por mov ah, 09 int 21h mov dx, offset c mov ah, 09 int 21h mov dx, offset igual mov ah, 09 int 21h cmp c, '9' jne ciclo mov ah, 4ch int 21h .stack end genera
Hola muchachos: Aqui les dejo un ejemplo en ensamblador que genera la tabla de un numero ingresado. Espero les sirva, saludos ;=============================================== ;PROGRAMA QUE IMPRIME LA TABLA DE UN NUMERO TECLEADO ;=============================================== .model small .stack .data N db ? mia1 db '',10,13,'Ingrese el numero de la tabla que desea generar que van del: $' mia2 db ' 1 2 3 4 5 6 7 8 9 10 $' por db 10,13,' X X X X X X X X X X ''$' salta db 10,13,'$' .code inicio: mov ax,@data mov ds,ax mov dx,offset mia1 mov ah,09 int 21h mov dx,offset mia2 mov ah,09 int 21h mov dx,offset por mov ah,09 int 21h mov dx,offset salta mov ah,09 int 21h ;===================================================================== mov ah,08h ;Input int 21h ;Interrupcion de DOS sub al,30h ;Ajustamos para realizar operaciones internas mov N,al ;Tabla a visualizar mov cl,00h ;Contador auxiliar inc cl ;===================================================================== operaciones: mov al,N ;AL = N mul cl ;AL = AL * CL aam ;Ajuste en ASCII para separa Acarreo mov bx,ax ;AX lo almacenamos en BX mov ah,02h ; mov dl," " ;Separador int 21h ;Interrupción de DOS mov ah,02h ;Standar output mov dl,bh ;PARTE ALTA add dl,30h ;Ajuste para darle salida en pantalla int 21h ;Interrupción de DOS mov ah,02h ;Standar output mov dl,bl ;PARTE BAJA add dl,30h ;Ajuste para salida en pantalla int 21h ;Interrupción de DOS inc cl ;CL = CL + 1 cmp cl,11 ;IF CL = 10 je salir jne operaciones ;===================================================================== salir: mov ah,4ch int 21h .Stack end inicio

Hola: Les dejo el codigo del programita que te convierte un escrito teclado en minusculas a mayusculas.. ;================================================ ;= PROGRAMA QUE PERMITE LEER UNA CADENA DE CARACTER Y ;= TRANSFERIRLOS DE MINUSCULAS HACIA MAYUSCULAS. ;================================================ .MODEL SMALL .DATA msg1 DB 'Escribe algo en minusculas: ',10,13,'$' CAD DB 30,0,30 DUP(0) ; Definir espacio para el string .CODE INICIO: mov ax,@data mov ds,ax mov dx,offset msg1 mov ah,09 int 21h MOV AX,@DATA MOV DS,AX ; DS <- Segmento DATA MOV DX,OFFSET CAD ; DX <-Offset del string MOV AH,0Ah ; Funcion para leer un string INT 21h ; Llamar a MS-DOS MOV BX,OFFSET CAD+2 ; BX <-Offset del 3er caracter del string XOR CH,CH ; Parte alta de CX con 0 MOV CL,[CAD+1] ; Parte baja de CX con el numero de cars. que ; fueron leidos del teclado ;==================================================== OTRO_CAR: CMP BYTE PTR ,'a' ; Compara el car. en DS:BX con 'a' JB NO_MIN ; salta si esta por debajo de CMP BYTE PTR ,'z' ; Compara el car en DS:BX con 'z' JA NO_MIN ; salta si esta por arriba de ; si es mayuscula SUB BYTE PTR ,32 ; Convertir a mayuscula ;======================================================= NO_MIN: INC BX ; Incrementar BX al sig. Caracter LOOP OTRO_CAR ; Hacer el ciclo a OTRO_CAR ; MOV BYTE PTR ,'$' ; Poner el terminador al final del ; string MOV AH,9 ; Funcion imprimir un string MOV DX,OFFSET CAD+2 ; DX Offset del 3er car. del string INT 21h ; Llamar a DOS ;====================================================== MOV AH,4Ch ; Funcion para terminar proceso INT 21h ; Llamar a DOS DB 100h DUP(0) .STACK END inicio

Hola a todos: Les dejo este otro programita en ensamblador espero les sirva de ayuda ;================================================= ;= PROGRAMA QUE LEE DOS CADENAS EN DOS VARIABLES Y LAS COMPARA = ================================================== .model small .stack .data cadena1 db 10 dup(' '),'$' cadena2 db 10 dup(' '),'$' mensaje1 db 10,13,'Escribe la primera cadena:$' mensaje2 db 10,13,'Escribe la segunda cadena:$' msj1 db 10,13,'Las cadenas SI son iguales$' msj2 db 10,13,'Las cadenas NO son iguales$' .code .startup mov ah,06h ; peticion de recorrido de la pantalla mov al,00h ; indica la pantalla completa mov ax,@data mov ds,ax mov dx,offset mensaje1 mov ah,09h int 21h ;============================================================ lea SI,cadena1 mov cx,10 regresa: mov ah,07h int 21h cmp al,13 je termina mov ,al inc SI mov dl,al mov ah,02h ;- Para imprimir por pantalla un caracter int 21h loop regresa ;================================================================ termina: mov dx,offset mensaje2 mov ah,09h int 21h lea SI,cadena2 mov cx,10 ;================================================================ regresa2: mov ah,07h int 21h cmp al,13 je termina2 mov ,al inc SI mov dl,al mov ah,02h ;- Para imprimir por pantalla un caracter int 21h loop regresa2 ;================================================================= termina2: push ES mov AX,DS mov ES,AX mov cx,10 lea SI,cadena1 lea DI,cadena2 repe cmpsb JNE no_igual jmp igual pop ES ;====================================================== no_igual: lea DX,msj2 jmp fin ;====================================================== igual: lea DX,msj1 ;======================================================= fin: mov ah,09h int 21h .exit end

Hola: Paso a dejarles otro programita en ensamblador, ojala les sea util, saludos ;==================================================================== ;==== PROGRAMA QUE PERMITE MOSTRAR EL EQUIVALENTE EN NUMERO ROMANO ;==== AL ELEGIR UN NUMERO EN DECIMAL DEL 1 AL 9 (0 = SALIR) ;==================================================================== .model small .data msj1 db 'Teclea un numero del 1 al 9 (0 para salir):$' esp db ' ',10,13,'$' num1 db '= I$' num2 db '= II$' num3 db '= III$' num4 db '= IV$' num5 db '= V$' num6 db '= VI$' num7 db '= VII$' num8 db '= VIII$' num9 db '= IX$' .code inicio: mov ax, @data mov ds,ax mov dx, offset esp mov ah,09 int 21h mov dx, offset msj1 mov ah,09 int 21h mov ah,01h int 21h ;===================================================================== cmp al,'0' je fin cmp al,'1' je uno cmp al,'2' je dos cmp al,'3' je tres cmp al,'4' je cuatro cmp al,'5' je cinco cmp al,'6' je seis cmp al,'7' je siete cmp al,'8' je ocho cmp al,'9' je nueve ;===================================================================== uno: mov dx, offset num1 mov ah,09 int 21h jmp inicio dos: mov dx, offset num2 mov ah,09 int 21h jmp inicio tres: mov dx, offset num3 mov ah,09 int 21h jmp inicio cuatro: mov dx, offset num4 mov ah,09 int 21h jmp inicio cinco: mov dx, offset num5 mov ah,09 int 21h jmp inicio seis: mov dx, offset num6 mov ah,09 int 21h jmp inicio siete: mov dx, offset num7 mov ah,09 int 21h jmp inicio ocho: mov dx, offset num8 mov ah,09 int 21h jmp inicio nueve: mov dx, offset num9 mov ah,09 int 21h jmp inicio fin: mov ah, 4ch int 21h .stack end inicio

Hola: Paso a dejarles otro programita en ensamblador, ojala les sea util, saludos ;==================================================================== ;==== PROGRAMA QUE PERMITE MOSTRAR EL EQUIVALENTE EN NUMERO ROMANO ;==== AL ELEGIR UN NUMERO EN DECIMAL DEL 1 AL 9 (0 = SALIR) ;==================================================================== .model small .data msj1 db 'Teclea un numero del 1 al 9 (0 para salir):$' esp db ' ',10,13,'$' num1 db '= I$' num2 db '= II$' num3 db '= III$' num4 db '= IV$' num5 db '= V$' num6 db '= VI$' num7 db '= VII$' num8 db '= VIII$' num9 db '= IX$' .code inicio: mov ax, @data mov ds,ax mov dx, offset esp mov ah,09 int 21h mov dx, offset msj1 mov ah,09 int 21h mov ah,01h int 21h ;===================================================================== cmp al,'0' je fin cmp al,'1' je uno cmp al,'2' je dos cmp al,'3' je tres cmp al,'4' je cuatro cmp al,'5' je cinco cmp al,'6' je seis cmp al,'7' je siete cmp al,'8' je ocho cmp al,'9' je nueve ;===================================================================== uno: mov dx, offset num1 mov ah,09 int 21h jmp inicio dos: mov dx, offset num2 mov ah,09 int 21h jmp inicio tres: mov dx, offset num3 mov ah,09 int 21h jmp inicio cuatro: mov dx, offset num4 mov ah,09 int 21h jmp inicio cinco: mov dx, offset num5 mov ah,09 int 21h jmp inicio seis: mov dx, offset num6 mov ah,09 int 21h jmp inicio siete: mov dx, offset num7 mov ah,09 int 21h jmp inicio ocho: mov dx, offset num8 mov ah,09 int 21h jmp inicio nueve: mov dx, offset num9 mov ah,09 int 21h jmp inicio fin: mov ah, 4ch int 21h .stack end inicio
Hola comunidad les dejo este sencillo programita en prolog, ingresas un número del 1 al 10 y te lo imprime en romano. Espero les sirva de ayuda. menu:- nl,nl,display('MENU DE OPCIONES:'),nl, display('1.-Imprimir numero ingresado en romano'),nl, display('2.-Salir'),nl, display('Elije un numero (1,2):'),read(S),seleccion(S). seleccion(Op):- (Op=1->call(romano); Op=2->break), display('Error, la opcion seleccionada no es valida'), menu. romano:-display('Escribe un numero'),read(Num),(Num=1->display('I'),Num=2->display('II'),Num=3->display('III'),Num=4->display('IV'),Num=5->display('V'),Num=6->display('VI'),Num=7->display('VII'),Num=8->display('VIII'),Num=9->display('IX'),Num=10->display('X'),Num>10->break),display('Ingreso un valor mayor de 10'),menu.
heme aquí de nuevo perdida entre sombras llorando fantasmas, pensando en ti, en lo que pudo ser o en lo que talvez fue... Sin saber el porque han pasado 2,124 días sin tu presencia.. quisiera borrar esa mirada que me helaba.. Dios sabe que daría todo por una sola palabra tuya dirigida a mi.. Hace 6 años perdí mi conciencia... y sigo buscándola...