Título: Insertar $ en un LABEL BYTE Publicado por: zonahurbana en 1 Mayo 2014, 16:21 pm En el DATA SEGMENT se tiene la declaración de algunas cadenas y además:
Código CADINV es donde pretendo guardar la cadena ingresada luego de ser invertida. De momento el programa lee una cadena en un LABEL BYTE y muestra un mensaje diciendo "LA CADENA INGRESADA ES: " y la cadena misma de forma correcta. El problema ocurre cuando se ingresan menos de 20 caracteres. Ya que hay un retorno de carro que hace que el cursor regrese al inicio de esa línea y continue escribiendo los caracteres faltantes (que no fueron ingresados) y borre parte del mensaje, pudiendo quedar por ejemplo "ENA INGRESADA ES: ". En mis primeras clases vimos un poco acerca del debug.exe donde agregábamos instrucciones una por una. Y como en el foro me explicaron que podía usarse para analizar los programas, intenté hacerlo y allí fue cuando supe que el caracter era el retorno de carro. Lo que quiero hacer es usar el byte llamado ACTUAL (en realidad no sé cómo referirme a los DB, ¿decir que son variables?) y allí mismo asignar el $, es decir, ya no esperar necesariamente al final de los 21 caracteres. Pero según estuve viendo ACTUAL guarda un número, por ejemplo 11 y no un desplazamiento. Entonces intenté esto: Código
Se llama al procedimiento para leer la cadena, luego pretendí asignar a BX el desplazamiento del LABEL BYTE y sumarle la posición actual para luego a ese desplazamiento asignarle "$". Pero no funciona. Por favor, espero que puedan ayudarme. Mi principal problema es que no reconozco aún muy bien qué es lo que se asgina y puede asignarse entre los registros y las variables. Gracias de antemano. Título: Re: Insertar $ en un LABEL BYTE Publicado por: Eternal Idol en 1 Mayo 2014, 17:18 pm No tengo un MASM tan antiguo a mano. ¿Que error te da en concreto? ¿error A2070:invalid instruction operands?
Tenes que especificar que queres usar un puntero a byte (para escribir un solo caracter): http://www.c-jump.com/CIS77/ASM/Instructions/I77_0250_ptr_pointer.htm Título: Re: Insertar $ en un LABEL BYTE Publicado por: zonahurbana en 1 Mayo 2014, 17:37 pm Me indicaba este error:
Código: Argument needs type override Código: MOV [BX],"$" Cambié la línea por: Código: MOV BYTE PTR[BX],"$" Creí que [BX] haría referencia al retorno de carro y que lo reemplazaría por $. Título: Re: Insertar $ en un LABEL BYTE Publicado por: Eternal Idol en 1 Mayo 2014, 17:46 pm Bueno, ahora es cuando tenes que depurar (no tenemos tu codigo asi que no podemos mas que tratar de adivinar que valor tiene ACTUAL) para ver cual es exactamente el problema.
Título: Re: Insertar $ en un LABEL BYTE Publicado por: zonahurbana en 1 Mayo 2014, 18:06 pm Muchas gracias por la ayuda.
Con esto conseguí que funcionara: Código
Antes en BX cargaba la dirección de inicio del LABEL BYTE. De ese modo apuntaba a TOTAL y le seguía ACTUAL, al sumarle 3 (cuando ingresaba la cadena "123") quedaba apuntando al número 2 y luego sobre éste ingresaba el "$". Por eso se mostraba sólo el 1 y se perdían 2 caracteres. Cambié CADENA (nombre del label byte) por CADE (dir de inicio desde donde se empieza a almacenar la cadena) y ya funciona. Mi duda sería acerca de BYTE PTR: [BX] que es el desplazamiento destino, ¿no hace referencia a un byte? Y el símbolo de $ al igual que otro caracter es también un byte, ¿verdad? Supuestamente ambos operandos son de 1 byte y no debería ser necesario escribir BYTE PTR, o eso creo. Título: Re: Insertar $ en un LABEL BYTE Publicado por: Eternal Idol en 1 Mayo 2014, 18:18 pm [BX] hace referencia a un direccion de memoria, cuanto se escriba en ella despues depende de lo que uno quiera hacer, puede ser un BYTE o un WORD por ejemplo.
http://www.c-jump.com/CIS77/ASM/Instructions/I77_0200_ptr_directive.htm Título: Re: Insertar $ en un LABEL BYTE Publicado por: zonahurbana en 11 Mayo 2014, 17:22 pm Ya me funciona, de la forma en que escribí la última vez, pero... ¿por qué no funciona si en vez de poner el caracter directamente uso el nombre de una variable DB?
Código
Me indica "Need register in expression" en la última línea, y lo mismo si cambio la última línea citada por: Código
Código
Por otra parte he intentado: Código Y supongo que esto falla porque no puedo usar una variable dentro de los corchetes. Sólo acepta DI, SI, BX o BP, ¿verdad? Código Luego intenté esto y también resulta en error, debe ser porque DI y ACTUAL tienen tamaño distinto. Y por eso mismo tampoco funciona cuando a DI le asigno 0 y trato de usar ADD para sumarle ACTUAL. Esto sí que funciono, pero no quedó en una línea como creí que podría hacerse: Código
Lo que no entiendo es porqué en ningún caso puedo usar DOLAR, si supuestamente ya ha sido definido como dato de un solo byte... Título: Re: Insertar $ en un LABEL BYTE Publicado por: Eternal Idol en 11 Mayo 2014, 21:28 pm http://pdos.csail.mit.edu/6.828/2007/readings/i386/MOV.htm
Título: Re: Insertar $ en un LABEL BYTE Publicado por: zonahurbana en 11 Mayo 2014, 22:10 pm ¿Cuál sería el significado de r/m, Sreg, imm y moffs?
O tal vez pueda decirme cuál de estos se corresponde con alguno de ellos :silbar:: Código
Título: Re: Insertar $ en un LABEL BYTE Publicado por: Eternal Idol en 11 Mayo 2014, 22:21 pm register/memory, segment register, immediate y move offset segment supongo ... fijate que opcodes genera el ensamblador para las correspondencias.
|