Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - class_OpenGL

#391
¿Por qué usas el registro ecx? ¿Podrías usar el ebx? Por cierto, no usé inline porque quería acostumbrarme a los ficheros objeto y a enlazar. En cualquier caso, ¿no debería mi código funcionar?
#392
Hola, muy buenas. Estoy aprendiendo ensamblador y para ello lo estoy enlazando con las librerías estandar de C++. No sé mucho sobre la sintaxis de intel (estoy aprendiendo NASM), pero he conseguido el siguiente código (el cual está guardado en el archivo intercambiar.s)

Código (asm) [Seleccionar]
.file "intercambiar.cpp"
.text
.globl __Z12intercambiarPiS_
.def __Z12intercambiarPiS_; .scl 2; .type 32; .endef
__Z12intercambiarPiS_:
LFB0:
.cfi_startproc
pushl %ebp
.cfi_def_cfa_offset 8
.cfi_offset 5, -8
movl %esp, %ebp
.cfi_def_cfa_register 5

movl 8(%ebp), %eax
movl 12(%ebp), %ebx
movl %eax, 12(%ebp)
movl %ebx, 8(%ebp)

popl %ebp
.cfi_restore 5
.cfi_def_cfa 4, 4
ret
.cfi_endproc
LFE0:
.ident "GCC: (GNU) 4.8.1"


Lo que he hecho es conseguir el código base gracias al compilador g++ de MinGW y añadir el intercambiador de variables.

Lo que sería el intercambiador es el siguiente:

Código (asm) [Seleccionar]
pushl %ebp
movl %esp, %ebp

movl 8(%ebp), %eax
movl 12(%ebp), %ebx
movl %eax, 12(%ebp)
movl %ebx, 8(%ebp)

popl %ebp
ret


Lo que he hecho después es ejecutar el siguiente comando:
g++ -Wall -c intercambiador.s

Con el, he obtenido un fichero objeto

Ahora bien, cuando ejecuto el programa principal, no me intercambia las variables.

Aquí tenéis el programa principal en C++:

Código (c++) [Seleccionar]
#include <iostream>

void intercambiar(int* lpnValorA, int* lpnValorB);

int main() {
int nValorA, nValorB;

std::cout << "Introduzca el valor A: ";
std::cin >> nValorA;
std::cout << "Introduzca el valor B: ";
std::cin >> nValorB;

intercambiar(&nValorA, &nValorB);

std::cout << "\nnValorA = " << nValorA << std::endl;
std::cout << "nValorB = " << nValorB;

std::cin.get();
std::cin.get();
return 0;
}


Pues eso, el intercambiador no hace nada

Soy novato en ASM, por lo que no seáis duros :D Gracias
#393
A parte de lo que dice PabloPbl, con la primera cadena se reserva espacio para CINCO caracteres. El último carácter indica el fin de la cadena (equivale a 0). Por ejemplo, la declaración
Código (c++) [Seleccionar]
char cadena[] = "Hola";
equivale a la declaración
Código (c++) [Seleccionar]
char cadena[] = {'H', 'o', 'l', 'a', '\0'};
Si no se pusiera ese carácter, no sabríamos el final de la cadena.
#394
Esto siempre me ha pasado con el compilador de MinGW (solamente he probado este y el que usa Visual Studio 2013 - 2015). Lo más seguro sea que MinGW hace código máquina que se parece a algún tipo de virus conocido y por ello tiene que analizarlo bien.
Digo que se analiza pues pasado un rato, Avast (el antivirus que yo usaba) dejaba ejecutarse a la aplicación.
No se me ocurre otra cosa XD
#395
Jajaja. Es cierto que es un razonamiento un tanto alocado. He pensado eso tan rápido porque "recientemente" hubo un tema similar :D Entonces, para ir descartando, dije esa solución
#396
Prueba a desactivar el antivirus. Lo que pasa es que este analiza tu programa por si fuera un virus. Al menos eso me pasaba a mí :D
#397
Hola, muy buenas a tod@s. Mi pregunta (aunque no sé si debería ir en este subforo) es la siguiente: ¿Se puede crear un acceso directo de Windows que te rellene los cuadros de texto que están nombrados por un nombre?
Por ejemplo, una página tiene los siguientes recuadros:

Código (html4strict) [Seleccionar]
<input id="consultaNotaForm:nifnie" type="text" name="consultaNotaForm:nifnie" class="submenu" maxlength="9" size="15">
...


Gracias por ver el tema
#398
A mi me pasa casi que al contrario (pero si que he usado a veces la línea de comandos, a nivel de aprendizaje, no como algo para "hacer todos los días").
#399
Código (cpp) [Seleccionar]
int leerVector(int vector)

Has puesto como parámetro un entero, no un vector de enteros
#400
No he venido al foro de programación a discutir :D

¿Has conseguido resolver tu error?