|
Mostrar Mensajes
|
Páginas: [1] 2
|
2
|
Programación / ASM / crear interrupción por hardware
|
en: 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: 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
|
|
|
3
|
Programación / ASM / Re: problema con contador que toma segundos del sistema
|
en: 28 Mayo 2019, 05:42 am
|
En estos momentos no puedo testear el code, por lo qie dices tienes el problema en convertir el entero 60 a 0? Tiene facil solucion, con una rutina de comparacion y un xor lo tendrias.
Un saludo.
Gracias por responder. Lo que me causa conflicto es el porque después del segundo 60 (00) no pasa al 01, en su lugar se termina el la ejecución.
|
|
|
4
|
Programación / ASM / problema con contador que toma segundos del sistema
|
en: 26 Mayo 2019, 08:14 am
|
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. 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
|
|
|
5
|
Programación / Programación C/C++ / Implementación de arreglo de 2-D como función
|
en: 28 Noviembre 2018, 04:40 am
|
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; 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) { int i, j; for (i= 0; i < renglon; i++) { for (j= 0; j < columna; j++) { } } }
|
|
|
6
|
Programación / Programación C/C++ / Re: Guardar una linea de enteros separados por un espacio en C
|
en: 9 Noviembre 2018, 21:06 pm
|
Lamento la demora, por cierto coloco este código super básico. Hace lo mismo pero no se compara a lo que han puesto hasta ahora. #include<stdio.h> #include<stdlib.h> #include<string.h> void mostrar_arreglo(int *A, int long_cad); void ordenacion_seleccion (int * A, int N); void intercambiar (int * A, int i, int j); int main() { int N, M, L, i, j=0; L= N+M; int arreglo_n[N], arreglo_m[M], arreglo_final[L]; for ( i= 0; i < N; i++) { scanf("%d", &arreglo_n [i ]); } for ( i= 0; i < M; i++) { scanf("%d", &arreglo_m [i ]); } for ( i = 0; i < L; i++) { if (i< N) { arreglo_final[i]= arreglo_n[i]; } else { arreglo_final[i]= arreglo_m[j]; j++; } } ordenacion_seleccion( arreglo_final, L); mostrar_arreglo( arreglo_final, L); } void ordenacion_seleccion (int * A, int N) {//ordena un conjunto por seleccion int i, j, k; for (i = 0; i < N - 1; i++) { for (k = i, j = i + 1; j < N; j++) if (A[j] < A[k]) k = j; if (k != i) intercambiar (A, i, k); } } void intercambiar (int * A, int i, int j) {//intercambiar lugares para completar la funcion ordenacion_seleccion int tmp = A[i]; A[i] = A[j]; A[j] = tmp; } void mostrar_arreglo(int *A, int long_cad) { int i= 0; for ( i= 0; i < long_cad; i++) { } }
|
|
|
8
|
Programación / Programación C/C++ / Re: Guardar una linea de enteros separados por un espacio en C
|
en: 7 Noviembre 2018, 21:58 pm
|
Salida: C:\codigos>tsss.exe 10 1 2 3 5 5 5 5 5 5 5 Numero 1: 1 Numero 2: 2 Numero 3: 3 Numero 4: 5 Numero 5: 5 Numero 6: 5 Numero 7: 5 Numero 8: 5 Numero 9: 5 Numero 10: 5
Codigo #include<stdio.h> #include<stdlib.h> #include<string.h> int main() { int N,i = 0,len; char **arreglo = NULL; char *buffer; char *token = NULL; char temporal[1000]; fgets(temporal ,1000,stdin ); fgets(temporal ,1000,stdin ); do { arreglo = realloc(arreglo , sizeof(char*) * (i +1)); //arreglo[i] = token; // Esta linea esta bien, pero realmente recomiendo moverl el contenido de esta posicion de memoria a uno que si controlemos nosotros arreglo [i ] = calloc(len +1,sizeof(char)); printf("Numero %i: %s\n",i +1,arreglo [i ]); i++; }while(i < N && token != NULL); }
Saludos! Muchas gracias, ayer tenia prisa y confundí el código con un ejercicio similar pero con mas entradas. Un amigo me estaba ayudando y me mando parte del código, tal vez y si lo copio, pero como tenia prisa no pudo explicarme bien que había hecho. Una ultima pregunta, ¿sabes si hay una función para pasar el valor que esta guardando el doble puntero (arreglo) a un array? Es decir, algo así como: **arreglo = arr[j]
|
|
|
9
|
Programación / Programación C/C++ / Re: Guardar una linea de enteros separados por un espacio en C
|
en: 7 Noviembre 2018, 00:31 am
|
Intenta con strtok
Tengo esto escrito pero no me deja avanzar en el GETS int main() { int total = 0, N, M; char **arreglo = NULL; char *buffer; // donde se guarda todo el texto char *token = NULL; while(token != NULL) { arreglo = realloc(arreglo , sizeof(char*) * (total +1)); arreglo[total] = token; printf("Nombre %i: %s\n",total +1,arreglo [total ]); total++; } }
Alguien me podría decir ¿en que me estoy equivocando?
|
|
|
10
|
Programación / Programación C/C++ / Guardar una linea de enteros separados por un espacio en C
|
en: 6 Noviembre 2018, 19:51 pm
|
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.
|
|
|
|
|
|
|