;Programa que lee un numero de hasta de 4 digitos, en caso de que el ;numero de digitos sea menor a 4 se tendra que finalizar con un '.' DATOS SEGMENT PARA 'DATA' REN DB 10 COL DB 5 CADENA DB 'DAME UNA numero: $' RESUL DB 'El resultado es: $' DATOS ENDS PILA SEGMENT PARA STACK 'STACK' DW 100 DUP(0) PILA ENDS CODIGO SEGMENT PARA 'CODE' ASSUME CS:CODIGO, DS:DATOS, SS:PILA, ES:NOTHING LIMPIA_PANTALLA PROC NEAR MOV AX, 0600H MOV BH, 71H MOV CX, 0000H MOV DX, 184FH INT 10H RET LIMPIA_PANTALLA ENDP POSICIONA_CURSOR PROC NEAR MOV AH,02 MOV BH,00 MOV DH,REN MOV DL, COL INT 10H RET POSICIONA_CURSOR ENDP LEE PROC NEAR MOV AH,01 INT 21H RET LEE ENDP ESCRIBE PROC NEAR MOV AH,02 INT 21H RET ESCRIBE ENDP REVISA PROC NEAR CMP AL,'0' JL x CMP AL,'9' JG OTRO SUB AL,30H JMP xx OTRO:CMP AL,'A' JL x CMP AL,'F' JG OO SUB AL,37H JMP xx OO: CMP AL,'a' JL x CMP AL,'f' JG x SUB AL,57H JMP xx x:MOV AL,0 xx:RET REVISA ENDP EMPACA PROC NEAR MOV CL,4 SHL BX,CL MOV AH,0 OR BX,AX RET EMPACA ENDP LEE_NUM PROC NEAR MOV BX,0 MOV CH,0 MOV AL,0 LL: CMP CH,4 JE FIN CALL LEE CMP AL,'.' JE FIN CALL REVISA CALL EMPACA INC CH JMP LL FIN:RET LEE_NUM ENDP LETRERO PROC NEAR MOV AH,09 INT 21H RET LETRERO ENDP COMPARA PROC NEAR CMP AH,0Ah JL y1 ADD AH,37h JMP yy1 y1:ADD AH,30h yy1:RET COMPARA ENDP DESPLIEGA_NUM PROC NEAR MOV CH,0 D: MOV AX,0F000h AND AX,BX MOV CL,4 SHR AH,CL SHL BX,CL CALL COMPARA MOV DL,AH CALL ESCRIBE INC CH CMP CH,4 JNE D RET DESPLIEGA_NUM ENDP PRINCIPAL PROC FAR PUSH DS XOR AX, AX PUSH AX MOV AX, DATOS MOV DS, AX MOV ES, AX CALL LIMPIA_PANTALLA CALL POSICIONA_CURSOR LEA DX, CADENA CALL LETRERO CALL LEE_NUM CALL DESPLIEGA_NUM RET PRINCIPAL ENDP CODIGO ENDS END PRINCIPAL