• Jueves 13 de Mayo de 2021, 07:45

Autor Tema:  pasar un tipo byte a un tipo word sin movs?  (Leído 2301 veces)

morringos

  • Miembro activo
  • **
  • Mensajes: 65
  • Nacionalidad: 00
    • Ver Perfil
pasar un tipo byte a un tipo word sin movs?
« en: Miércoles 30 de Marzo de 2011, 23:27 »
0
Buenas buenas a todos, mi gran duda es la siguiente, ya que me he atorado en varios ejercicios que he querido hacer y no he podido debido a que el "tasm" me marca error, operación o sentencia no válida para mi procesador al querer utilizar "movs", "movsx" ó "movzx" para pasar un tipo byte a un tipo palábra.
¿Hay alguna instrucción o alguna forma de hacer esto? Y claro, apenas estoy aprendiendo ensamblador y es de 16 bits.

Un ejemplo de lo que les digo es lo siguiente: Supongamos que tengo un arreglo (arreglo1 db 40 dup(32),36), en el cual capturé una cadena, y si quiero pasar un elemento al dx.
O en otro caso también, es que si quiero hacer: "mov dx, al", no me lo permite tampoco, porque "al" es de tipo byte y "dx" es de tipo palabra, pero tampoco me permite usar las sentencias que puse anteriormente.


Gracias  ^_^
Saludos.


m0skit0

  • Miembro de PLATA
  • *****
  • Mensajes: 2337
  • Nacionalidad: ma
    • Ver Perfil
    • http://fr33kk0mpu73r.blogspot.com/
Re: pasar un tipo byte a un tipo word sin movs?
« Respuesta #1 en: Miércoles 30 de Marzo de 2011, 23:47 »
0
Yo hago

Código: ASM
  1. movsxb %0, %%ebx
  2.  
desde C y GAS me lo reconoce perfectamente. ¿Cómo estás escribiendo la instrucción?

A lo mejor se debe a la antigüedad de TASM (también ignoro cuándo Intel introdujo estas instrucciones).

morringos

  • Miembro activo
  • **
  • Mensajes: 65
  • Nacionalidad: 00
    • Ver Perfil
Re: pasar un tipo byte a un tipo word sin movs?
« Respuesta #2 en: Jueves 31 de Marzo de 2011, 00:06 »
0
Bueno primero que nada, muchas gracias por contestar, y aquí te dejo un ejemplo que acabo de hacer en donde me marca error, tal vés y mi problema sea de sintáxis.

Código: ASM
  1.  
  2. title "Ejemplo X"
  3. .model small
  4. .stack 1064
  5. .data
  6.     var1 db 48,36
  7. .code
  8.  
  9. mov ax, @data
  10. mov ds, ax
  11.  
  12. mov ax, var1                 ;Operand types do not match
  13. mov dx, ax
  14. mov ah, 09h
  15. int 21h
  16.  
  17.  
  18. mov ah, 4ch
  19. int 21h
  20.  
  21. end
  22.  
  23.  

No sé si algo esté mal en mi código.
¿Tiene que ver la versión del tasm por lo cual me diga: "Ilegar instruction for currently selected processor(s) cuando hago un "movsx"? Utilizo un compilador muy viejo del Borland, en el cual viene el tasm, creo que es la versión 3.xx  del Borland, no sé si en realidad tenga algo que ver.

Gracias.  ^_^
Saludos.


m0skit0

  • Miembro de PLATA
  • *****
  • Mensajes: 2337
  • Nacionalidad: ma
    • Ver Perfil
    • http://fr33kk0mpu73r.blogspot.com/
Re: pasar un tipo byte a un tipo word sin movs?
« Respuesta #3 en: Jueves 31 de Marzo de 2011, 00:20 »
0
No hay de qué, estamos pa serviros.

Me refiero a cómo usas movsx, no mov.

La versión tiene que ver porque posiblemente (como digo lo ignoro) dicha instrucción no existiera cuando salió esa versión del TASM y por tanto TASM no soporta dicha instrucción.

morringos

  • Miembro activo
  • **
  • Mensajes: 65
  • Nacionalidad: 00
    • Ver Perfil
Re: pasar un tipo byte a un tipo word sin movs?
« Respuesta #4 en: Jueves 31 de Marzo de 2011, 00:37 »
0
¿Entonces está algo mal mi código? Porque intento hacer un "movsx ax, var1", y me marca error, no sé bien a que se deba dicho error.
Si me pudieran echar una mano respecto al error que me marca.


Gracias.
Saludos  ^_^


m0skit0

  • Miembro de PLATA
  • *****
  • Mensajes: 2337
  • Nacionalidad: ma
    • Ver Perfil
    • http://fr33kk0mpu73r.blogspot.com/
Re: pasar un tipo byte a un tipo word sin movs?
« Respuesta #5 en: Jueves 31 de Marzo de 2011, 09:20 »
0
Yo no sé cómo es la sintaxis exacta de TASM, pero si estás moviendo direcciones de memoria tienes que indicar el tamaño de la operación, o lo que es lo mismo en este caso, el tamaño de var1. En GAS es

Código: ASM
  1. movsxb
  2.  
y estoy indicando que es un byte mediante la "b" del final. Para 16 bits sería "w" (movsxw) y para 32 bits sería "l" (movsxl).

Saludos.

Toph

  • Moderador
  • ******
  • Mensajes: 420
  • Nacionalidad: sv
    • Ver Perfil
    • http://www.electronicayotros.blogspot.com/
Re: pasar un tipo byte a un tipo word sin movs?
« Respuesta #6 en: Viernes 1 de Abril de 2011, 20:49 »
0
Cita de: "morringos"
Código: ASM
  1.  
  2. mov ax, var1                 ;Operand types do not match
  3.  
  4.  
da error porque var1 esta como byte y AX es de dos bytes, la misma razon por la que te da error "mov dx, al" , en cualquier ensamblador .

Cita de: "morringos"
 "Ilegar instruction for currently selected processor(s) cuando hago un "movsx"?
Hasta donde yo se esa instruccion no es para ensamblador de 16 bits, da error en cualquier ensamblador para 16 bits.

lo que debes hacer es usar direccionamiento indirecto para pasar los datos de una variable a un registro, en el ejemplo que has puesto

Código: ASM
  1.  .model small
  2.  .stack 1064
  3.  .data
  4.      var1 db 48,36
  5.  .code
  6.  
  7.  mov ax, @data
  8.  mov ds, ax
  9.  mov si,0
  10.  mov ah, var1[si] ; guardara en AH 48
  11.  inc si
  12.  mov al, var1[si] ; guardara en Al 36 y queda en AX=4836
  13.  mov dx, ax
  14.  mov ah, 09h
  15.  int 21h
  16.  
Por favor leer esto antes de postear. Gracias
NO alimenten al TROLL y morirá
¿Querés ayudar?, pues doná comida gratis con un simple clic aqui ,sin trucos
photobucket , Google , wine y cutepdf Rock!!!


programacion,c,c++,
Microcontroladores,java,linux,videojuegos,
,.NET,asm,codigo
por favor este 2012 que sea