Está en la página 1de 8

Combinando C y códigos de

ensamblaje
Siguiente hilo | Lista de hilos | Tema anterior Comenzar un hilo | Configuraciones

Detalles Mensaje
Solo lectura
Combinando C y códigos de ensamblaje
Autor Agradecería si alguien puede decirme / mostrarme cómo
ChiewHuat Sew
combinar C y el código de ensamblado en Uvision 2.
Publicado el
13 de diciembre de 2000 a las
01:34 GMT
Juego de herramientas
C51

Solo lectura
RE: Combinando C y códigos de ensamblaje
Autor ¿Esto ayuda?
Keil Support
Publicado el http://www.keil.com/support/docs/1671.htm
13 de diciembre de 2000 a las
02:51 GMT
Keil Support
Juego de herramientas
C51

Solo lectura
RE: Combinando C y códigos de ensamblaje
Autor La otra forma es usar
John Cleary
#pragma asm
Publicada (código de ensamblaje y comentarios de estilo de
15-dic-2000 19:50 GMT ensamblaje)
Juego de herramientas #pragma endasm.
C51
Pero hay una muy buena razón para no hacer esto alguna
vez. Tengo un emulador Nohau, y el emulador comenzó a
tratar todo el código en el archivo que usaba esto como modo
mixto (ensamblado forzado línea por línea).Rápidamente
saqué los pragmas y tomé el código asm a otro archivo como
un conjunto de procedimientos.

Todavía me gustaría poder incluir estos procedimientos en


línea de alguna forma, pero no hay un comando / pragma / lo
que sea in_line, y tendría que haber una lista de cosas que
hacer para que no se destruyan los registros del código eso
pone esta función en línea.
Sean

Solo lectura
RE: Combinando C y códigos de ensamblaje
Autor Bueno, supongo que haría eso, ¿no?
Andrew Neil
Publicada Como se menciona en otro lugar de este hilo, cuando usa
15-dic-2000 23:41 GMT #pragma asm ... # pragma endasm en su fuente 'C' también
Juego de herramientas debe usar la directiva SRC, y luego pasar la fuente de
C51 ensamblaje resultante al Ensamblador.
Por lo tanto, no es el compilador el que genera el código
objeto, sino el ensamblador.
Por lo tanto, es el ensamblador el que inserta la información
de depuración en el archivo objeto, y no en el compilador.
Por lo tanto, la información de depuración (incluidos los
números de línea) se referirá a la fuente de ensamblaje, y no a
la fuente 'C'.

Solo lectura
RE: C y códigos de ensamblaje
Autor gracias por tu ayuda
chiew_huat coser
Publicado el Por favor revisa si lo que estoy haciendo es correcto.
18 de diciembre de 2000 a las
06:11 GMT
ejemplo:
Juego de herramientas mov DPTR, # IO_PORT0
C51
mov A, # 55h
movx @ dptr, A

se puede hacer como en C:

extern xdata unsigned char IO_PORT = 0x9800;


void main ()
{unsigned charx;
x & = 0x55;
}

¿se puede escribir de esta manera?


si no, ¿cómo debería escribir? Espero que me puedas
mostrar.
pls también debería usar extern? xdata o idata? ¿Cuál es el
principal diferente?
Por favor, puedo saber cuándo debería usar XBYTE.

Solo lectura
RE: C y códigos de ensamblaje
Autor Problema: desea mover 0x55 a la dirección XDATA IO_PORT
Mark Odell
a 0x9800.
Publicado el
18 de diciembre de 2000 a las Solución:
13:33 GMT
Juego de herramientas
C51

// No te olvides de volátil.
carácter volátil sin signo IO_PORT _at_ 0x9800;
void main (void)
{
unsigned char charVal;

// Escribir.
IO_PORT = 0x55;

// Leer.
charVal = IO_PORT;

// Lea de nuevo.
if (IO_PORT & 0x80)
{
// High bit set.
}
}

PD No puede externar una variable C y asignarle un


valor. Solo use extern en otros archivos C que necesiten usar
IO_PORT. Nunca use XBYTE, simplemente cree un puntero
tipeado como en unsigned char xdata * ptr. Ahora ptr solo
puede apuntar a xdata.

- Marca

Solo lectura
RE: C y códigos de ensamblaje
Autor Nunca use XBYTE
Andrew Neil
Publicado el . ¿Puedo preguntar por qué?
19 de diciembre de 2000 a las
09:32 GMT
Juego de herramientas
C51

Solo lectura
RE: C y códigos de ensamblaje
Autor Simplemente porque es una macro y no me gustan las macros
Mark Odell
cuando la implementación proporciona una manera limpia de
Publicado el hacer lo mismo. Todo lo que digo es, por supuesto, una
19 de diciembre de 2000 a las opinión, tómalo con un grano de sal.
12:58 GMT
Juego de herramientas Saludos.
C51
- Marca
Solo lectura
RE: C y códigos de ensamblaje
Autor cuando debería la palabra extern cuando xdata debería o no
chiew huat sew
ser usado. es xdata hace lo mismo que xbyte. pls, ¿cómo
Publicada puedo aumentar DPTR cuando quiero escribirlo en
29-dic-2000 14:44 GMT C? Además, ¿cómo puedo aumentar el DPL? ¿Y cómo puedo
Juego de herramientas escribir el push y pop del ensamblaje en. los pls me muestran
C51 con un poco de ejemplo. ¿Hay algún lado donde pueda
obtener más información sobre el uso de c para controlar
8051. Gracias.

Solo lectura
RE: C y códigos de ensamblaje
Autor extern solo necesita variables cuando necesita definirlas en un
Mark Odell
archivo C, pero utilícelas en al menos otro archivo C.Las
Publicada variables se externan en un archivo include (.h), que
29-dic-2000 22:30 GMT generalmente está incluido en todos los archivos C que
Juego de herramientas requieren esa variable.
C51
Puede acceder a DPTR a través de la extensión de palabra
clave sfr. Leí el manual C51. No aconsejo tocar el DPTR, sin
embargo, ya que puedes criticar el uso del compilador. Del
mismo modo, puede acceder a los puertos en el 8051 de esta
manera:

sfr port0 = 0x80;


sbit portBit0_0 = port0 ^ 0;
sbit portBit0_1 = port0 ^ 1;
...
sbit portBit0_7 = port0 ^ 7;

port0 = 0xFF; // Establecer todos los pines de alto


portBit0_1 = 0; // Establecer puerto 0.1 bajo

xdata no es lo mismo que XBYTE. Para declarar una variable


que existirá en xdata simple haz esto:

char xdata myVariable;

Del mismo modo, puede colocar variables en datos o idata (o


pdata, bdata, etc.) de forma similar a como se muestra a
continuación:

char idata someVar;


int datos otherVar;
Para ubicar una variable en una dirección particular, usa la
directiva _at_ de esta manera:

char xdata aVar _at_ 0x8000;


código int bVar _at_ 0xFFFE;

Lea "The C Programming Language, 2nd Ed." De Kerrnigan &


Ritchie. y luego lea su manual C51.

Solo lectura
RE: C y códigos de ensamblaje
Autor Hola Mark / Andrew,
James Lee
Publicado el lee tus consejos a los demás. ¡Espléndido! Tal vez cualquiera
18 de agosto de 2003 a las 12:01 de ustedes puede ayudarme también.
GMT
Encontré este foro cuando busco una guía rápida para
Juego de herramientas compartir código de diferentes archivos de C y .a51.
C51
Llamarse entre sí desde C para obtener la función escrita en
.a51 o viceversa se completa. Pasé por c2asm2c.zip y
funcionó perfectamente. Sin embargo, encuentro algunos
problemas cuando necesito pasar algunas variables que
necesitan ser manipuladas de .a51 a .c
Mi caso: -

El código principal está en .a51. Requiere llamar a una función


que agrega 20 bytes de datos de 8 bits ligeramente diferentes
y luego toma su promedio (es decir, por división).

Escribir la función anterior en .a51 es un dolor debido a la


adición de 16 bits no disponible en 8051 realizada bajo Keil
uV2.

Mi solución pensó: - es escribir la función de suma en C para


que la adición se pueda hacer mucho más fácilmente.

Problema: ¿cómo paso las variables / registros definidos en


.a51 a la función C para llamar desde el entorno .a51? La
función C no pudo reconocer el registro declarado similar en
.a51 anterior. ¿Debo declararlos con un nuevo nombre O
utilizar el nombre similar de los registros de datos O puedo
usar alguna declaración global de registros de datos?¿Pero
cómo?

Aprecie algunos consejos realmente geniales si están


disponibles.

Saludos,
James
Solo lectura
RE: Combinando C y códigos de ensamblaje
Autor ¿Quiere decir cómo poner el ensamblador en línea dentro de
Andrew Neil
un archivo fuente 'C', o cómo construir un proyecto uVision
Publicado el que comprenda tanto los archivos fuente 'C' como los
13 de diciembre de 2000 a las ensambladores?
08:42 GMT
Juego de herramientas ¿O ambos?
C51

Solo lectura
RE: Combinando C y códigos de ensamblaje
Autor Los pls pueden tener algún ejemplo de la combinación del
chiew huat sew
lenguaje assemable C y 8051. Gracias
Publicada
14-dic-2000 04:16 GMT
Juego de herramientas
C51

Solo lectura
RE: Combinando C y códigos de ensamblaje
Autor ¿Quiere decir que quiere que uVision muestre tanto el código
Mark Odell
fuente C como ASM al mismo tiempo que depura?
Publicado el
13 de diciembre de 2000 a las - Marca
13:04 GMT
Juego de herramientas
C51

Solo lectura
RE: Combinando C y códigos de ensamblaje
Autor Si, gracias. qué se debe hacer con yo quiero combinar ambos
chiew huat sew
idiomas. ¿Debo guardar ambos idiomas en un nombre de
Publicada archivo diferente? Si no, ¿qué debería incluir en el
14-dic-2000 04:43 GMT programa? Gracias por tu respuesta. Gracias.
Juego de herramientas
C51

Solo lectura
RE: Combinando C y códigos de ensamblaje
Autor Todavía no has dicho exactamente lo que quieres hacer:
Andrew Neil
Publicada 1. En tu archivo fuente 'C', incluye un poco de ensamblador
14-dic-2000 09:21 GMT para alguna tarea "complicada";
Juego de herramientas
C51 2. Realice un proyecto que contenga tanto archivos fuente 'C'
como ensambladores;

3. En el archivo de listado, vea el código ensamblador


generado por el compilador para su fuente 'C';

4. Mientras realiza la depuración, vea la fuente 'C' y el


ensamblador correspondiente.
Así que aquí vamos:

1. Para incluir algún ensamblador dentro de un archivo


fuente 'C' , use el asma #pragma, como se describe en p12
de la Guía del usuario C51 [1].

Tenga en cuenta que también necesita especificar la directiva


SRC para hacer que el compilador emita el origen del
ensamblador, y luego pasarlo al ensamblador para generar el
objeto.
(en uVision2, solo verifique las opciones 'Generar archivo SRC
del ensamblador' y 'Montar archivo SRC' en las propiedades
del archivo para la fuente 'C')

2. Para hacer un proyecto que comprenda archivos 'C' y


ensambladores: simplemente agregue las fuentes a su
Proyecto.
uVision se asegurará de que se utiliza el traductor adecuado
(compilador o ensamblador) para generar el objeto, y luego el
enlazador solo vincula todos los objetos.
Consulte la Guía del usuario de C51 p141 para obtener
detalles sobre la interfaz entre 'C' y Ensamblador.
Consulte también la Guía del usuario de uVision [2]

3. Vea tanto el origen como el ensamblador en el archivo


de lista del compilador: use la directiva CODE - vea la Guía
del usuario p15.
O marque 'Código de ensamblaje' en las opciones de 'Listado'
de uVision para su Proyecto.
(Desafortunadamente, esto da la 'C' y el ensamblador en
partes separadas de la lista - Keil C51 no produce una lista de
ensambladores C + "intercalados").

4. Ver fuente y ensamblador durante la depuración: con


uVision en modo Depuración (Depurar / Iniciar sesión de
depuración), use la ventana Ver / Desensamblar.
En este caso , obtiene el C + Assembler "intercalado".
Tenga en cuenta que debe haber habilitado la generación de
Información de depuración para que esto funcione (las
opciones de 'Salida' del Proyecto).

Referencias:
[1] C51 Guía del usuario 03.2000

[2] Guía del usuario de uVision 06.2000, "Primeros pasos y


creación de aplicaciones"

Todos los manuales están en el CD gratuito en formato PDF.

Solo lectura
RE: Combinando C y códigos de ensamblaje
Autor ¿Cómo se puede acceder un código en lenguaje ensamblador
Aasif Mansoor
a través de un programa simple en lenguaje C?
Publicado el
24 de julio de 2003 a las 17:54 Por favor envíeme la respuesta lo antes posible.
GMT
Juego de herramientas
Ninguno Aasif_mansoor1@yahoo.com

Solo lectura
RE: Combinando C y códigos de ensamblaje
Autor "¿Cómo accederá un código en lenguaje ensamblador a
Andrew Neil
través de un programa simple en lenguaje C?"
Publicado el
10 de agosto de 2003 a las 22:32 Lo siento, no entiendo tu pregunta.
GMT
Juego de herramientas Creo que todo esto ha sido completamente cubierto en
Ninguno
los Manuales y discusiones previas?
Si no, entonces, ¿qué punto te confunde exactamente?

También podría gustarte