|
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.
Mensajes - Super_G
Páginas: 1 ... 13 14 [15]
351
« en: Jueves 16 de Octubre de 2003, 06:47 »
primero para manejar archivos debes manejar interrupciones, y la int 21h es la que se usa en ensamblador para este fin la funcion "3dh" es para abrir archivo, la "3fh" para leer y "40h" para escribir
352
« en: Jueves 16 de Octubre de 2003, 06:44 »
y otro metodo?
353
« en: Jueves 16 de Octubre de 2003, 06:35 »
bueno yo creo que me defiendo en muchas cosas basicas sobre assembler, pero que clase de progrmador sera que se busca
354
« en: Jueves 16 de Octubre de 2003, 06:33 »
mientras mas lenguajes se sepa mejor, y asm es digamos el padre de los lenguajes
355
« en: Jueves 16 de Octubre de 2003, 06:21 »
creo que hice algo asi hace tiempo no recuerdo si fue en VB o asm, pero para assembler utilizaria interrupciones, pero no estoy seguro hecerlo por puertos ya que seria mejor
356
« en: Jueves 16 de Octubre de 2003, 06:19 »
la pregunta meconfunde, es que tienes un progrma en asm y lo quieres meter en uno de C, eso se haria: //////////////// asm{ //codigo ASM } o necesitas los ciclos de instrucion que requiere el programa en ASM, esto se podira hacer manualmente dependiendo de las instrucciones y del tipo del procesador
357
« en: Jueves 16 de Octubre de 2003, 06:15 »
buenas direcciones
358
« en: Jueves 16 de Octubre de 2003, 06:12 »
pero en windows en algun mometo trabaja la edicion de archivos poniendolos en la memoria, se referira a esto?
359
« en: Jueves 16 de Octubre de 2003, 06:09 »
que diferncias tienen el NASM con el TASM??
360
« en: Jueves 16 de Octubre de 2003, 06:09 »
muy interezante lo provare
361
« en: Jueves 16 de Octubre de 2003, 05:56 »
tambien sirve para saber el estado de una subrutia a su regreso de su llamada
362
« en: Jueves 16 de Octubre de 2003, 05:53 »
La compilacion con Tasm de borland???
363
« en: Jueves 16 de Octubre de 2003, 05:32 »
Es cierto que no se puede hacer un temporizador en C? la funcion DELAY(X), no hace un buen retrazo en Xmilisegundos?, que problemas existen con esto?
364
« en: Jueves 16 de Octubre de 2003, 05:06 »
Que tipo de problemas seran? bueno supongamos que ya tengo el dato en DL las centecimas de segundo entonces si son centecimas maxio sera de dos digitos tomado esto encuenta pongo el siguiente programa: ;;********************** mov al,dl; en DL las centecimas xor ah,ah ; saparamos las mov bl,10 ;unidades div bl ; de la decenas or ax,3030h ;CNV a ASCII mov bl,ah ; salvamos las unidade mov ah,2 int 21h ;muestra decenas mov al,bl int 21h ;muestra unidades ;;**************** espero el programa funcione, no le hice pruebas, si ese no era el problema, porfavor especificamelo.
365
« en: Miércoles 15 de Octubre de 2003, 15:55 »
me gusta ese reto, pero en este instante no se me ocurre una solucion, pero veamos la dudas: 1) LES AX,numero Esto carga el desplazamiento de numero en AX y su segmento en ES, No carga la parte baja en AX y la alta en ES, por lo tanto no seria corresta la suposicion. 2)movimiento directo de DX:AX a memoria Creo que existe alguna instruccion que produce esa o una operacion similar pero no la recuerdo;
Despues una alternativa seria usar registros de 32bits como EAX,EBX,...pero cuando quieras trabajar con numeros mas grandes ya no funcionaria y seria la misma historia.
Hace algun tiempo tenia la tarea de multiplicar 3 numeros de 32Bits en el 68000MC, y hacerlo de forma iterativa consumia un tiempo enorme(practicamnete se colgaba), lo que hice fue dividir los numeros grandes resultantes en words, y aunque no era tan facil pues no lo termine, creo que podria ser una alternativa.
366
« en: Miércoles 15 de Octubre de 2003, 06:13 »
La verdad no creo poder ayudarte ya que eso es algo que busque muchas veces, lo mejor(a mi parecer) seria estudiar a fondo el temporizador harware del ordenador y trabajar con la frecuencia de reloj, pero no parece ser tan facil, puedes buscar en la red sobre este tama y talves encuentres algo hecho, lo mejor que tengo seria capturar la hora actual del ordenador que te da las horas, minutos, segundos y centecimas de segundos mediante una interrupcion y trabajar con las centecimas de segundo: la interrupcion es: mov ah,2ch int 21h ;******* las centecimas estarian en DL.
367
« en: Miércoles 15 de Octubre de 2003, 05:56 »
Para empesar los #s ASCII que representan del "0" al "9" son del 48 val 57(decimal); 30 al 39(en hexa). Entoces cuado leas del teclado(una tecla), lo que se lee sera el codigo ASCII de la tecla pulsada[si se utiliza la interrupcion 21(int 21h) se puede usar la funcion#:1, poniendo AH=1, y el codigo ASCII del la tecla pulsada estara en AL]; esto significa que debe leer un digito o numero por ves, por eso aconsejaba el trabajar solo con numeros de un digito, el unico arreglo para trabajar con el dato introducido es restarle 48(decimal) o 30h(en exa); por lo tanto lo primero que recom¡niento es definei el tipo de numeros a ser procesados(tamaño):Byte,Word,Dword.., por ultimo aconsejo que por lo menos sean del tipo "Byte" o sea que el # mas grande seria 255, pero aun asi preferiria que el maixmo # sea 9, si tomamos lo del Byte aun asi se debe hacer varios controles como que para con una suma o multiplicacion que sobre pase el limite de Byte, en el mismo ingreso no se deberia, permitir el ingrso de numeros mayores a 255, aontinuacion pondre lo que pudiera ser un pequeño progrma para el ingrso de este numero sin controles como los mencionados antes: ;;******************************** ;;el numero a ser procesado debera estar ;;en BL ;;priemor debe de ingresarse el digito ;;mas significativo ; eje: 265 1º el 2, 2º el 6,3º el 5 ;; mov bl,0 mov cx,3 ;3 digitos p0: mov ah,1 int 21h sub al,30h;; CNV de Ascii mov bh,al mov ax,000ah;10 decimal mul bl; digito anterior*10 mov bl,al add bl,bh ;suma del ANT+el nuevo loop p0 ;;***************************** debe de hacerse la prueva para verificar errores(en TD); para mostrar resultados en anteriores puse un programa que mostraba el numero contenido en AX. Espero esto pueda servir.
368
« en: Sábado 11 de Octubre de 2003, 15:07 »
para mostrar un numero de 16bit que esta en AX: ;;***************** cmp ax,0 ;verifiacmos si AX es cero jz fin ;si lo es el programa termi mov si,offset cadena + 5; mov bx,10 ;dividor para obtener c1: xor dx,dx ;los digitos div bx ;el digito va a DL ;en AX el #restante add dl,48 ;lo convertimos en ascii mov [si],dl;movemos a la cadena dec si jmp c1 ;continuamos con el resto fin: mov ah,9 mov dx,offset cadena int 21h int 20h cadena db '00000$' ;cadena a ser mostradamostrada ;;**************** no compile el programa pero espero que la idea se entienda
369
« en: Sábado 11 de Octubre de 2003, 14:44 »
Introduces los numeros por teclado?? si lo haces ,¿los convertiste de ascii a binario antes de procesarlos? y despues de ser procesados para mostrarlos deben estar en ascii otra ves, talves esos sean los problemas. Te recomiendo que para facilitar la programaicon solo introduscas numeros de un solo digito(decimal) y asi maximo tengas que mostrar resultados de 2 digitos.
370
« en: Sábado 11 de Octubre de 2003, 14:39 »
El programa me parece interesante, pero tengo una duda: ¿el numero a mostrar de cuantos digitos es, ya que si es introducido(por teclado) estaria en ascii, y en que momento se introduce el numero? eso seria todo Gracias
371
« en: Miércoles 1 de Octubre de 2003, 06:02 »
vi tu programa a la rapida , y me parece que el error puede estar en tu comparacion ya que al realizar la divicion entre un registro de 16 bits el resto de la division(DXAX/BX) se ira a DX y no a AH, una solucion simplemente podria ser hacer la comparacion de 0 con DX, o la divicion hacerla con bl....pero la vere mas detenidamente despues
372
« en: Miércoles 1 de Octubre de 2003, 05:50 »
Para imprimir numeros en pantalla primero se debe clasificar el tipo de numero que se va imprimir (enteros flotantes...), por ejemplo para un entero de un solo digito (el ejemplo mas simple, en decimal), que puede ser contenido en un byte, solo debemos trasformarlo a su equivalente en ASCII, y esta listo para ser mostrado por pantalla, y para hacer lo mismo con numero mayor de por decir 3 digitos podria utilizarse una division suceciva en 3 ciclos por ejemplo
mov al,3 ;numero a exhibir add al,48 ;sumandole 48 al contenido ; de AL se lo trasforma en ASCII mov ah,2 int 21h ;muestra el ASCII de AL ;;************************** para numeros de tres digitos:
mov si,offset cadena xor ax,ax mov cx,3 ;3 digitos mov al,125 ;125 numero a exibir mov bl,10 ci1: div bl ;1º(AL=12 .... AH=5) ;2º(AL=1.......AH=2) ;3º(AL=0.......AH=1) add ah,48 mov [si],ah inc si mov ah,0 loop ci1 mov ah,9 mov dx, offset cadena ;en .COM DS=CS int 21h ;muestra cadena
. . . cadena db ' ','$'
;;******************** para numeros de mas digitos es necesario mejorar el programa, y para flotantes hacer otros cambios
373
« en: Jueves 25 de Septiembre de 2003, 00:37 »
Yo intente hacer un programa asi una ves pero no me parecio muy facil, al final solo hice un programa que muestre el resultado pero solo de forma binaria, falta la conversion a decimal
;;****************************** .model tiny .code .387 ;con esta directiva decimos que se usaremos el coprocesador matematico 80387 org 100h
inicio: finit fld n1 ;cargamos a ST(0) "n1" fld n2 ;cargamos a ST(0) "n2", recorre la pila y "n1" pasa a ST(1) faddp ;sumamos ST(0)+ST(1) y desempilamos en ST(0) fst r ;almacenamos en "r" fwait ;espera instruccion del procesador ;;***********mostrar EL RESULTADO en pantalla mov si, offset r mov di, offset resultado mov bx,[si] ; en bx los 16 primeros bits de 23 de la "mantisa" mov ax,[si+2] ; en ax estaran los ultimos 7 bits de la "mantisa" +los 8 bits del exponente + el bit de shl ax,1 ; ponemos en el bit Carry el signo, y todo el exponente en ah jnc p1 ; pasamos si es positivo mov byte ptr [di],'-' p1: sub ah,127 ;obtenemos el exponente real ;mov dh,ah ;salvamos exponente ;;********* solo tomaremo en cuenta 7 bist de la mantisa mov cx,8 ;_ c1: shl al,1 ; jc p2 ; mov dl,30h ; '0' ; jmp c2 ; } ponemos el binario de AL en [DI+3] p2: mov dl,31h ; '1' ; / c2: mov [di+3],dl ; / inc di ; / loop c1 ;- ;;*********ponemos el expoente en la cadena mov cx,3 ;3 digitos en decimal max 255 xchg al,ah ;AL = expoente; AH = 0 mov bl,10 c3: div bl add ah,30h ;convertimos a ASCCI mov [di+8],ax xor ah,ah dec di loop c3 mov dx, offset resultado mov ah,9 int 21h
fin: int 20h n1 dd 1.25 ;numero uno n2 dd 2.25 ;numero dos r dd 0.0 ;resultado resultado db '+1. *2^ (RESUTADO EN BINARIO)','$' end inicio
374
« en: Martes 23 de Septiembre de 2003, 06:45 »
.model tiny .code .387 ;con esta directiva decimos que se usaremos el coprocesador matematico 80387 org 100h
inicio: fild n1 ;cargamos a ST(0) "n1"(ENTERO) fild n2 ;cargamos a ST(0) "n2", recorre la pila y "n1" pasa a ST(1)(ENTERO) faddp ;sumamos ST(0)+ST(1) y desempilamos en ST(0) (ENTERO) fist r ;almacenamos en "r" (ENTERO) fwait ;espera instruccion del procesador
fin: int 20h n1 dw 1 ;numero uno n2 dw 2 ;numero dos r dw 0 ;resultado
end inicio
375
« en: Martes 2 de Septiembre de 2003, 04:41 »
Hola! veo que vas por buen camino, tambien que estas trabajando en un fromato .EXE; para mi seria mas facil hacerlo en formato .COM asi no hay muchas complicaciones con los segmentos, para aclarar dudas te hare algunas preguntas: "LINEA" es una cadena? , primero quieres leer los parametros de la linea de comandos no es mas director procesar desde esa direccion(80H) ? claro que eso depende tambien depende, pero por lo demas me parece que si solo quieres poner los paramentros en una cadea que manipules mas facil ya lo tienes , que mas quieres hacer???
Páginas: 1 ... 13 14 [15]
|
|
|