elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado:


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  ASM (Moderador: Eternal Idol)
| | | |-+  Insertar $ en un LABEL BYTE
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Insertar $ en un LABEL BYTE  (Leído 5,410 veces)
zonahurbana

Desconectado Desconectado

Mensajes: 178

RS, JC.


Ver Perfil WWW
Insertar $ en un LABEL BYTE
« en: 1 Mayo 2014, 16:21 pm »

En el DATA SEGMENT se tiene la declaración de algunas cadenas y además:
Código
  1. CADENA LABEL  BYTE
  2. TOTAL DB 21
  3. ACTUAL DB ?
  4. CADE DB 21 DUP(?)
  5.  
  6. ; Escribimos 21 ya que el ENTER ocupa un byte.
  7. DOLAR DB "$"
  8.  
  9. CADINV DB 21 DUP(?),"$"
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
  1. CALL INGRESO   ; Lectura de cadena
  2. LEA BX,CADENA
  3. ADD BL,ACTUAL
  4. MOV [BX],"$"

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.


En línea

Nunca dejar de aprender es importante, más allá del ritmo que se siga ...
Eternal Idol
Kernel coder
Moderador
***
Desconectado Desconectado

Mensajes: 5.937


Israel nunca torturó niños, ni lo volverá a hacer.


Ver Perfil WWW
Re: Insertar $ en un LABEL BYTE
« Respuesta #1 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


En línea

La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón
zonahurbana

Desconectado Desconectado

Mensajes: 178

RS, JC.


Ver Perfil WWW
Re: Insertar $ en un LABEL BYTE
« Respuesta #2 en: 1 Mayo 2014, 17:37 pm »

Me indicaba este error:
Código:
Argument needs type override
En esta línea:
Código:
MOV [BX],"$"

Cambié la línea por:
Código:
MOV BYTE PTR[BX],"$"
Y ya compila sin problemas, pero al mostrar la cadena no muestra sus 2 últimos caracteres. Es decir, ya no se sobrepone a los caracteres al inicio de la línea, pero la cadena ingresada aparece cortada en 2 caracteres.

Creí que [BX] haría referencia al retorno de carro y que lo reemplazaría por $.
En línea

Nunca dejar de aprender es importante, más allá del ritmo que se siga ...
Eternal Idol
Kernel coder
Moderador
***
Desconectado Desconectado

Mensajes: 5.937


Israel nunca torturó niños, ni lo volverá a hacer.


Ver Perfil WWW
Re: Insertar $ en un LABEL BYTE
« Respuesta #3 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.
En línea

La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón
zonahurbana

Desconectado Desconectado

Mensajes: 178

RS, JC.


Ver Perfil WWW
Re: Insertar $ en un LABEL BYTE
« Respuesta #4 en: 1 Mayo 2014, 18:06 pm »

Muchas gracias por la ayuda.

Con esto conseguí que funcionara:
Código
  1. CALL INGRESO   ; Lectura de cadena
  2. LEA BX,CADE     ; Cargamos dir de inicio
  3. ADD BL,ACTUAL ; Se le suma el valor de ACTUAL
  4. MOV [BX], BYTE PTR "$"

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.
En línea

Nunca dejar de aprender es importante, más allá del ritmo que se siga ...
Eternal Idol
Kernel coder
Moderador
***
Desconectado Desconectado

Mensajes: 5.937


Israel nunca torturó niños, ni lo volverá a hacer.


Ver Perfil WWW
Re: Insertar $ en un LABEL BYTE
« Respuesta #5 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
En línea

La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón
zonahurbana

Desconectado Desconectado

Mensajes: 178

RS, JC.


Ver Perfil WWW
Re: Insertar $ en un LABEL BYTE
« Respuesta #6 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
  1. CALL INGRESO   ; Lectura de cadena
  2. LEA BX,CADE            
  3. ADD BL,ACTUAL        
  4. MOV [BX],DOLAR

Me indica "Need register in expression" en la última línea, y lo mismo si cambio la última línea citada por:
Código
  1. MOV [BX],BYTE PTR DOLAR
Código
  1. MOV BYTE PTR[BX],DOLAR

Por otra parte he intentado:

Código
  1. MOV CADE[ACTUAL],DOLAR
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
  1. MOV DI,ACTUAL
  2. MOV CADE[DI],DOLAR
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
  1. MOV BX,0
  2. ADD BL,ACTUAL
  3. MOV CADE[BX],BYTE PTR "$"

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...
En línea

Nunca dejar de aprender es importante, más allá del ritmo que se siga ...
Eternal Idol
Kernel coder
Moderador
***
Desconectado Desconectado

Mensajes: 5.937


Israel nunca torturó niños, ni lo volverá a hacer.


Ver Perfil WWW
Re: Insertar $ en un LABEL BYTE
« Respuesta #7 en: 11 Mayo 2014, 21:28 pm »

http://pdos.csail.mit.edu/6.828/2007/readings/i386/MOV.htm
En línea

La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón
zonahurbana

Desconectado Desconectado

Mensajes: 178

RS, JC.


Ver Perfil WWW
Re: Insertar $ en un LABEL BYTE
« Respuesta #8 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
  1. [BX]
  2. DOLAR
  3. CADE[DI]
  4. BX
  5. AL
En línea

Nunca dejar de aprender es importante, más allá del ritmo que se siga ...
Eternal Idol
Kernel coder
Moderador
***
Desconectado Desconectado

Mensajes: 5.937


Israel nunca torturó niños, ni lo volverá a hacer.


Ver Perfil WWW
Re: Insertar $ en un LABEL BYTE
« Respuesta #9 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.
En línea

La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
de byte a long
Programación Visual Basic
claus86 3 3,065 Último mensaje 7 Marzo 2010, 18:27 pm
por LeandroA
Te voy a dar un byte « 1 2 »
Foro Libre
Foxy Rider 17 7,701 Último mensaje 16 Septiembre 2011, 18:35 pm
por ion dissonance2
[Sources Code] RotBits [Byte TO Byte ]
Programación Visual Basic
x64core 8 5,336 Último mensaje 22 Octubre 2011, 00:46 am
por BlackZeroX
Take screenshot of byte help?
Programación Visual Basic
Harmmy 5 2,502 Último mensaje 22 Diciembre 2012, 00:08 am
por Harmmy
Filestream . Byte a Byte
.NET (C#, VB.NET, ASP)
blaron 3 2,962 Último mensaje 5 Abril 2014, 02:01 am
por Eleкtro
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines