Hay un total de 123 Preguntas. | << >> |
Pregunta: | 45097 - PROGRAMA EN ENSAMBLADOR QUE SE CARGE AL INICIAR LA MAQUINA |
Autor: | Rodrigo Morales Alvarado |
Hola, quisiera saber si alguien me pude explicar como podemos guardar una rutina en el sector 0 pista 0 de un floppy para desplegar un mensaje haciendo uso de la interrupción 10.
Me han dicho que no es posible hacerla con el tasm, y que es recomendable hacerlo con el debug de ms-dos pero la verdad no tengo idea. Si me pueden proporcionar el codigo, por lo menos para cargar la rutina, se los agradeceria mucho Salu2 |
Respuesta: | Gabriel Amezquita |
primero entramos a DEBUG
c:>debug ensmablamos a memoria -a la maquina despliega 00c3:0100 escribir DW "mensaje que quieres guardar" y presionas 2 veces enter ahora para escribir el mensaje a disco: -w 100 0 0 1 donde w es escribir 100 lugar de la memoria donde esta el mensaje 0 unidad de disquette el primer 0 sector inicial el segundo 1 numero de sectores a guardar para leer el mesaje escrito cargarlo a memoria L 100 0 0 1 hay que asegurarse que exista disco y que tenga formato porque la funcion W y L solo funcionan en discos formateados con fat para escritura/lectura absoluta ( en cualquier formato de disco ) hay que hacer un programa utilizando la funcion 13 del BIOS |
Pregunta: | 45460 - COMO CARGAR UN PARAMETRO DESDE LINEA DE COMANDOS |
Autor: | Jose Murillo |
hola, quisiera saber como se carga un archivo como parametro desede la linea de comandos, gracias |
Respuesta: | Rafael Rodriguez |
En es:[80h] puedes encontrar en número de caracteres que se han pasado como parámetros. En 81h hay un espacio en blanco y a partir de 82h están los parámetros.
Aquí pongo código fuente: MOV DX,0 mov dL,es:[80h] ;AQUI ESTA EL NUMERO DE CARACTERES DE LOS PARAMETROS cmp dl,0 jne segU call borra escribe noparam,4,1 escribe asionada,5,1 mov ah,4ch int 21h segU: MOV CX,DX MOV SI,82H ;EN 81H HAY UN ESPACIO ENTRE EL NOMBRE DEL ARCHIVO. MOV DI,0 ;Y LOS PARAMETROS. PARAM: MOV AL,ES:[SI] MOV NOMPCX[DI],AL INC DI INC SI LOOP PARAM DEC DI MOV NOMPCX[DI],0 ;con esto acepto los parámetros que se hayan ;introducido al ejecutar el programa. |
Pregunta: | 47195 - INT1A, MEDIR TIEMPO DE EJECUCION DE UN TROZO DE PROGRAMA |
Autor: | MIGUEL BARVO |
Me gustaria saber como realizar una función que mida el tiempo de ejecucion de un programa, por ejemplo q salga una letra en pantalla y mida el tiempo que salio y el tiempo en q el usuario la apreto!... gracias por sus futuras respuestas.... |
Respuesta: | Ruben Toca Lucio |
Te envio codigo en ensamblador para conocer los tics usados por tu codigo:
db 0fh,31h;mov [dword tics],eax;cld;nop;nop;nop;nop;nop;nop;nop;nop;pon tu codigo aqui;clc;db 0fh,31h;sub eax,[dword tics];sub eax,15; y ya tienes en eax los tics que usa tu codigo. Espero que te sirva. Un saludo. |
Pregunta: | 48574 - ESTADISTICAS DE DISKETE |
Autor: | Javier Alejandro Yàñez Portero |
Saludos:
quisiera preguntar como en lenguaje ensamblador puedo obtener los datos de un diskete como los que arroja el scandisk de windows; clusteres sin llenar totalmente y ademas la cantidad de los que estan llenos, cuantos estan en mal estado, espacio total, utilizado en subdirectorios y directorios, directorio raiz. gracias |
Respuesta: | marianne Licea Fonseca |
para lo que quieres se utiliza el servicio 36h de la int 21h, el cual presenta los siguientes parámetros de Entrada y de salida:
Entrada ------- AH: 36h DL: Codigo de Unidad --> 0 – Unidad Actual, 1 – Unidad A (Disco 3½), 2 – Unidad B, 3 – Unidad C, Etc. Salida -------- AX: 65535: si el dispositivo no existe, sino (dispositivo existe), -------- AX: cantidad de sectores por clúster. BX: Clústers disponibles. CX: Bytes por sector. DX: Total de clústers en el disco Ejemplo de código (calcular el espacio libre del floppy en KB): MOV AH,36h MOV DL,1 ; Código de dispositivo o unidad en este caso A: INT 21H JC error ; preguntar si hubo error, de lo contrario MUL CX ; Se calcula espacio libre en KB por variante(ax*bx*cx)/1024 MUL BX MOV CX,1024 DIV CX ;En AX se obtiene el espacio libre en KB |
Respuesta: | marianne Licea Fonseca |
Disculpa, no leí tu pregunta hasta el final. Creo que debes primeramente conocer la estructura lógica del diskete, yo te puedo enviar esa información pero no creo que pueda ser por esta vía, si quieres me mandas tu dirección de correo y te lo envío después. Puede ser que me demore un poquito pero será..
Saludos |
Pregunta: | 48816 - PROGRAMACION HIBRIDA ENTRE C Y LENGUAJE ENSAMBLADOR |
Autor: | Mayra Glez. G. |
Hola!!... bueno pues no soy muy buena en esto.. y quisiera saber como ejecutar un programa en lenguaje ensamblador desde C.... si.. podrian decirme como.. gracias... hasta pronto!... |
Respuesta: | Nombre Apellidos |
La verdad es que ahora noencuentro la informacin exacta, pero creo recordar qu para la ejecucion de un programa, (en cualquier lenguaje , C, ensamblador,... ), compilado, habia que emplear la funcion :
exec("programita.exe"); Si lo qeu quieres es ejecutar un trozo de programa que has programado en ensamblador, habia que ponerlo entre llaves, con la etiquta asm al comenzar: asm{ instrucciones de ensamblador } |
Pregunta: | 50023 - CANTIDAD DE VOCALES EN UNA CADENA |
Autor: | david alujes |
necesito saber como contar la cantidad de vocales que tiene una cadena,y la cantidad de cada vocal |
Respuesta: | Chaco Chaquito |
Aqui esta, sufri mucho por esto...XD
.model small .stack .data pide db 'Teclea una palabra',10,13,'$' cad db 80 dup(' '),'$' msg1 db 10,13,'a: $' msg2 db 10,13,'e: $' msg3 db 10,13,'i: $' msg4 db 10,13,'o: $' msg5 db 10,13,'u: $' Aa db 0 Ee db 0 Ii db 0 Oo db 0 Uu db 0 .code mov ax,@data mov ds,ax mov ah,00h mov al,03h int 10h lea dx,pide mov ah,09h int 21h lea si,cad mov cx,0 lee: mov ah,01h int 21h cmp al,'$' je termina mov [si],al inc si inc cx jmp lee termina: lea si,cad mov bl,0 ciclo: mov al,[si] mov dl,al cmp dl,'a' je sumaAs cmp dl,'A' je SumaAs cmp dl,'e' je SumaEs cmp dl,'E' je SumaEs cmp dl,'i' je SumaIs cmp dl,'I' je SumaIs cmp dl,'o' je SumaOs cmp dl,'O' je SumaOs cmp dl,'u' je SumaUs cmp dl,'U' je SumaUs cmp dl,'$' je FinCiclo Sigue: inc si jmp ciclo SumaAs: inc Aa jmp Sigue SumaEs: inc Ee jmp Sigue SumaIs: inc Ii jmp Sigue SumaOs: inc Oo jmp Sigue SumaUs: inc Uu jmp Sigue FinCiclo: lea dx,msg1 mov ah,09h int 21h mov dl,Aa add dl,30h mov ah,02h int 21h lea dx,msg2 mov ah,09h int 21h mov dl,Ee add dl,30h mov ah,02h int 21h lea dx,msg3 mov ah,09h int 21h mov dl,Ii add dl,30h mov ah,02h int 21h lea dx,msg4 mov ah,09h int 21h mov dl,Oo add dl,30h mov ah,02h int 21h lea dx,msg5 mov ah,09h int 21h mov dl,Uu add dl,30h mov ah,02h int 21h mov ah,4ch int 21h end |
Respuesta: | Francisco Carrillo |
Bueno, pues lo primero que tienes que hacer es contar con cinco variables declaradas, cada una funcionará como acumulador de cada letra. Luego incializa dichas variables a 0 e inicias un ciclo donde vayas leyendo caracter por caracter la cadena mediante el uso del registro di o si(por ejemplo mov al, cadena[si]), previamente incializado en cero y compares si cadena[si] es igual a 'a' o a 'A'(
ciclo_cuenta_vocales: ... ... ... cmp al, 'a' je sumaAs cmp al, 'A' je sumaAs cmp al, 'e' je sumaEs . .. .. .. cmp al, '$' je salir sumaAS: inc cuentaAs .... .... inc di jmp ciclo_cuenta_vocales salir: ), luego si es cierto das un salto hacia una etiqueta que sea para incrementar el contador de a's(ver el ejemplo anterior), luego despues de de las comparaciones de las a`s pones la comparaciones y los saltos correspondientes a la 'e' o 'E' y haces lo mismo con todas las demás vocales , y al final pones un salto hacia el inicio del ciclo.El ciclo terminará cuando el caracter sea el que predefinas(en el ejemplo es el '$') el cual lo tendrás que insertar en la cadena al final ya sea al declararla o antes de inciar el ciclo. Espero y la informacion te haya servido de algo |
Pregunta: | 51165 - TECLADO CON SONIDO |
Autor: | Nely PC |
Alguien m puede ayudar para la solución de un programa en ensamblador que consiste en que en el momento de pulsar un tecla emita un sonido segun la letra seleccionada.
El sonido tiene que ser distinto para varias letras. Procurando que el sonido sea emitido por medio de bocinas externas y no las que tiene la maquina. Pero el ultimo punto puede ser omitido. |
Respuesta: | Anny Campos Cosme |
Mira, yo no soy una experta en el tema y la verdad es que estoy aprendiendo porque soy estudiante de segundo año de informática pero con distintos valores de frecuencia puedes lograr distintos sonidos para las teclas. Solo tienes que detectar que tecla es la que está pulsada y según la tecla mandar a ejecutar el segmento de codigo que hace sonar la bocina con una frecuencia determinada por ti.
Aquí te pongo un ejercicio con su solución que te puede servir de guía y si lo modificas puedes lograr lo que quieres. De todos modos creo que tengo la solución para lo que quieres solo que no la encuentro. Escríbeme luego a ver si te la puedo dar. salu2 yo Realice un programa en ensamblador que al apretar cualquiera de las teclas del 1 al 5 la bocina suene un número de veces igual al digito que se apretó. Ej: Si se oprime el 3 que la bocina suene 3 veces (Primero durante tres segundos, después durante dos segundos, y finalmente durante un segundo) y a una frecuencia de 2000 Hz. Si aprieta una tecla que no está entre el 1 y el 5 debe mostrar un cartel indicándole al usuario que se equivocó y para salir apretar la n. DOSSEG .MODEL SMALL .DATA CARTEL DB 13,10,'Oprima una tecla del 1 al 5 para sonar la bocina, n para salir.',13,10,'$' CARTEL1 DB 13,10,'No oprimi',162,' el d',161,'gito correcto.',13,10,'$' NVECES DB 0 CONTEO DB 0 VIEJOIP1CH DW ? VIEJOCS1CH DW ? ENTRAR MACRO MOV AH,1 INT 21H ENDM MOSTRAR MACRO VAR PUSH AX PUSH DX MOV AH,9 LEA DX,VAR INT 21H POP DX POP AX ENDM LEER MACRO VECTOR,VAR,VAR1 MOV AL,VECTOR MOV AH,35H INT 21H MOV VAR,BX MOV VAR1,ES ENDM ESCRIBIR MACRO VECTOR,SUB MOV AL,VECTOR MOV AH,25H PUSH DS MOV DX,OFFSET SUB PUSH CS POP DS;DS=CS INT 21H POP DS ENDM .CODE SONAR PROC NEAR MOV AX,@DATA MOV DS,AX LEER 1CH,VIEJOIP1CH,VIEJOCS1CH ESCRIBIR 1CH,NUEVA1CH VOLVER: MOSTRAR CARTEL ENTRAR CMP AL,'n' JE SALIR CMP AL,'N' JE SALIR SUB AL,30H ; A partir de aquí se comprueba que dígito se apretó, el registro BL comienza con valor 5 ; y se ira comparando con AL y decrementando hasta llegar al valor 1. CMP AL,1 JB ERROR CMP AL,5 JBE SEGUIR ERROR: MOSTRAR CARTEL1 ;Muestro este cartel si equivoca el dígito. JMP VOLVER ;Sonar bocina y cargo la base de conteo correspondiente a la frecuencia 2000 Hz. SEGUIR: MOV NVECES,AL ;Porque se usa AL posteriormente. MOV AX,596 OUT 42H,AL MOV AL,AH OUT 42H,AL REPETIR: IN AL,61H ;Encender Bocina. OR AL,00000011B OUT 61H,AL MOV AL,18 ;Multiplicando NVECES*18 obtengo los segundos que debo esperar. MOV BL,NVECES MUL BL MOV CONTEO,AL LAZO: CMP CONTEO,0 ;Lazo de espera por las conteo igual a NVECES*18 ITs, JNE LAZO ;se decrementa CONTEO en la subrutina de IT. IN AL,61H ;Apagar Bocina. AND AL,11111100B OUT 61H,AL MOV CONTEO,18 LAZO1: CMP CONTEO,0 ;Lazo de espera para 1 segundo entre intervalos de sonido. JNE LAZO1 DEC NVECES JNZ REPETIR JMP VOLVER ;Restaurar el vector viejo de la INT 1Ch. SALIR: MOV DX,VIEJOIP1CH MOV AX,VIEJOCS1CH MOV DS,AX MOV AH,25H MOV AL,1CH INT 21H MOV AX,4C00H INT 21H SONAR ENDP NUEVA1CH PROC FAR MOV AX,@DATA ;Esta rutina la llama la IT 8 mediante INT 1Ch. MOV DS,AX DEC CONTEO IRET NUEVA1CH ENDP END |
Pregunta: | 51368 - COMO INVOCAR EL CLICK DERECHO EN ENSAMBLADOR |
Autor: | monse gonzalez |
mov ax,011b ; determina que el click es izq
int 33h and bx,1 ;si fue presionado el derecho, se regresa a inicia hasta que se presione el iquierdo cmp bx,01 jne inicia si para el click izquierdo es asi, tons para el derecho?? |
Respuesta: | Rogelio L |
La int 33h con el servicio 3 (011b) retorna lo siguiente:
CX: Pocision horizontal (0-639) DX:Pocision vertical (0-199) BX: 01b si el boton presionado fue el izquierdo y 010b si fue el derecho por lo tanto: and bx, 01b ;da 1 si el presionado fuen el izquierdo y and bx, 010b ; da 1 si fue presionado el derecho el programa quedaria asi: mov ax,011b ; llama al servicio 3 de la interrupcion 33h int 33h and bx,2 ;si fue presionado el izquierdo, se regresa a inicia hasta que se presione el derecho cmp bx,02 jne inicia |
Pregunta: | 51501 - PASAR NUMERO 32 BITS EN 2 REGISTROS DE 16 A VARIABLE DE 32 |
Autor: | jesus garcia martin |
Hola buenas, aki estoy dando mis primeros pinitos en ensamblador y tengo un ejercicio casi terminado pero no me sale lo mas sencillo. Ojala me puedan ayudar porque no le veo la manera y he intentado varias cosas ya. Para empezar estamos en Turbo ensamblador de borland sin usar registros ni directivas de 32 bits, es decir ensamblador de MSDOS practicamente, asi k nada de usar registros extendidos ni instrucciones complejas de 32 bits.
Bueno la cuestion es k al final tengo un numero de 32 bits en dos registros de 16: - los 16 bits mas altos en DX - los 16 bits mas bajos en AX Quiero pasar ese numero de 32 bits a una variable llamada: - resultado DD 0 ; (Esto es la definicion doble-palabra) Y he probado con diferentes opciones de mov y movzw o algo asi pero nada, seguramente que en la sintaxis o en los typecast o algo me equivoque. Espero k alguien me de una solucion, ya mas bien por saber como es. Muchas gracias. |
Respuesta: | Marianne Licea |
;Esta es una manera de hacerlo. De aquí sacas lo que te hace falta
Dosseg .model small .data var dd ? .code main proc near mov ax,@data mov ds,ax mov di, offset var mov [di],ax ;El valor de AX se guarda en la parte baja de la variable add di,2 mov [di],dx ;DX en la parte alta mov ax,4c00h int 21h end |
Pregunta: | 53541 - INTERRUPCIONES CON 16F84 |
Autor: | Rubén MiereS |
Saludos, estoy aprendiendo a usar el microcontrolador 16f84, y estoy aciendo un programita pero el caso es q no m detecta las interrupciones externas, tengo conectado un pulsador a la patilla6 (RBO/INT), os pego aki la función principal a ver del programa q es donde tenia que detectarme esta interrupción para saltar a una subrutina, si se os ocurre algo comentarmelo por favor,
Gracias LIST p=16f84 RADIX HEX PUL EQU 0C #include\"p16f84a.inc\" ORG 0 goto inicio ORG 6 inicio bsf INTCON,GIE ;Permite interrupciones,GIE=1. bsf INTCON,RBIE ;Permite interrupciones de PORTB, RBIE=1. bsf INTCON,INTE ;Permite interrupciones externas, INTE=1. bcf STATUS,RP0 ;Cambio a banco 0, pone RP0 a 0 movlw b\'00000000\' movwf PORTA bsf STATUS,RP0 ;Cambio a banco 1, pone RP0 a 1 movlw b\'11110001\' ;Pone las 4 líneas de mayor peso y la de menor peso de PORTB como entrada. movwf TRISB ;Mueve el contenido de W al TRISB. movlw b\'00000000\' ;Pone las 4 líneas de menor peso de PORTA como salida. movwf TRISA ;Mueve el contenido de W al TRISA. bcf STATUS,RP0 ;Cambio a banco 0, pone RP0 a 0 bcf INTCON,INTF ;Borra el flag de interrupción externa. s1 btfss INTCON,INTF ;Se salta la siguiente instrucción si INTF=1. goto s1 nop bcf INTCON,INTF ;Borra el flag de interrupción externa. s2 btfss INTCON,RBIE ;Se salta la siguiente instrucción si RBIE=1. goto s2 call pulsadores goto s1 |
Respuesta: | nadie nadie |
Suponiendo que esten bien habilitadas todas las opciones para que funcione la interrupcion, al producirse esta, el programa salta a l vector de interrupcion, en la direccion 4, que no se ve este en el programa...
Has de introducir las lineas: ORG 4 goto mi_interrrupcion Y desarrollar lo que hace tu interrupcion, como haces con inicio |
|< << 3 4 5 6 7 8 9 10 11 12 13 >> >| |