In-line assembly in c in keil

Status
Not open for further replies.

embpic

Advanced Member level 3
Joined
May 29, 2013
Messages
742
Helped
80
Reputation
160
Reaction score
77
Trophy points
1,308
Location
india
Activity points
5,213
Hello sir's
i have tried assembly language and C for p89v51rd2 using KEIL compiler but if try In-line assembly in c then it give lots of warning and error also .

even if i tik follow i am getting error as follows.
this is simple example i tried.
thanx
 
Last edited:

Apparently the assembler doesn't understand your syntax. What do you mean to say with this line?

Code:
jmp $
 

actually i add this just for example.
but when i use instrn as

mov a,#55

then also it gives error befor adding any assembly it works fine 0 error and 0 wanrnings

but if i add assembly it gives error regarding startup.s like that means i don't know which file to include or exclude so guide me.

thanx
 

Did you find anything about __asm in the C51 users manual? I think, Keil C51 uses a #pragma asm instead.
 
As FvM indicated, use of the directives #pragma asm and #pragma endasm are required when using the C51 Compiler.

Reference: C51: GETTING INLINE ASSEMBLY TO WORK




BigDog
 
Last edited:

if i declare any variable in c data type then is it accessible from assembly.
and procedure is correct or not?
and give me procedure also with example.
thanx.
 

if i declare any variable in c data type then is it accessible from assembly.
and procedure is correct or not?
and give me procedure also with example.

While accessing a variable define in C code within an inline assembly can be accomplished, a more prudent method would be to utilize an assembly routine which is then called by the main C program.

A possible shortcut would be to use the #PRAGMA SRC directive with a dummy C routine to generate assembly code, which could then be modified as needed, assembled and then called by the original C program.

Reference: **broken link removed** C51: CALLING ASSEMBLY ROUTINES FROM C"]C51: CALLING ASSEMBLY ROUTINES FROM C



BigDog
 
Last edited by a moderator:

as you given procedure i follow it but getting confused. my source code is as follows

Code:
#pragma SRC
#include<reg51f.h>
#include<intrins.h>

unsigned int delay(unsigned int);

void main()
{
	while(1)
	{
		P0 =~P0;
		delay(100);
	}
}

unsigned int delay(unsigned int del)
{
//	mov a,#44
return (del+1);
}
//		assembly line i want to insert
//back: djnz del,back

and after i compiled it generate main.src so i renamed as main.A51 so portion of file as follows

Code:
unsigned int delay(unsigned int del)

	RSEG  ?PR?_delay?MAIN
_delay:
	USING	0
			; SOURCE LINE # 16
;---- Variable 'del?140' assigned to Register 'R6/R7' ----
; {
//********************source code1

			; SOURCE LINE # 17
; return (del+1);
//********************source code2
			; SOURCE LINE # 18
	MOV  	A,R7
	ADD  	A,#01H
	MOV  	R7,A
	CLR  	A
	ADDC 	A,R6
	MOV  	R6,A
; }			; SOURCE LINE # 19
?C0004:
	RET  	
; END OF _delay

	END

Ok this is my main.src file. So, where to write assembly code at source code1 or at source code2.

wheather to include main.A51 file to Target or not?
 

Status
Not open for further replies.

Similar threads

Cookies are required to use this site. You must accept them to continue using the site. Learn more…