MEXICO, AYUDA POR FAVOR

DC SISTE
21 de Noviembre del 2003
NECESITO ENTREGAR 2 PROGRAMAS CON APLICACION EN ENSAMBLADOR Y FALTE 1 MES AL CURSO POR ENFERMEDAD NO SE QUE HACER ALGUIEN ME PUEDE MANDAR 2 PROGRAMAS EN ENSAMBLADOR QUE HAGAN ALGO APLICABLE.

MIL GRACIAS

felipe
21 de Noviembre del 2003
espero te sirvan:
el primer programa es una calculadora:

MODEL SMALL

.DATA

ERROR DB '...SIGNO DESCONOCIDO, INTENTA DE NUEVO','$'
OPERA1 DB 'INTRODUZCA EL PRIMER OPERADOR: ','$'
OPERA2 DB 'INTRODUZCA EL SEGUNDO OPERADOR: ','$'
OPERAC DB 'OPERACION A REALIZAR: ','$'
ERRDIG DB '...OPERADOR EXEDE DE 4 DIGITOS,INTENTA DE NUEVO','$'
RESULT DB 'RESULTADO: ','$'

MENU DB 10,13,09,'+',10,13,09,'-',10,13,09,'*',10,13,09,'/',10,13,'$'
DIGITOS DB 7,?,7 DUP('$'),'$'
SIGNO DB 3,?,3 DUP('0'),'$'

BASE DW 1
CAMB DW 0
EXCH DW ?

.CODE

CALCULA PROC NEAR
MOV AX,@DATA
MOV DS,AX
CALL CLEAR

PROC1: CALL UBICA1
MOV AH,09H
LEA DX,OPERA1
INT 21H

MOV AH,0AH
LEA DX,DIGITOS
INT 21H

CMP DIGITOS[1],06H
JAE MAL1
CMP DIGITOS[2],2DH
JNE PROC4
MOV SIGNO[2],01H
JMP PROC4

MAL1: CALL UBICA6
MOV AH,09H
LEA DX,ERRDIG
INT 21H
JMP PROC1

PROC4: CALL BINARIO
MOV AX,CAMB
MOV EXCH,AX

PROC2: CALL UBICA2
MOV AH,09H
LEA DX,OPERA2
INT 21H
MOV AH,0AH
LEA DX,DIGITOS
INT 21H
CMP DIGITOS[1],06H
JAE MAL2
CMP DIGITOS[2],2DH
JNE PROC5
MOV SIGNO[3],01H
JMP PROC5

MAL2: CALL UBICA5
MOV AH,09H
LEA DX,ERRDIG
INT 21H
JMP PROC2

PROC5: MOV CAMB,0000H
CALL BINARIO

INIC: CALL UBICA3
MOV AH,09H
LEA DX,OPERAC
INT 21H
CALL SALIDA
MOV AH,02H
MOV DL,AL
INT 21H
MOV SI,0003H
MOV CX,04H

INIC2: CMP AL,MENU[SI]
JE INIC1
ADD SI,0004H
LOOP INIC2
MOV AH,09H
LEA DX,ERROR
INT 21H
JMP INIC

INIC1: CMP AL,2BH
JNE OPERAC1
CMP SIGNO[2],01H
JNE SIGNO1
NEG EXCH

SIGNO1: CMP SIGNO[3],01H
JNE SIGNO2
NEG CAMB

SIGNO2: MOV AX,EXCH
ADD AX,CAMB
JNS SIGNO3
NEG AX
MOV SIGNO[4],01H
JNC SIGNO3
MOV DIGITOS[3],1

SIGNO3: CALL ASCII
CALL RESULTA
JMP FINAL1

OPERAC1: CMP AL,2DH
JNE OPERAC2
CMP SIGNO[2],01H
JNE RE1
NEG EXCH

RE1: CMP SIGNO[3],01H
JNE RE2
NEG CAMB

RE2: MOV AX,EXCH
SUB AX,CAMB
JNS RE3
NEG AX
MOV SIGNO[4],01H
JNC RE3
MOV DIGITOS[3],1

RE3: CALL ASCII
CALL RESULTA
JMP FINAL1

OPERAC2: CMP AL,2AH
JNE OPERAC3
CMP SIGNO[2],01H
JNE SELEC1
MOV SIGNO[4],01H

SELEC1: CMP SIGNO[3],01H
JNE SELEC2
MOV DL,SIGNO[3]
CMP SIGNO[4],DL
JE SELEC3
MOV SIGNO[4],01H
JMP SELEC2

SELEC3: MOV SIGNO[4],00H

SELEC2: MOV AX,EXCH
MUL CAMB

SELEC4: CALL ASCII
CALL RESULTA
JMP FINAL1

OPERAC3: CMP AL,2FH
JNE FINAL1
CMP SIGNO[2],01H
JNE DETER1
MOV SIGNO[4],01H

DETER1: CMP SIGNO[3],01H
JNE DETER2
MOV DL,SIGNO[3]
CMP SIGNO[4],DL
JE DETER3
MOV SIGNO[4],01H
JMP DETER2

DETER3: MOV SIGNO[4],00H

DETER2: MOV AX,EXCH
XOR DX,DX
DIV CAMB

DETER4: CALL ASCII
CALL RESULTA
JMP FINAL1

FINAL1: CALL SALIDA
MOV AX,4C00H
INT 21H

CALCULA ENDP

CLEAR PROC NEAR
MOV AX,0600H
MOV BX,1A00H
MOV CX,0000
MOV DX,184FH
INT 10H
RET
CLEAR ENDP

UBICA1 PROC SUBSYS
MOV AH,02H
MOV BH,00H
MOV DX,0606H
INT 10H
RET
UBICA1 ENDP


UBICA2 PROC SUBSYS
MOV AH,02H
MOV BH,00H
MOV DX,0806H
INT 10H
RET
UBICA2 ENDP

UBICA3 PROC SUBSYS
MOV AH,02H
MOV BH,00H
MOV DX,0A06H
INT 10H
RET
UBICA3 ENDP

UBICA4 PROC SUBSYS
MOV AH,02H
MOV BH,00H
MOV DX,1010H
INT 10H
RET
UBICA4 ENDP

UBICA5 PROC SUBSYS
MOV AH,02H
MOV BH,00H
MOV DX,1106H
INT 10H
RET
UBICA5 ENDP

UBICA6 PROC SUBSYS
MOV AH,02H
MOV BH,00H
MOV DX,1206H
INT 10H
RET
UBICA6 ENDP

BINARIO PROC NEAR
MOV BX,10
MOV CH,00H
MOV CL,DIGITOS[1]
MOV DI,CX
INC DI
CMP DIGITOS[2],2DH
JNE BINA
DEC CX
BINA: MOV AL,DIGITOS[DI]
AND AX,000FH
MUL BASE
ADD CAMB,AX
MOV AX,BASE
MUL BX
MOV BASE,AX
DEC DI
LOOP BINA
MOV BASE,0001H
RET
BINARIO ENDP

ASCII PROC NEAR
MOV CX,06
MOV SI,0002
ASC3: MOV DIGITOS[SI],00H
INC SI
LOOP ASC3
MOV CX,0010
MOV SI,0007
ASC1: CMP AX,CX
JB ASC2
XOR DX,DX
DIV CX
OR DL,30H
MOV DIGITOS[SI],DL
DEC SI
JMP ASC1
ASC2: OR AL,30H
MOV DIGITOS[SI],AL
RET
ASCII ENDP

RESULTA PROC NEAR
CALL UBICA4
MOV AH,09H
LEA DX,RESULT
INT 21H
CMP SIGNO[4],01H
JNE RES1
MOV DIGITOS[2],2DH
RES1: LEA DX,DIGITOS[2]
INT 21H
RET
RESULTA ENDP

SALIDA PROC NEAR
MOV AH,10H
INT 16H
RET
SALIDA ENDP


.STACK

END CALCULA


este otro programa es para identificar que tecla pulsaste en el teclado:

.MODEL SMALL


.DATA

ORDEN DB 'POR FAVOR PULSA UNA TECLA... $ '
DESPL DB 'PULSASTE LA TECLA: ',"$"
REG DB ?
REG1 DB ?

.CODE

;PROGRAMA PRINCIPAL

TECLEA PROC NEAR
MOV AX,@DATA ; INICIALIZACION DEL SEGMENTO
MOV DS,AX ; MOVIMIENTO DE REGISTRO
CALL LIMPIA ; LIMPIAR PANTALLA
CALL POSIC
MOV DX,OFFSET ORDEN
MOV AH,09H
INT 21H
CALL LEE
CALL POSIC1
MOV DX, OFFSET DESPL
MOV AH,09H
INT 21H
CALL ESCRIBE
MOV AH,4CH
INT 21H
TECLEA ENDP

LEE PROC NEAR
MOV AH,10H
INT 16H

CMP AH,3BH
JE UNO
JMP FALSO1
UNO: JMP CAMB1

FALSO1:
CMP AH,3CH
JE DOS
JMP FALSO2
DOS: JMP CAMB2


FALSO2:
CMP AH,3DH
JE TRES
JMP FALSO3
TRES: JMP CAMB3


FALSO3:
CMP AH,3EH
JE CUATRO
JMP FALSO4
CUATRO: JMP CAMB4


FALSO4:
CMP AH,3FH
JE CINCO
JMP FALSO5
CINCO: JMP CAMB5

FALSO5:
CMP AH,40H
JE SEIS
JMP FALSO6
SEIS: JMP CAMB6


FALSO6:
CMP AH,41H
JE SIETE
JMP FALSO7
SIETE: JMP CAMB7


FALSO7:
CMP AH,42H
JE OCHO
JMP FALSO8
OCHO: JMP CAMB8


FALSO8:
CMP AH,43H
JE NUEVE
JMP FALSO9
NUEVE: JMP CAMB9


FALSO9:
CMP AH,44H
JE DIEZ
JMP FALS10
DIEZ: JMP CAMBA


FALS10:
CMP AH,45H
JE ONCE
JMP FALS11
ONCE: JMP CAMBB


FALS11:
CMP AH,85H
JE DOCE
JMP FALS12
DOCE: JMP CAMBC


FALS12:
CMP AH,86H
JE TRECE
JMP FALS13
TRECE: JMP CAMBD


FALS13:
CMP AH,01H
JE CATORCE
JMP FALS14
CATORCE: JMP ESCAPE


FALS14:
CMP AH,0EH
JE QUNCE
JMP FALS15
QUNCE: JMP BACKS


FALS15:
CMP AH,0FH
JE DIESEIS
JMP FALS16
DIESEIS: JMP TAB


FALS16:
CMP AH,1CH
JE DIESIET
JMP FALS17
DIESIET: JMP ENT


FALS17:
CMP AH,2FH
JE DIESOCH
JMP FALS18
DIESOCH: JMP SLASH


FALS18:
CMP AH,47H
JE DIESNUE
JMP FALS19
DIESNUE: JMP INICIO


FALS19:
CMP AH,4FH
JE VEINTE
JMP FALS20
VEINTE: JMP FIN


FALS20:
CMP AH,49H
JE VEINTUN
JMP FALS21
VEINTUN: JMP PAGEUP


FALS21:
CMP AH,51H
JE VEINDOS
JMP FALS22
VEINDOS: JMP PAGEDN


FALS22:
CMP AH,50H
JE VEINTRE
JMP FALS23
VEINTRE: JMP DOWNA


FALS23:
CMP AH,4BH
JE VEINCUA
JMP FALS24
VEINCUA: JMP LEFTA


FALS24:
CMP AH,4DH
JE VEINCIN
JMP FALS25
VEINCIN: JMP RIGHTA


FALS25:
CMP AH,48H
JE VEINSEI
JMP FALS26
VEINSEI: JMP UPA


FALS26:
CMP AH,52H
JE VEINSIE
JMP FALS27
VEINSIE: JMP INS1


FALS27:
CMP AH,53H
JE VEINOCH
JMP FALS28
VEINOCH: JMP DEL

FALS28:
CMP AH,1DH
JE VEINOCH
JMP FALS29
VEINNUE: JMP CTRL




FALS29:
JMP SINCAM

CAMB1: MOV AL,31H
JMP CAMBF

CAMB2: MOV AL,32H
JMP CAMBF

CAMB3: MOV AL,33H
JMP CAMBF

CAMB4: MOV AL,34H
JMP CAMBF

CAMB5: MOV AL,35H
JMP CAMBF

CAMB6: MOV AL,36H
JMP CAMBF

CAMB7: MOV AL,37H
JMP CAMBF

CAMB8: MOV AL,38H
JMP CAMBF

CAMB9: MOV AL,39H
JMP CAMBF

CAMBA: MOV AL,41H
JMP CAMBF

CAMBB: MOV AL,42H
JMP CAMBF

CAMBC: MOV AL,43H
JMP CAMBF

CAMBD: MOV AL,44H
JMP CAMBF

ESCAPE: MOV AL,53H
JMP CAMBES

BACKS: MOV AL,41H
JMP CAMBBA

TAB: MOV AL,54H
JMP CAMBTA

ENT: MOV AL,4EH
JMP CAMBEN

SLASH: MOV AL,4CH
JMP CAMBSL

INICIO: MOV AL,4EH
JMP CAMBINC

FIN: MOV AL,49H
JMP CAMBFI

PAGEUP: MOV AL,55H
JMP CAMBPU

PAGEDN: MOV AL,44H
JMP CAMBPD

DOWNA: MOV AL,41H
JMP CAMBDA

LEFTA: MOV AL,41H
JMP CAMBLA

RIGHTA: MOV AL,41H
JMP CAMBRA

UPA: MOV AL,41H
JMP CAMBUA

INS1: MOV AL,4EH
JMP CAMBINS

DEL: MOV AL,45H
JMP CAMBDEL

CTRL: MOV AL,54H
JMP CAMBCTRL




CAMBES: MOV REG1,45H
MOV REG,AL
JMP FINP

CAMBBA: MOV REG1,41H
MOV REG,AL
JMP FINP

CAMBTA: MOV REG1,54H
MOV REG,AL
JMP FINP

CAMBEN: MOV REG1,45H
MOV REG,AL
JMP FINP

CAMBSL: MOV REG1,53H
MOV REG,AL
JMP FINP

CAMBINC: MOV REG1,49H
MOV REG,AL
JMP FINP

CAMBFI: MOV REG1,46H
MOV REG,AL
JMP FINP

CAMBPU: MOV REG1,50H
MOV REG,AL
JMP FINP

CAMBPD: MOV REG1,50H
MOV REG,AL
JMP FINP

CAMBDA: MOV REG1,44H
MOV REG,AL
JMP FINP

CAMBLA: MOV REG1,4CH
MOV REG,AL
JMP FINP

CAMBRA: MOV REG1,52H
MOV REG,AL
JMP FINP

CAMBUA: MOV REG1,55H
MOV REG,AL
JMP FINP

CAMBINS: MOV REG1,49H
MOV REG,AL
JMP FINP

CAMBDEL: MOV REG1,44H
MOV REG,AL
JMP FINP

CAMBCTRL: MOV REG1,43H
MOV REG,AL
JMP FINP


SINCAM: MOV REG1,20H
MOV REG,AL
JMP FINP


CAMBF PROC NEAR
MOV REG1,46H
MOV REG,AL
JMP FINP
CAMBF ENDP

FINP: RET
LEE ENDP

ESCRIBE PROC NEAR
MOV AH,0AH
MOV AL,REG1
MOV CX,1
INT 10H
CALL POSIC2
MOV AH,0AH
MOV AL,REG
MOV CX,1
INT 10H
RET
ESCRIBE ENDP


LIMPIA PROC NEAR
MOV AX,0600H
MOV BX,1A00H
MOV CX,0000
MOV DX,184FH
INT 10H
RET
LIMPIA ENDP

POSIC PROC NEAR
MOV AH,02H
MOV BH,00H
MOV DX,0606H
INT 10H
RET
POSIC ENDP

POSIC1 PROC NEAR
MOV AH,02H
MOV BH,00H
MOV DX,0907H
INT 10H
RET
POSIC1 ENDP

POSIC2 PROC NEAR
MOV AH,02H
MOV BH,00H
MOV DX,091CH
INT 10H
RET
POSIC2 ENDP

.STACK

END TECLEA

que tengas buena suerte y te repongas.