Menú

Mostrar Mensajes

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

Mostrar Mensajes Menú

Temas - FERNIIIIN

#1
ASM / crear interrupción por hardware
28 Mayo 2019, 06:23 AM
Hola a todos, tengo una super pregunta, ¿Como se crea una interrupción por hardware?

Tengo un programa que hace un conteo del 0 al 59 y cuando llega a 60 pasa denuevo al 0 y reinicia el ciclo, hasta ahi voy bien, pero no se como hacer que al presionar la tecla "1" se active un retraso y que al presionar "2" se active otro retraso diferente.


En código tengo lo siguiente:
Código (asm) [Seleccionar]

org 100h

.model small

.stack 100

.data
u db 0
d db 0
v db 0
tiempo db 0

.code

start:
mov cx,00h ; inicializo contador en cero

inicio:
mov tiempo,cl
;call retraso1s  ;salto a retraso de 1s
;call retraso5s  ;salto a retraso de 1s
;call retraso10s ; salto a retraso de 10s
mov cl,tiempo
cmp cl,10 ; compara si en el contador es mayor a 9
jc aumento ;Destino es menor que origen
;jne repite ; sino es verdadera la ultima comparacion regresa a repite
jz separar ;Numeros iguales
jnz separar ;Destino mayor a origen
cmp d,06h
jc inicio ;Destino es menor que origen
jz start ;Numeros iguales

       
separar:
mov al,cl
AAM
mov u,al
mov al,ah
AAM
mov d,al
;cmp d,06h
;jz salir ;Numeros iguales
mov ah,02h
mov dl,d
add dl,30h
int 21h   
mov ah,02h
mov dl,u
add dl,30h
int 21h
inc cl ; incremento el contador en uno
jmp inicio
ret

aumento:
mov dl,cl ; muevo el valor del contador a dl para imprimir
inc cl ; incremento el contador en uno
add dl,30h ; sumo 30h a dl para convertirlo al codigo ascii y poder imprimirlo
mov ah,02h ; funcion para imprimir un caracter
int 21h ; imprimo
jmp inicio
ret       
       

retraso1s:
    MOV     CX, 0FH
    MOV     DX, 4240H
    MOV     AH, 86H
    INT     15H   
ret

retraso4s:
    MOV     CX,3aH
    MOV     DX,9680H
    MOV     AH,86H
    INT     15H   
ret

retraso5s:
    MOV     CX,45H
    MOV     DX,9680H
    MOV     AH,86H
    INT     15H   
ret


retraso10s:
    MOV     CX, 98H
    MOV     DX, 9680H
    MOV     AH, 86H
    INT     15H   
ret


salir:
.exit
end



Espero que me puedan dar una idea de como continuar
#2
Hola a todos, estoy creando un contador que toma los segundos del sistema y sigue con el conteo cada segundo y manda a imprimir el mismo, pero tengo un problema en la conversión de 60 a 00 y validarlo al momento de comparar con el segundo actual.

Código (mpasm) [Seleccionar]

org 100h

.model small


.stack 100


.data
s0      db 30h
s1      db 30h
sold    db 0
snew    db 0



.code
.startup
    init:
mov ah,2ch 
int 21h     ;dh =segundos del sistema
        mov sold,dh
        call hora       
add dh, 1  ;dh= segundo se sistema +1
mov snew, dh ;snew es el segundo posterior
        cmp snew,60
jz seis0  ;Numeros iguales
        jmp sincronizados           
       

sincronizados:   
mov ah,2ch 
int 21h     ;dh =segundos del sistema
mov bl,dh
    mov bh,snew
cmp bl, bh ;compara (new segundo) contra (old segundo + 1)
jne sincronizados ;salto si no son iguales
jmp init
ret
 

seis0:
mov ah,2ch 
int 21h     ;dh =segundos del sistema
        mov sold,dh
cmp sold,00
jnz seis0 ;Destino mayor a origen
mov sold,00 ;reset sold a 0
call separa
mov snew,1
jmp sincronizados
ret


    hora:
       
        cmp sold,10
        jae separa
jmp sincronizados

    ret
   
    separa:
        mov al,sold
        AAM
        mov bx,ax
        mov ah,02h
        mov dl,bh
        add dl,30h
        int 21h
        mov ah,02h
        mov dl,bl
        add dl,30h
        int 21h
    ret



Esto es lo que tengo hecho.
El contador va bien hasta el momento en que va iniciar un nuevo ciclo de conteo (es decir, va del segundo del sistema hasta el 60 o 00) y de ahi se queda en un ciclo, nunca pasa al 01.

Espero que me puedan ayudar
#3
Buenas chicos, intento implementar una función que imprima los valores de un arreglo 2-d, pero no se que poner en el parámetro donde va la segunda dimensión, con malloc pido memoria para un int o que me recomiendan.

Aqui tengo el problema:

void muestra(int matriz[][], int renglon, int columna)


El valor de las dimensiones de mi array es variable, bien puede ser 2x 3 o 20x20.
Lo que tengo de código es:

void muestra(int matriz[][], int renglon, int columna);

int main() {
  int M, N, i, j;

scanf("%d %d", &M, &N);

  int b_minas [M][N];

  for (i= 0; i < M; i++) {
    for (j= 0; j < N; j++) {
    scanf("%d", &b_minas[i][j]);
    }
  }
  muestra( b_minas, M, N);


  return 0;
}

void muestra(int matriz[][], int renglon, int columna) {
  printf("\n");
  int i, j;

  for (i= 0; i < renglon; i++) {
    for (j= 0; j < columna; j++) {
    printf("%d ", matriz[i][j]);
    }
    printf("\n");
  }
}
#4
Buenas dias/tardes/noches a todos tengo un problema en el que espero que me puedan ayudar.

Necesito guardar un serie de números enteros que están separados por un espacio en un arreglo, es decir, me dan un número N que la longitud de mi arreglo A[N] y la siguiente entrada son N números que debo guardar en A, ejemplo:

5
1 3000 466 588 57778


Mi duda es como guardarlos, si estuvieran juntos los números o los ingresaran un seguido de otro seria fácil, pero de esta forma no se me ocurre que hacer.

Gracias a todo los que puedan darme unas ideas que implementar.
#5
Por favor alguien que me ayude con lo siguiente:

Estoy creando un archivo del reg para que borre la contra del asesor de contenido y otro para que coloque la clave pero el problema me surg a la hora de querer meter la clave al registro.
Meti una clave al asesor y vi el registro, obtuve el resultado en hexadecimal:

34 9A C6 E4 28 83 D1 75 5F F7 D0 C8 0B 36 B6 4C

lo pase a Assci y obtuve:

4šÆä(ƒÑu_÷ÐÈ 6¶L

Alguien que me pueda ayudar a ver el metodo de encriptacion que se utiliza en esta clabe para que pueda cifrar mis claves y meterlas al registro desde un archivo.reg


:huh: :huh: :huh: