C/Visual C - C++ y ensamblador

 
Vista:

C++ y ensamblador

Publicado por Lahm (3 intervenciones) el 03/06/2011 02:26:19
Saludos. Realicé un programa para ver como interactúan C++ y ensablador, este es el código

//Programa que ilustra un procedimiento en ensamblador que muestra
//el contenido de una estructura de datos en C

//Una estructura de datos simple-------------------------------------------
typedef struct registros
{
char primer_nombre[16];
char apellido[16];
int edad;
int salario;
}REGISTRO;

//Llenado de algunos registros---------------------------------------------
REGISTRO registro[4]=
{
{"ABC","DEF",56,2300},
{"GHI","JKL",32,3400},
{"MNO","PQR",27,4300},
{"STU","VWX",50,3700}
};

//Funciones

Cad (char *dir_cadena[]){

_asm{
mov bx,dir_cadena
mov ah,2
sup:
mov dl,[bx]
cmp al,0
je inf
int 0x21
jmp sup
inf:
mov al,0x20
int 0x21
}
return 0;
}

Clrf(){
_asm{
mov ah,2
mov dl,13
int 0x21
mov dl,10
int 0x21
}
return 0;
}

Nume (int temp){
_asm{
mov ax,temp
mov bx,10
push bx

L1:
mov dx,0
div bx
push dx
cmp ax,0
jne L1

L2:
pop dx
cmp dl,bl
je L3
mov ah,2
add dl,0x30
int 0x21
jmp L2

L3:
mov dl,0x20
int 0x21
}
return 0;
}



//Programa-----------------------------------------------------------------

void main(){

int apunt=-1;
while(apunt ++ <3)
{
Cad(registro[apunt].apellido);
Cad(registro[apunt].primer_nombre);
Nume(registro[apunt].edad);
Nume(registro[apunt].salario);
Clrf;
}
}

Me tira estos errores y la verdad no entiendo que me está haciendo falta

Info :Compiling C:\BC5\BIN\estruct.cpp
Error: estruct.cpp(93,32):Cannot convert 'char *' to 'char * *'
Error: estruct.cpp(93,32):Type mismatch in parameter 'dir_cadena' in call to 'Cad(char * *)'
Error: estruct.cpp(94,37):Cannot convert 'char *' to 'char * *'
Error: estruct.cpp(94,37):Type mismatch in parameter 'dir_cadena' in call to 'Cad(char * *)'
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

C y ensamblador

Publicado por Tom (619 intervenciones) el 03/06/2011 09:08:01
No te recomiendo que te metas en líos si no tienes claras estas cosas ...

1
Cad (char *dir_cadena[])


Es, en tu código, lo mismo que:

1
Cad (char **dir_cadena)


El mensaje del compilador es bastante claro al respecto, la funcion espera un char** y le estás pasando un char*.
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

C y ensamblador

Publicado por Lahm (1 intervención) el 03/06/2011 16:12:57
OK, pero eso no resuelve el problema. Solo viste el código. Gracias de todos modos
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

C y ensamblador

Publicado por Lahm (3 intervenciones) el 03/06/2011 20:41:54
Además del detalle mencionado, hacía falta corregir nemónicos en la función Cad
Dejo el código ya funcional por si alguien necesita una referencia similar

//Programa que ilustra un procedimiento en ensamblador que muestra
//el contenido de una estructura de datos en C

//Una estructura de datos simple-------------------------------------------
typedef struct registros
{
char primer_nombre[16];
char apellido[16];
int edad;
int salario;
}REGISTRO;

//Llenado de algunos registros---------------------------------------------
REGISTRO registro[4]=
{
{"ABC0", "DEF0", 56, 2300},
{"GHI0", "JKL0", 32, 3400},
{"MNO0", "PQR0", 27, 4300},
{"STU0", "VWX0", 50, 3700}
};

//Funciones

Cad (char *dir_cadena){

_asm{
mov bx,dir_cadena
mov ah,2
sup:
mov dl,[bx]
cmp dl,'0'
je inf
int 0x21
inc bx
jmp sup
inf:
mov dl,' '
mov ah,2
int 0x21
}
return 0;
}

Clrf(){
_asm{
mov ah,2
mov dl,13
int 0x21
mov dl,10
int 0x21
}
return 0;
}

Nume (int temp){
_asm{
mov ax,temp
mov bx,10
push bx

L1:
mov dx,0
div bx
push dx
cmp ax,0
jne L1

L2:
pop dx
cmp dl,bl
je L3
mov ah,2
add dl,0x30
int 0x21
jmp L2

L3:
mov dl,0x20
int 0x21
}
return 0;
}



//Programa-----------------------------------------------------------------

void main(){

int apunt=-1;
while(apunt ++ < 3)
{
//Cad(registro[apunt].apellido);
Cad(registro[apunt].primer_nombre);
Nume(registro[apunt].edad);
Nume(registro[apunt].salario);
Clrf;
_asm{mov ah,8
int 0x21}
}
}
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

C y ensamblador

Publicado por freddy gerardo lopez palomeque (1 intervención) el 08/02/2013 19:29:15
hola que tal... el programa marca este error.

Compiling NONAME00.CPP:
Error NONAME00.CPP 25: Invalid combination of opcode and operands in function Cad(char *)

alguna solucion.. 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