Dev - C++ - añadir codigo ensamblador en c++

 
Vista:

añadir codigo ensamblador en c++

Publicado por Ayuda por favor (3 intervenciones) el 18/06/2007 11:20:26
Buenas:
me he vuelto loco buscando por internet cómo introducir código ensamblador en mi aplicación en c++ (En linux)
El código ensamblador es el siguiente:
mov dx,02e
mov al,87
out dx,al
out dx,al
mov dx,02e
mov al,07
out dx,al
inc dx
inc al
out dx,al
dec dx
mov al,f6
out dx,al
inc dx
mov al,xy
out dx,al

Todas estas formas me dan errores al compilar
// Mi código C++
asm{
//el código ensamblador tal cual lo he puesto arriba
}
//Sigue el código c++
Esta me da el error: Parse error before { (en la lína asm{)

Otra manera que da error al compilar:
empezando cada línea del código con asm (ejemplo: asm mov dx.02e)

De la manera que pongo a continuación da el error: suffix or operands invalid for 'out':
asm("mov %dx,0x02e;");
asm("mov %al,0x87;");
asm("out %dx,%al;");
asm("out %dx,%al;");
asm("mov %dx,0x02e;");
asm("mov %al,0x07;");
asm("out %dx,al;");
asm("inc %dx;");
asm("inc %al;");
asm("out %dx,%al;");
asm("dec %dx;");
asm("mov %al,0xf6;");
asm("out %dx,%al;");
asm("inc %dx;");
asm("mov %al,0xffh;");
asm("out %dx,%al;");

Cómo hay que hacerlo? Son las distintas formas que he encontrado en internet para hacerlo, pero el out en la última parece que no le gusta...
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:añadir codigo ensamblador en c++

Publicado por DeeP (1 intervención) el 18/06/2007 19:09:37
Yo tambien andube haciendo algo asi, te recomiendo usar Turbo C++ y la etiqueta asm { codigo } te va funcionar, pero como veo lo quieres en linux, lo que puedes hacer es llamar a tus rutinas de asm con la libreria stdlib.h o stdio no recuerdo cual, con el comando system(" "); //esto es por linea. No se si te funcione pero haz el intento. O bien haces tu programita en ensambla y lo llamas desde C++ con la rutina system("tuprograma"); ..... A ver que te funciona, pero si puedes opta por asm con Turbo C++.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:añadir codigo ensamblador en c++

Publicado por Ayuda por favor (3 intervenciones) el 20/06/2007 09:52:17
He probado a cambiar asm("out %dx,%al;"); por asm("out %al,%dx;"); y compila bien, y no entiendo porqué. De la primera manera me da el error suffix or operands invalid for 'out' y de la segunda manera compila bien. ¿Alguien me lo puede explicar?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:añadir codigo ensamblador en c++

Publicado por DeeP (1 intervención) el 20/06/2007 17:02:15
La sintaxis del comando OUT es:

OUT DX,AX

DX contiene el valor del puerto que se usa para la comunicacion y AX contiene la informacion que se esta mandando. No se puede cambiar el orden de los registro pues ya está establecida esta sintaxis por defecto.

Recuerda que AX = Al, Ab

poner OUT AL, DX , marca error por que esta mal el comando, pues esto seria para un IN y no un OUT.

Espero me hayas entendido!!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:añadir codigo ensamblador en c++

Publicado por DeeP (1 intervención) el 20/06/2007 17:08:44
Como tip extra, recuerda que el registro AX, es el acumulador por excelencia y es utilizado para operaciones que implican entrada/salida y la mayor parte de la aritmética.

es como decir DX <----- AX Lo que esta en AX se va DX para un OUT o bien

AX<-----DX Lo que hay en DX se guarda en AX para un IN

Recuerda el orden es de derecha izquierda <---------

Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:añadir codigo ensamblador en c++

Publicado por Ayuda por favor (3 intervenciones) el 21/06/2007 08:53:38
Muchas gracias por tu explicación. Por lo que comentas AX = al, ab
y la forma correcta sería out("%dx,%al;"); pero es esta la que no compila bien el gcc, me da el error Suffix or operands invalid for out. Sin embargo, si lo pongo de la manera incorrecta: out("%al,%dx;"); compila bien. No entiendo porque compila de la manera incorrecta y no compila de la correcta. ¿Alguna idea? porque yo ya no se que pasa.

Gracias de nuevo por tu paciencia y ayuda.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:añadir codigo ensamblador en c++

Publicado por DeeP (1 intervención) el 21/06/2007 15:35:43
Pues desconosco la razon por la cual te compila, segun yo te deberia marcar error, dejame regresando a mi casa lo checo en Turbo C++ a ver que me arroja, igual es algo posible... pero no creo por que DX guarda el puerto... Igual algun error de gcc.. Raro!!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:añadir codigo ensamblador en c++

Publicado por jgsegura7 (3 intervenciones) el 11/08/2009 15:32:06
Lo que tiene que hacer es ponerle un doble underscore al asm ( __asm )
Revise este ejemplo a ver si le funciona. nada mas crea un windows console application, y despues un C++ Source File y ahi pone esto:

#include "conio.h"
#include <iostream>
using namespace std;

int SumarDosEnteros( int a, int b )
{
int result;

__asm
{
mov eax, a
add eax, b
mov result, eax
}

return result;
}

int main() {

int a = 300, b = 255, c = 0;
c = SumarDosEnteros(a,b);
cout << c;
getch();
return 0;

}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:añadir codigo ensamblador en c++

Publicado por gfsdsdf (1 intervención) el 11/07/2013 07:08:30
este codigo solo se puede utilizar en Microsoft Visual C++, en DEV-C++ no reconoce la syntaxis, pero esta sintaxys si es correcta esta en el libro de lenguaje ensamblador para computadoras basadas en Intel Kip. R. Irvine.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:añadir codigo ensamblador en c++

Publicado por daniel (1 intervención) el 05/11/2009 20:19:54
bueno, no mencionas qué compilador utilizas, asi que te mando una pagina con muchos ejempos: http://www.zator.com/Cpp/E4_10.htm
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar