Sunteți pe pagina 1din 14

----para imprimir un digito

MOV AH, 14
MOV BX, 0
MOV AL, NUM ;UN SOLO DIGITO
ADD AL, 48
INT 10H

----PARA IMPRIMIR 2 DIGITOS

MOV AL,NUM ;NUM DE 2 DIGITOS


MOV AH,0
MOV DL,10
DIV DL ;AL=COCIENTE AH=RESIDUO
MOV DL,AH ;RESPALDA AH Y AL YA TIENE EL PRIMER DIGITO A IMPRIMIR

MOV AH, 14
MOV BX, 0 ;PRIMER DIGITO
ADD AL, 48
INT 10H ;IMPRIME

MOV AH, 14
MOV BX, 0
MOV AL, DL ;SEGUNDO DIGITO
ADD AL, 48
INT 10H ;IMPRIME

----PARA SUMAR
ADD destino,fuente

----PARA RESTAR
SUB destino,fuente

----PARA IMPRIMIR UN MENSAJE


en datos:
MENS1 DB 'EL NUMERO: $'

MOV AH,9
LEA DX,MENS1
INT 21H

----PARA IMPRIMIR UN SALTO DE LINEA


en datos:
SALTO DB 10, 13, '$'

MOV AH,9
LEA DX, SALTO
INT 21H

----PARA UN CICLO

MOV CX, 10 ;CANTIDAD DE VECES A REPETIR EL CICLO


CICLO:

;CODIGO

LOOP CICLO ;REGRESA A CILCO Y CX DECREMENTA EN 1


----PARA DIVIDIR DW ENTRE DB

MOV AX,VAL1 ;VAL1 ES DW


DIV BB ;BB ES DB
;COCIENTE=AL RESIDUO=AH

----PARA DIVIDIR DB ENTRE DB

MOV AL,VAL1 ;VAL1 ES UN DB


CBW ;CONVIERTE DE BYTE A PALABRA ESQUIVALE A MOV AH,0
DIV BBB ; BBB ES DB
;COCIENTE=AL RESIDUO=AH

----PARA DIVIDIR DW ENTRE DW

MOV CX,VAL1 ;VAL1 ES DW


CWD ;CONVIERTE DE PALABRA A PALABRA DOBLE EQUIVALE A MOV DX,0
DIV BBB ;BBB ES DW
;COCIENTE=AX RESIDUO=DX

-----PARA DIVIDIR PALABRA DOBLE ENTRE UNA PALABRA

MOV DX,VALP1 ;VALP1 ES DW Y ES LA PARTE MAS SIGNIFICATIVA


MOV AX,VALP2 ;VALP2 ES DW Y ES LA PARTE MENOS SIGNIFICATIVA
DIV BBB ;BBB ES DW
;COCIENTE=AX, RESIDUO=DX

----PARA MULTIPLICAR DB POR BD


MOV AL,AAA ;AAA ES DB
MUL BBB ;BBB ES DB
;PRODUCTO=AX

----PARA MULTIPLICAR DW POR DW


MOV AX,AAA ;AAA ES DW
MUL BBB ;BBB ES DW
;PRODUCTO PARTE MAS SIGNIFICATIVA DX Y MENOS SIGNIFICATIVA AX

----PARA MULTIPLICAR DB POR DW


MOV AL,AAA ;AAA ES DB
CBW ;CONVIERTE DE BYTE A PALABRA
MUL BBB ;BBB ES DW
;PRODUCTO MAS SIGNIFICATIVA=DX MENOS SIGNIFICATIVA=AX

----SALTOS
JA etiqueta_corta
Salta si el destino es mayor que la fuente. CF=0 y ZF=0

JAE etiqueta_corta
Salta si el destino es mayor o igual que la fuente

JB etiqueta_corta
Si el destino es menor que la fuente. CF=1

JBE etiqueta_corta
Si el destino es menor o igual que la fuente.

JCXZ etiqueta_corta
Salta si CX es cero
JE etiqueta_corta
JZ
Salta si los dos operandos son iguales es decir si ZF=1

JNE etiqueta_corta
Salta si no son iguales

JMP etiqueta_corta
Salto incondicional y directo

JO etiqueta_corta
Salta si hay Sobreflujo

JP etiqueta_corta
Salta si hay Paridad

JC etiqueta_corta
Salta si hay acarreo

JNP etiqueta_corta
Salta si no hay paridad

JNO etiqueta_corta
Salta si no hay sobreflujo

JNC etiqueta_corta
Salta si no hay acarreo

-------PROGRAMAS FUNCINANDO

------IMPRIMIR 3 DIGITOS, NUM ES EL NUMERO A IMPRIMIR

PILA SEGMENT PARA STACK 'STACK'


DW 1024 DUP(0)
PILA ENDS
DATA SEGMENT PARA PUBLIC 'DATA'
NUM DW 928 ;IMPRIMIR
DATA ENDS
CSEG SEGMENT PARA PUBLIC 'CODE'
MAIN PROC FAR
ASSUME CS:CSEG,DS:DATA,SS:PILA
PUSH DS
MOV AX,0
PUSH AX
MOV AX,SEG DATA
MOV DS,AX
;PP AQUI VA EL CODIGO
MOV AX, NUM
MOV DL, 100
DIV DL ;AL=COCIENTE AH=RESIDUO AL=9 AH=28
MOV DL, AH
MOV AH, 14
MOV BX, 0
ADD AL, 48
INT 10H
MOV AL, DL
MOV AH, 0
MOV DL, 10 ;CBW
MOV DL, 10
DIV DL ;AL=COCIENTE AH=RESULTADO AL=2 AH=8
MOV DL, AH ;RESPALDAR
MOV AH, 14
MOV BX, 0
ADD AL, 48
INT 10H
MOV AL, DL
ADD AL, 48
INT 10H
RET
MAIN ENDP
CSEG ENDS
END MAIN

--------------IMPRIMIR 5 DIGITOS, NUM ES EL NUMERO A IMPRIMIR, DIVI ES "DIVI DW


10000" PARA SEPARAR LOS 5 DIGITOS Y DIG ES UN VECTOR PARA GUARDAR LOS DIGITOS

PILA SEGMENT PARA STACK 'STACK'


DW 1024 DUP(0)
PILA ENDS
DATA SEGMENT PARA PUBLIC 'DATA'
NUM DW 5084
DIG DB 0,0,0,0,0
DIVI DW 10000
PREG DB 1 ;BOOLEAN
DATA ENDS
CSEG SEGMENT PARA PUBLIC 'CODE'
MAIN PROC FAR
ASSUME CS:CSEG,DS:DATA,SS:PILA
PUSH DS
MOV AX,0
PUSH AX
MOV AX,SEG DATA
MOV DS,AX
;PP AQUI VA EL CODIGO PARA IMPRIMIR 5 DIGITOS
MOV CX, 5
MOV SI, 0
CICLO:
MOV AX, NUM ;32584
MOV DX, 0 ;CWD
DIV DIVI ;AX=COCIENTE RES=DX AX=3 DX=2584
MOV DIG[SI], AL
MOV NUM, DX
MOV AX, DIVI
MOV DX, 0 ;CWD
MOV BX, 10
DIV BX ;AX=COCIENTE DX=RES AX=1000 DX=0
MOV DIVI, AX
INC SI
LOOP CICLO

;IMPRIMIR DIG
MOV CX, 5
MOV DI, 0

CICLOI:
CMP PREG, 1
JNE IMPRIMIR
CMP DIG[DI], 0
JE NOIMPRIMIR
MOV PREG, 0
IMPRIMIR:
MOV AH, 14
MOV BX, 0
MOV AL, DIG[DI]
ADD AL, 48
INT 10H
NOIMPRIMIR:
INC DI
LOOP CICLOI

RET
MAIN ENDP
CSEG ENDS
END MAIN

---------- COMPARAR 2 NUMEROS

pila SEGMENT PARA STACK 'STACK'


DW 1024 DUP(0)
pila ENDS
DATA SEGMENT PARA PUBLIC 'DATA'
A DB 40
B DB 30
MENS1 DB 'A>=B$'
MENS2 DB 'B>A$'
DATA ENDS
CSEG SEGMENT PARA PUBLIC 'CODE'
MAIN PROC FAR
ASSUME CS:CSEG,DS:DATA,SS:PILA
PUSH DS
MOV AX,0
PUSH AX
MOV AX,SEG DATA
MOV DS,AX
; PP AQUI VA EL CODIGO
MOV AL, A
CMP AL,B
JB MENOR ;A<B
;SI NO SALTA A>=B
MOV AH, 9
MOV DX, OFFSET MENS1
INT 21H
JMP FIN
MENOR:
MOV AH,9
LEA DX, MENS2
INT 21H
FIN:
RET
MAIN ENDP
CSEG ENDS
END MAIN

------- BUSCAR EL MAYOR EN UN VECTOR DE 10 NUMEROS

pila SEGMENT PARA STACK 'STACK'


DW 1024 DUP(0)
pila ENDS
DATA SEGMENT PARA PUBLIC 'DATA'
ARR DB 5,4,8,9,6,5,3,2,1,3
MAYOR DB 0
MENS DB 'EL NUMERO MAYOR ES =$'
DATA ENDS
CSEG SEGMENT PARA PUBLIC 'CODE'
MAIN PROC FAR
ASSUME CS:CSEG,DS:DATA,SS:PILA
PUSH DS
MOV AX,0
PUSH AX
MOV AX,SEG DATA
MOV DS,AX
;PP AQUI VA EL CODIGO
MOV CX, 10 ;CONTROLA LAS ITERACIONES, CATIDAD DE NUMEROS
MOV DI, 0
MOV BX, OFFSET ARR
CICLO:
MOV DH, [BX][DI]
CMP DH, MAYOR ;5 , 0
JBE MENOR
;SI DH>MAYOR
MOV MAYOR, DH ;5
MENOR:
INC DI ;DI++
LOOP CICLO
;IMPRIMIR EL NUMERO MAYOR
MOV AH, 9
LEA DX, MENS
INT 21H

MOV AH,14
MOV BX, 0
MOV AL, MAYOR ;9
ADD AL, 48
INT 10H

;0 48 1 49 2 50
RET
MAIN ENDP
CSEG ENDS
END MAIN

-------VECES QUE SE REPITE UN NUMERO, SE PUEDE CAMBIAR EL NUMERO

pila SEGMENT PARA STACK 'STACK'


DW 1024 DUP(0)
pila ENDS
DATA SEGMENT PARA PUBLIC 'DATA'
ARR DB 8,5,7,6,4,5,6,5,3,5
CANTIDAD DB 0
MENS DB 'NUMERO DE VECES QUE SE REPITE 5: $'
DATA ENDS
CSEG SEGMENT PARA PUBLIC 'CODE'
MAIN PROC FAR
ASSUME CS:CSEG,DS:DATA,SS:PILA
PUSH DS
MOV AX,0
PUSH AX
MOV AX,SEG DATA
MOV DS,AX
;PP AQUI VA EL CODIGO
MOV CX, 10 ;CONTROLA LAS ITERACIONES
MOV SI, 0
CICLO:
MOV BL, ARR[SI]
CMP BL, 5 ; CAMBIAR EL NUMERO PARA COMPARAR CON OTRO
JE REPETIDO
JMP SIGUIENTE
REPETIDO:
INC CANTIDAD
SIGUIENTE:
INC SI
LOOP CICLO
MOV AH, 9
LEA DX, MENS
INT 21H
MOV AH, 14
MOV BX, 0
MOV AL, CANTIDAD
ADD AL, 48
INT 10H
RET
MAIN ENDP
CSEG ENDS
END MAIN

----- RANGOS DE NUMEROS

PILA SEGMENT PARA STACK 'STACK'


DW 1024 DUP(0)
PILA ENDS
DATA SEGMENT PARA PUBLIC 'DATA'
VEC DB 80,220,110,75,180,240,33,13,215,150
;RANGO1 >= 0 Y <=100 = 4
;RANGO2 >=101 Y <=200 = 3
;RANGO3 >=201 Y <=255 = 3
A DB 0
B DB 0
C DB 0
MENS1 DB 'CANTIDAD DE NUMEROS EN RANGO 1: $'
MENS2 DB 'CANTIDAD DE NUMEROS EN RANGO 2: $'
MENS3 DB 'CANTIDAD DE NUMEROS EN RANGO 3: $'
DATA ENDS
CSEG SEGMENT PARA PUBLIC 'CODE'
MAIN PROC FAR
ASSUME CS:CSEG,DS:DATA,SS:PILA
PUSH DS
MOV AX,0
PUSH AX
MOV AX,SEG DATA
MOV DS,AX
;PP AQUI VA EL CODIGO
MOV CX, 10
MOV SI, 0
CICLO:
MOV BL, VEC[SI]
CMP BL, 100
JBE R1
CMP BL, 200
JBE R2
INC C
JMP SIGUIENTE
R1:
INC A
JMP SIGUIENTE
R2:
INC B
JMP SIGUIENTE
SIGUIENTE:
INC SI
LOOP CICLO
MOV AH, 9
LEA DX, MENS1
INT 21H
MOV AH, 14
MOV BX, 0
MOV AL, A
ADD AL, 48
INT 10H
MOV AH, 9
LEA DX, MENS2
INT 21H
MOV AH, 14
MOV BX, 0
MOV AL, B
ADD AL, 48
INT 10H
MOV AH, 9
LEA DX, MENS3
INT 21H
MOV AH, 14
MOV BX, 0
MOV AL, C
ADD AL, 48
INT 10H
RET
MAIN ENDP
CSEG ENDS
END MAIN

------imprimir un vector de 10 elementos


PILA SEGMENT PARA STACK 'STACK'
DW 1024 DUP(0)
PILA ENDS
DATA SEGMENT PARA PUBLIC 'DATA'
VEC DB 9, 8, 4, 3, 6, 1, 0, 2, 7, 6
DATA ENDS
CSEG SEGMENT PARA PUBLIC 'CODE'
MAIN PROC FAR
ASSUME CS:CSEG,DS:DATA,SS:PILA
PUSH DS
MOV AX,0
PUSH AX
MOV AX,SEG DATA
MOV DS,AX
;PP AQUI VA EL CODIGO
MOV CX, 10
MOV DI, 0
CICLO:
MOV AH, 14
MOV BX, 0
MOV AL, VEC[DI]
ADD AL, 48
INT 10H

MOV AL, ','


INT 10H
INC DI
LOOP CICLO

RET
MAIN ENDP
CSEG ENDS
END MAIN

-----imprimir el codigo ascii

PILA SEGMENT PARA STACK 'STACK'


DW 1024 DUP(0)
PILA ENDS
DATA SEGMENT PARA PUBLIC 'DATA'
CONT DB 0
DATA ENDS
CSEG SEGMENT PARA PUBLIC 'CODE'
MAIN PROC FAR
ASSUME CS:CSEG,DS:DATA,SS:PILA
PUSH DS
MOV AX,0
PUSH AX
MOV AX,SEG DATA
MOV DS,AX
;PP AQUI VA EL CODIGO
MOV CX,256
CICLO:
MOV AH, 14
MOV BX, 0
MOV AL, CONT
INT 10H
MOV AL, ' '
INT 10H
INC CONT

LOOP CICLO
RET
MAIN ENDP
CSEG ENDS
END MAIN

---- si un numero es divisible entre 3

PILA SEGMENT PARA STACK 'STACK'


DW 1024 DUP(0)
PILA ENDS
DATA SEGMENT PARA PUBLIC 'DATA'
VEC DB 3,13,87,5,85,33,48,22,23,19
TOTAL DB 0
MENS1 DB 'NUMEROS DIVISIBLES ENTRE 3:',10,13,'$'
MENS2 DB 'TOTAL DE DIVISIVLES = $'
DATA ENDS
CSEG SEGMENT PARA PUBLIC 'CODE'
MAIN PROC FAR
ASSUME CS:CSEG,DS:DATA,SS:PILA
PUSH DS
MOV AX,0
PUSH AX
MOV AX,SEG DATA
MOV DS,AX
;PP AQUI VA EL CODIGO
MOV AH, 9
LEA DX, MENS1
INT 21H
MOV CX, 10
MOV SI, 0
CICLO:
MOV AL, VEC[SI]
MOV AH,0
MOV DL,3
DIV DL ;AL=COC RES=AH
CMP AH,0
JNE NODIV
INC TOTAL
MOV AL, VEC[SI]
MOV AH,0
MOV DL,10
DIV DL ;AL=COC RES=AH
MOV DL,AH
MOV AH,14
MOV BX,0
ADD AL,48
INT 10H
MOV AL, DL
ADD AL,48
INT 10H
MOV AL, 10
INT 10H
MOV AL, 13
INT 10H
NODIV:
INC SI
LOOP CICLO

MOV AH, 9
LEA DX,MENS2
INT 21H
MOV AH,14
MOV BX,0
MOV AL, TOTAL
ADD AL,48
INT 10H

RET
MAIN ENDP
CSEG ENDS
END MAIN

------saber cual numero es el que mas se repite de un vector de 15 numeros

PILA SEGMENT PARA STACK 'STACK'


DW 1024 DUP(0)
PILA ENDS
DATA SEGMENT PARA PUBLIC 'DATA'
VEC DB 1,2,0,4,5,6,0,8,9,1,2,3,4,5,6
VECM DB 15 DUP(0)
MAYOR DB 0
CON DB 0
C2 DB 0
DATA ENDS
CSEG SEGMENT PARA PUBLIC 'CODE'
MAIN PROC FAR
ASSUME CS:CSEG,DS:DATA,SS:PILA
PUSH DS
MOV AX,0
PUSH AX
MOV AX,SEG DATA
MOV DS,AX
;PP AQUI VA EL CODIGO
MOV SI, 0
MOV CON ,0
CICLO:
MOV CX, 10
CICLOI:
MOV AL, VEC[SI]
CMP CON, AL
JNE SIGUIENTE
INC C2
SIGUIENTE:
INC SI
LOOP CICLOI
MOV AL,CON
MOV AH,0
MOV DI,AX
MOV VECM[DI], C2
MOV C2, 0
INC CON
CMP CON,15 ; cambiar para la cantidad de numeros
JE FIN
LOOP CICLO
FIN:
MOV CX, 10
MOV DI, 0
CICLOF:
MOV AH, 14
MOV BX, 0
MOV AL, VECM[DI]
ADD AL, 48
INT 10H

MOV AL, ','


INT 10H
INC DI
LOOP CICLOF
RET
MAIN ENDP
CSEG ENDS
END MAIN

-----convertir numero a binario

PILA SEGMENT PARA STACK 'STACK'


DW 1024 DUP(0)
PILA ENDS
DATA SEGMENT PARA PUBLIC 'DATA'
NUM DB 145 ;NUMERO A CONVERTIR
MASCARA DB 80H ;128 PARA UN DW SERIA 8000H
MENS DB 'EL NUMERO EN BINARIO ES $'
BINARIO DB 8 DUP(0)
DATA ENDS
CSEG SEGMENT PARA PUBLIC 'CODE'
MAIN PROC FAR
ASSUME CS:CSEG,DS:DATA,SS:PILA
PUSH DS
MOV AX,0
PUSH AX
MOV AX,SEG DATA
MOV DS,AX
;PP AQUI VA EL CODIGO

MOV SI,0
MOV CX,8
CICLO:
MOV AL, NUM
AND AL, MASCARA
CMP AL,0
JE AGREGAR0
;AGREGAR1
MOV BINARIO[SI],1
JMP SIG
AGREGAR0:
MOV BINARIO[SI],0
SIG:
INC SI
MOV AL,MASCARA
SHR AL,1
MOV MASCARA, AL
LOOP CICLO
;MENSAJE
MOV AH,9
LEA DX,MENS
INT 21H
MOV CX,8
MOV DI,0
CICLOI:
MOV AH,14
MOV BX,0
MOV AL, BINARIO[DI]
ADD AL,48
INT 10H
INC DI
LOOP CICLOI
RET
MAIN ENDP
CSEG ENDS
END MAIN

----leer una contraseña

PILA SEGMENT PARA STACK 'STACK'


DW 1024 DUP(0)
PILA ENDS
DATA SEGMENT PARA PUBLIC 'DATA'
PASS DB '1234'
CAD DB 10 DUP (' '),'$'
MENS1 DB ' CONTRASENA CORRECTA $'
MENS2 DB ' INTENTALO DE NUEVO $'
MENS3 DB ' DAME LA CONTRASENA $'
DATA ENDS
CSEG SEGMENT PARA PUBLIC 'CODE'
MAIN PROC FAR
ASSUME CS:CSEG,DS:DATA,SS:PILA
PUSH DS
MOV AX,0
PUSH AX
MOV AX,SEG DATA
MOV DS,AX
;PP AQUI VA EL CODIGO
MOV DI,0
REG1:
MOV SI,0
MOV AH,9
LEA DX,MENS3
INT 21H
REG:
MOV AH,0 ;LEER EL CARÁCTER
INT 16H ;AL=CARÁCTER LEIDO
CMP AL,13
JE VERIFICAR
MOV CAD[SI],AL
MOV AH,14
MOV BX,0
MOV AL,'*'
INT 10H
INC SI
JMP REG
VERIFICAR:
CMP SI,4
JNE ERROR
;CHECAR CADA CARÁCTER
MOV CX,4
MOV SI,0
CICLOC:
MOV AL, PASS[SI]
CMP AL, CAD[SI]
JNE ERROR
INC SI
LOOP CICLOC
;CONTRASEÑA VALIDA
MOV AH,9
LEA DX, MENS1
INT 21H
JMP FIN
ERROR:
MOV AH, 9
LEA DX, MENS2
INT 21H
INC DI
CMP DI, 3
JNE REG1
FIN:
RET
MAIN ENDP
CSEG ENDS
END MAIN

S-ar putea să vă placă și