Вы находитесь на странице: 1из 18

Ao de la Diversificacin Productiva y del Fortalecimiento de la

Educacin

VALENTIN ERICK

1313210073

1) APARECER EN PANTALLA NOMBRE

PROGRAMACION:
;-----------------------------------------------------------------------------;Definicion del segmento de datos
DATOS SEGMENT
pregunta_nombre db "Cual es tu nombre?: "
nombre
db 64 DUP(0)
DATOS ENDS
;Definicion del segmento de pila
PILA SEGMENT STACK "STACK"
db 40h DUP(0)
PILA ENDS
;Definicion del segmento extra
EXTRA SEGMENT
RESULT DW 0,0
EXTRA ENDS
;Definicion del segmento de codigo
CODE SEGMENT
assume cs:code,ds:datos,es:extra,ss:pila
START PROC
;Inicializamos los registros de segmento
mov ax,datos
mov ds,ax
mov ax,pila
mov ss,ax
mov ax,extra
mov es,ax
;Fin de las inicializaciones
;Limpiamos la pantalla
mov ax,0B800h
;En esta direccion comienza la memoria de video
mov es,ax
;Lo cargamos en el segmento extra
xor di,di
;Ponemos DI=0. Esto equivale a mov di,0, pero
;xor di,di consume 3 ciclos de reloj y con mov 4
mov cx,80*25
;El tamao total es 2000 (80 lineas x 25 columnas)
b_clear:

;Bucle que se encargara de recorrer los 2000


;caracteres de la pantalla para limpiarla
mov al,20h
;20h=" " Rellenar la pantalla con espacios
mov ah,1bh
;Fondo azul, letras blancas
mov es:[di],ax
inc di
inc di
loop b_clear

;Mostramos un mensaje
mov si,offset mensaje
mov di,(80*10+10)*2 ;Linea 10, columna 10
mov cx,49
;Tamao del mensaje
b_saludo:
mov al,[si]
mov ah,1bh
mov es:[di],ax
inc si
inc di
inc di
loop b_saludo

;Bucle que se encargara de recorrer los 2000


;caracteres de la pantalla para limpiarla
;Fondo azul, letras blancas
;Pasamos a apuntar a la siguiente letra del saludo

;Mensaje al usuario para que introduzca su nombre


mov si,offset pregunta_nombre
mov di,(80*12+10)*2
;Linea 12, columna 10
mov cx,20
b_pide_nombre:
;Bucle que se encargara de recorrer los 2000
;caracteres de la pantalla para limpiarla
mov al,[si]
mov ah,1bh
;Fondo azul, letras blancas
mov es:[di],ax
inc si
;Pasamos a apuntar a la siguiente letra del saludo
inc di
inc di
loop b_pide_nombre
;Almacenamos el nombre
mov ah,0Ah
mov dx,offset nombre
mov nombre[0],64
;Maximo numero de caracteres
int 21h
mov bx,0
muestra_nombre:
mov dl,nombre[bx+2]
mov ah,2
int 21h
;Escribir un caracter del nombre
inc bx
cmp bl,nombre[1]
;Compara con el numero de caracteres
jne muestra_nombre

mov ax,4C00h
int 21h

;Terminar el programa

START ENDP
CODE ENDS
END START
EJECUTANDO:
PASOS 1-EL ARCHIVO .ASM LO PONES EN C-TASM1.4-TASM
PASO2-LUEGO CUANDO ABRES EL PROGRAMA ESCRIBES: TASM
"NOMBRE DEL ARCHIVO"
LUEGO
PASO3- TLINK "NOMBRE DEL ARCHIVO"
PASO4-POR ULTIMO PARA EJECUTAR ESCRIBES EL NOMBRE DEL ARCHIVO

2) CALCULADORA
PROGRAMACION:

msg10 db Menu Escoja una opcion.,$


msg11 db a) Adicion,$
msg12 db b) Sustraccion,$
msg13 db c) Multiplicacion,$
msg14 db d) Divicion,$
msg15 db e) Potencia,$
msg50 db s) Salir,$
msg60 db v) Volver a realizar operacion con nuevos numeros.,$
msg16 db Opcion: ,$
msg17 db Primer cifra: ,$
msg18 db Segunda cifra: ,$
msg100 db Resultado: ,$
opcion db 1 dup ( )
error1 db Opcion no valida vuelve a elegir opcion.,$
error2 db Debe elegir solo digitos (0,,9).,$
error3 db Debe presionar enter.,$
MSJ1 DB ESCRIBE EL PRIMER NUMERO : ,$
MSJ2 DB ESCRIBE EL SEGUNDO NUMERO : ,$
NUM1 DB 10 DUP (0)
NUM2 DB 10 DUP (0)
NUM1AUX DB 10 DUP (0)
NUM2AUX DB 10 DUP (0)
CONTROL1 DB 0
CONTROL2 DB 0
residuo dw 0
CUCO1 DW 0
CUCO2 DW 0
DIEZ DW 1
DIEZ1 DW 1
NUM1BIN DW 10 dup (0)
NUM2BIN DW 10 dup (0)
SUMABIN DW 10 dup (0)
RESULTSUM DB 10 DUP( )
.CODE
;;proc muestraMenu far
fondo
ir 7,10
vermsg msg10
prin:
ir 9,10
vermsg msg11
ir 10,10
vermsg msg12
ir 11,10
vermsg msg13

ir 12,10
vermsg msg14
ir 13,10
vermsg msg15
ir 15,10
vermsg msg16
capcharv
mov opcion,al
cmp al,97
je cap
cmp al,98
je cap
cmp al,99
je cap
cmp al,100
je cap
cmp al,101
je cap
er1:
fondo
ir 4,20
vermsg error1
jmp prin
cap:
ret
endp
;-NUMERO 1;;numerouno proc far
IRXY 8,10
VERMSJ MSJ1
MOV BX,0
CICLO1:
PONERCAR 8
SIGUE1:
CAPCAR
;VALIDACION
CMP AL,13
JE ORDENAR
CMP AL,30H
JL CICLO1
CMP AL,39H
JA CICLO1
;VALIDACION SUPERADA Y GUARDANDO

MOV NUM1AUX[BX],AL
INC BX
INC CONTROL1
INC CUCO1
CMP CONTROL1,10
JNE SIGUE1
;-ORDENANDO
ORDENAR:
MOV AX,CUCO1
MOV BX,LONG
SUB BX,AX
MOV SI,0
CICLO2:
MOV CL,NUM1AUX[SI]
MOV NUM1[BX],CL
INC SI
INC BX
CMP BX,10
JNE CICLO2
ret
endp
;-NUMERO 2numerodos proc far
IRXY 9,10
VERMSJ MSJ2
MOV BX,0
CICLO3:
PONERCAR 8
SIGUE2:
CAPCAR
;VALIDACION
CMP AL,13
JE ORDENAR1
CMP AL,30H
JL CICLO3
CMP AL,39H
JA CICLO3
;VALIDACION SUPERADA Y GUARDANDO
MOV NUM2AUX[BX],AL
INC BX
INC CONTROL2
INC CUCO2
CMP CONTROL2,10
JNE SIGUE2
;-ORDENANDO
ORDENAR1:

MOV AX,CUCO2
MOV BX,LONG
SUB BX,AX
MOV SI,0
CICLO4:
MOV CL,NUM2AUX[SI]
MOV NUM2[BX],CL
INC SI
INC BX
CMP BX,10
JNE CICLO4
ret
endp
;MOSTRAR CAPTURA;
;
QUITARCERO PROC FAR
MOV BX,0
CICLO5:
MOV AL,NUM1[BX]
AND AL,00001111B
MOV NUM1[BX],AL
MOV CL,NUM2[BX]
AND CL,00001111B
MOV NUM2[BX],CL
INC BX
CMP BX,10
JNE CICLO5
RET
ENDP
;
;
convert1 proc far
MOV AX,0
MOV BX,10
MOV CX,10
LEA SI,NUM1+9
MARCA:
MOV AL,[SI]
AND AX,000FH
MUL DIEZ
ADD NUM1BIN,AX
MOV AX,DIEZ
MUL BX
MOV DIEZ,AX
DEC SI

LOOP MARCA
RET
ENDP
;
convert2 proc far
MOV AX,0
MOV BX,10
MOV CX,10
LEA SI,NUM2+9
MARCA1:
MOV AL,[SI]
AND AX,000FH
MUL DIEZ1
ADD NUM2BIN,AX
MOV AX,DIEZ1
MUL BX
MOV DIEZ1,AX
DEC SI
LOOP MARCA1
RET
ENDP
;
SUMA MACRO a,b,total
PUSH AX
MOV AX,a
ADD AX,b
MOV total,AX
POP AX
ENDM
;
RESTA MACRO a,b,total
PUSH AX
MOV AX,a
SUB AX,b
MOV total,AX
POP AX
ENDM
;
convbinascii proc far
MOV CX, 0010
LEA SI, RESULTSUM+9
MOV AX, SUMABIN
CICLO6:
CMP AX,CX
JB CICLO7
XOR DX,DX
DIV CX

OR DL,30H
MOV [SI],DL
DEC SI
JMP CICLO6
CICLO7:
OR AL,30H
MOV [SI],AL
; mov resultsum,[si]
ret
endp
;
;
multi proc far
MOV Ax,num1bin
MUL num2bin
MOV sumabin,ax
RET
endp
;
;
divide proc far
mov ax,num1bin
mov residuo,ax
mov bx,num2bin
mov si,0
ciclo35:
cmp residuo,bx
jb termina1
PUSH AX
MOV AX,residuo
SUB AX,num2bin
MOV residuo,AX
inc si
POP AX
jmp ciclo35
termina1:
mov sumabin,si
ret
endp
;
;
potencia proc far
mov ax,0001h
mov sumabin,ax
mov di,0
ciclo40:
cmp di,num2bin

je termina2
MOV Ax,num1bin
MUL sumabin
MOV sumabin,ax
inc di
jmp ciclo40
termina2:
RET
endp
;
;
proceso1 proc far
cmp opcion,97
je adicion
cmp opcion,98
je sustraccion
cmp opcion,99
je multiplicacion
cmp opcion,100
je division
cmp opcion,101
je elevar
adicion:
suma num1bin,num2bin,sumabin
jmp hecho
sustraccion:
resta num1bin,num2bin,sumabin
jmp hecho
multiplicacion:
call multi
jmp hecho
division:
call divide
jmp hecho
elevar:
call potencia
jmp hecho
hecho:
ret
endp
;
proceso2 proc far
CALL CONVBINASCII
IRXY 11,10
vermsg msg100
MOSTRARCAPTURA 10,resultsum

ir 22,10
vermsg msg50
ir 23,10
vermsg msg60
ir 15,10
capcharv
mov opcion,al
ret
endp
limpiar proc far
mov di,0
cic:
mov sumabin[di],0
mov resultsum[di],0
inc di
cmp di,10
jne cic
ret
endp
INICIO
comien:
call muestraMenu
cmp opcion,115
je saldeaqui
PANTALLA AZULBLANCO
CALL NUMEROUNO
CALL NUMERODOS
CALL CONVERT1
CALL CONVERT2
regresa:
call proceso1
call proceso2
cmp opcion,118
je comien
cmp opcion,115
jne regresa
IRXY 24,10
saldeaqui:
FIN

1)
2)

CONTROLAR UN MOTOR DC
CONTROLADORDE MOTOR DC

org 100h

;; Declarando los puertos

CONTROL EQU 8006H

;;

A EQU 0080H

;; Declarando puerto A

B EQU 0082H

;; Declarando puerto B

C EQU 0084H

;; Declarando puerto C

inicio:
;; Iniciando con el puerto "B"
movdx,B
inal,dx
cmp al,11111111b ;; El digito indica que todos los puertos estan en 1
je inicio ;; Este salto o bucle es para que no realize ninguna accion hasta que
presionemos
cmp al,11111110b ;; Es cuando el pulsador del horario esta presionado
je horario
cmp al,11111101b ;; Es cuando el pulsador del antihorarioesta presionado
jeantihorario
cmp al,11111011b ;; Es cuando el pulsador del stop esta presionado
je stop
;; Ahora definimos las accciones
horario:
movdx,A
mov al,11111110b ;; Mandamos solo 1 pulso al puente H para que gire horario
outdx,al

;; Hacemos tiempos para que no se lagee o cruze


nop
nop
nop
;;; Para los leds
movdx,C
mov al,11111001b
outdx,al
nop
nop
nop
;; Ahora para actualizar nuestras acciones hacemos
;;Denuevo las comparaciones para ver si al presionar denuevo sucede algo
;; Leemos lo que se ingresa en el puerto B
movdx,B
inal,dx
cmp al,11111101b ;; Es cuando el segundo pulsador esta presionado
jeantihorario
cmp al,11111011b ;; Cuando el pulso para horario y el de stop estan apretados
je stop
jmp horario ;; Regresamos al bucle para que no cambie la accionmietras no haya
pulsacion
antihorario:
movdx,A
mov al,11111101b
outdx,al

;; Retardando
nop
nop
nop
nop
;; Para los leds
movdx,C
mov al,10011111b
outdx,al
nop
nop
;; Ahora habilitamos para poder controlar mediante el proceso:
movdx,B
inal,dx
cmp al,11111110b ;; Es cuando presionamos el pulsador del horario
je horario
cmp al,11111011b ;; Es cuando presionamos el pulsador del antihorario
je stop
jmpantihorario ;; Regresamos al bucle para que no cambie la accion mientras no
haya pulsacion
stop
movdx,A
mov al,11111111b ;; Mandamos 1 logicos a las 2 entradas del puente H para que
no haya movimiento
outdx,al
;;Retardando

nop
nop
nop
;; Para los leds
movdx,C
mov al,10011001b
outdx,al
nop
nop
; Habilitando las demas acciones
movdx,B
inal,dx
cmp al,11111110b ;; Es cuando el primer pulsador esta presionado
je horario
cmp al,11111101b ;; Es cuando el segundo pulsador esta presionado
jeantihorario
jmp stop
ret
;;Cabe resaltar que las instrucciones NOP son solo para retardar

Вам также может понравиться