• Sábado 14 de Diciembre de 2024, 22:09

Autor Tema:  Assembly  (Leído 2364 veces)

scatterbrain

  • Miembro activo
  • **
  • Mensajes: 57
    • Ver Perfil
Assembly
« en: Martes 31 de Mayo de 2005, 22:14 »
0
he sabido que uno en un programa escrito en c (no se si en c++) puede tener partes de codigo en assembly ,mi pregunta va dirigida a que reglas y consideraciones hay que tener cuando uno hace esto ya que he intentado escribir algun trozo en assembly asi:

ams{
              //trozo de codigo
}


y los resultados han sido nefastos.alguien tiene experiencia en esto,con algunos consejos quedaria bien.
We`re the dollars and cents
and the PoUNDS and Pence
the MARK and the YEN

we gonna crack your little souls,crack your little souls...

pitukilloloco

  • Miembro MUY activo
  • ***
  • Mensajes: 104
    • Ver Perfil
Re: Assembly
« Respuesta #1 en: Miércoles 1 de Junio de 2005, 02:52 »
0
Si te interesa, y lees literatura en inglés de computación, te puedo poner aquí lo que al respecto viene en el MSDN 6 de Microsoft. Te muestro la primera página
------------------------------------
Citar
Assembler (Inline): Overview
Home |  How Do I |  Details

Assembly language serves many purposes, such as improving program speed, reducing memory needs, and controlling hardware. You can use the inline assembler to embed assembly-language instructions directly in your C and C++ source programs without extra assembly and link steps. The inline assembler is built into the compiler — you don't need a separate assembler such as the Microsoft Macro Assembler (MASM).

Note   Programs with inline assembler code are not fully portable to other hardware platforms. If you are designing for portability, avoid using inline assembler.

What do you want to know more about?
Inline assembler


The __asm keyword


C or C++ in __asm blocks


Registers


Jumps to labels


C function calls from an __asm block


C++ function calls from an __asm block


__asm blocks as C macros


Optimizing inline assembly code


RadicalEd

  • Moderador
  • ******
  • Mensajes: 2430
  • Nacionalidad: co
    • Ver Perfil
Re: Assembly
« Respuesta #2 en: Jueves 2 de Junio de 2005, 20:01 »
0
Cita de: "scatterbrain"
he sabido que uno en un programa escrito en c (no se si en c++) puede tener partes de codigo en assembly ,mi pregunta va dirigida a que reglas y consideraciones hay que tener cuando uno hace esto ya que he intentado escribir algun trozo en assembly asi:

ams{
              //trozo de codigo
}


y los resultados han sido nefastos.alguien tiene experiencia en esto,con algunos consejos quedaria bien.
Nunca lo he hecho, pero he visto que cuando quieres programar ASM en C++ debes colocarlo asi:

_asm{
//con el guión bajo
}

Puedo estar equivocado, pero asi he leido las referencias.

Ojala te sirva.
Chao
El pasado son solo recuerdos, el futuro son solo sueños

JuanK

  • Miembro de ORO
  • ******
  • Mensajes: 5393
  • Nacionalidad: co
    • Ver Perfil
    • http://juank.io
Re: Assembly
« Respuesta #3 en: Jueves 2 de Junio de 2005, 20:47 »
0
depende el compilador que uses
[size=109]Juan Carlos Ruiz Pacheco
[/size]
Microsoft Technical Evangelist
@JuanKRuiz
http://juank.io

niofis

  • Nuevo Miembro
  • *
  • Mensajes: 9
    • Ver Perfil
Re: Assembly
« Respuesta #4 en: Viernes 17 de Junio de 2005, 09:52 »
0
Utilizar asm en c++ es sencillo, te muestro un pedazo de codigo de un programa que hize hace un poco de tiempo:
Citar
float Vector::operator * (const Vector& Vec)
{
#if asm3dnow
   float total;
   _asm
   {
  femms
  movd mm0,dword ptr [ecx]
  movd mm1,dword ptr [ecx+4]
  movd mm2,dword ptr [ecx+8]
  mov eax,dword ptr [esp+8]
  movd mm3,dword ptr [eax]   //Vec.x
     movd mm4,dword ptr [eax+4]   //Vec.y
     movd mm5,dword ptr [eax+8]   //Vec.z
  pfmul mm0,mm3
  pfmul mm1,mm4
  pfmul mm2,mm5
  pfadd mm0,mm1
  pfadd mm0,mm2
  movd total,mm0
  femms
   }
   return total;
#endif
#if asmsse
   float total;
   _asm
   {
  movss  xmm0,dword ptr [ecx]
  movss  xmm1,dword ptr [ecx+4]
  movss  xmm2,dword ptr [ecx+8]
  mov eax,dword ptr [esp+8]
  movss xmm3,dword ptr [eax]
  movss xmm4,dword ptr [eax+4]
  movss xmm5,dword ptr [eax+8]
  mulss xmm0,xmm3
  mulss xmm1,xmm4
  mulss xmm2,xmm5
  addss xmm0,xmm1
  addss xmm0,xmm2
  movss  total,xmm0
   }
   return total;
#endif
#if normal
   return x*Vec.x+y*Vec.y+z*Vec.z;
#endif
}

Este programa lo compilé en VC++ 6 y VC++ .NET sin ningún problema. Espero te sea de ayuda.

niofis

JuanK

  • Miembro de ORO
  • ******
  • Mensajes: 5393
  • Nacionalidad: co
    • Ver Perfil
    • http://juank.io
Re: Assembly
« Respuesta #5 en: Viernes 17 de Junio de 2005, 14:26 »
0
si mal no recuerdo en .NET va
__asm
es decir con doble '_'

por otro lado esa sintaxis como bien lo has dicho no es generica, en compiladores como el DJGPP no funciona.
[size=109]Juan Carlos Ruiz Pacheco
[/size]
Microsoft Technical Evangelist
@JuanKRuiz
http://juank.io

Amilius

  • Miembro HIPER activo
  • ****
  • Mensajes: 665
    • Ver Perfil
Re: Assembly
« Respuesta #6 en: Viernes 17 de Junio de 2005, 18:25 »
0
Creo que se refiere a las restricciones:

Por ejemplo:

+ Cuales registros puedes modificar a gusto y cuales tienes que preservar.
+ Si defines toda una función en asm: como acceder a los parámetros y como devolver el resultado.
+ Que pasa si ocurre un error como "dividir entre cero".

Pero esto es mejor saberlo de la ayuda del compilador que uno está utilizando.