• Viernes 29 de Marzo de 2024, 12:39

Mostrar Mensajes

Esta sección te permite ver todos los posts escritos por este usuario. Ten en cuenta que sólo puedes ver los posts escritos en zonas a las que tienes acceso en este momento.


Temas - AJJENJJO

Páginas: [1]
1
ASM (Ensamblador) / Mostrar Hora, Minutos Y Segundos X Pantalla (8086)
« en: Sábado 4 de Diciembre de 2004, 10:45 »
Hola, querría saber si alguien m puede ayudar para poder mostrar la horas, minutos y segundos del ordenador por pantalla; con este código sólo se m muestra bien la hora, pro no m va bien los minutos y no sé q hacer.

.MODEL SMALL

.STACK 100

.DATA
   min DW 1
.CODE

   MOV AL,3h    ;establece modo texto
   MOV AH,0
   INT 10h

   XOR AX,AX
   MOV ES,AX
   MOV DI,1Ch

   CLI         ;inhibir interrupciones
   MOV AX,OFFSET reloj   ;desplazamiento de la rutina de usuario
   MOV ES:[DI],AX      ;desplazamiento a tabla de vectores de int.
   MOV ES:[DI+2],CS   ;segmento a tabla de vectores de int.
   STI         ;activar interrupciones

   MOV DX, OFFSET residente
   ;dirección de la instrucción siguiente a la última de la rutina que debe quedar residente

reloj:
   MOV AX,40h      ;segmento
   MOV ES,AX      ;empleamos el segmento extra
   MOV SI,6Ch      ;desplazamiento
   MOV AX,ES:[SI]      ;parte inferior contador
   MOV DX,ES:[SI+2]   ;parte superior contador
   MOV BX,32760      ;1/2 hora
   DIV BX         ;DX=resto, AX=horas*2
   SHR AX,1      ;AX=horas
   MOV CH,AL      ;hh:mm:ss pasan a CH:CL:DH
   MOV min,DX         ;guardamos los minutos antes de machacar

   MOV AL,CH
   MOV BH,10
   DIV BH

;MOSTRAMOS PRIMER DIGITO DE LA HORA
   MOV BX,0B800h      ;metemos en BX la posición donde se sitúa
   MOV ES,BX      ;empleamos el segmento extra
   MOV BX,144      ;desplazamiento el modo texto      
   MOV CL,48      ;carácter a mostrar por pantalla
   ADD CL,AL
   MOV ES:[BX],CL

;MOSTRAMOS SEGUNDO DIGITO DE LA HORA
   MOV BX,0B800h      ;metemos en BX la posición donde se sitúa
   MOV ES,BX      ;empleamos el segmento extra
   MOV BX,146      ;desplazamiento el modo texto      
   MOV CL,48      ;carácter a mostrar por pantalla
   ADD CL,AH
   MOV ES:[BX],CL

;MOSTRAMOS LOS DOS PUNTOS
   MOV BX,0B800h      ;metemos en BX la posición donde se sitúa
   MOV ES,BX      ;empleamos el segmento extra
   MOV BX,148      ;desplazamiento el modo texto      
   MOV CL,':'      ;carácter a mostrar por pantalla
   MOV ES:[BX],CL   

   MOV DX,0
   MOV AX,min
   MOV BX,1092      ;min
   DIV BX   
   MOV AH,0
   MOV CL,AL      ;DX=resto, AX=MIN
            ;hh:mm:ss pasan a CH:CL:DH
   MOV BH,10
   DIV BH

;MOSTRAMOS PRIMER DIGITO DE LOS MINUTOS
   MOV BX,0B800h      ;metemos en BX la posición donde se sitúa
   MOV ES,BX      ;empleamos el segmento extra
   MOV BX,150      ;desplazamiento el modo texto      
   ADD CL,48      ;carácter a mostrar por pantalla
   ADD CL,AL
   MOV ES:[BX],CL
   

;MOSTRAMOS SEGUNDO DIGITO DE LOS MINUTOS
   MOV BX,0B800h      ;metemos en BX la posición donde se sitúa
   MOV ES,BX      ;empleamos el segmento extra
   MOV BX,152      ;desplazamiento el modo texto      
   ADD CL,48      ;carácter a mostrar por pantalla
   ADD CL,AH
   MOV ES:[BX],CL
   
   
;AQUI FALTA CONVERSION PARA MIN Y SEG, CON LAS 4 ULT INST PERO 1092 Y QUEDA DX=0 AX=MIN
;IGUAL CON SEG


residente:
   INT 27h         ;solicitud a DOS de TSR




END

He visto q hay un post referido a esto, pro va a través de interrupciones. Y yo no lo quiero hacer así, yo lo quiero hacer a través del segmento de datos, y una vez hecho bien dejarlo resident

A vé si m podéis ayudar, GRACIAS

Páginas: [1]