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
Follow along with the video below to see how to install our site as a web app on your home screen.
Note: This feature may not be available in some browsers.
jmp $
The following example program, MAIN.C, demonstrates some simple inline assembly.
Code:void main(void){ test(); #pragma asm JMP $ ; endless loop #pragma endasm }
The following rules apply to C51 inline assembly:
To use #pragma ASM/ENDASM, you must set the Generate Assembler SRC File and Assemble SRC File source file compile options in µVision by right-clicking your source file name in the Project Workspace and selecting Options for File.
When using the Generate Assembler SRC File and Assemble SRC File options in µVision, if there are no other C modules in your project, you must manually include the C51 Run-Time Library (C51S.LIB, C51C.LIB, or C51L.LIB).
if i declare any variable in c data type then is it accessible from assembly.
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.
There are no examples in the book, but it is easy to create your own. The asm routine must know how parameters are passed, values returned, and the naming conventions of segments. The steps you must follow to create an example are outlined below:
1. Write a simple function in C that passes parameters and returns values the way you want your assembly routine to.
2. Use the SRC directive (#PRAGMA SRC at the top of the file) so that the C compiler generates a .SRC file instead of a .OBJ file.
3. Compile the C file. Since the SRC directive was specified, the .SRC file is generated. The .SRC file contains the assembly code generated for the C code you wrote.
4. Rename the .SRC file to a .A51 file.
5. Edit the .A51 file and insert the assembly code you want to execute into the body of the assembly function shell included in the .A51 file.
For example, the following code
Code:#pragma SRC unsigned char my_assembly_func ( unsigned int argument) { return (argument + 1); // Insert dummy lines to access all args and retvals }
when compiled generates the following assembly SRC file.
Code:NAME TESTCODE ?PR?_my_assembly_func?TESTCODE SEGMENT CODE PUBLIC _my_assembly_func ; #pragma SRC ; unsigned char my_assembly_func ( RSEG ?PR?_my_assembly_func?TESTCODE USING 0 _my_assembly_func: ;---- Variable 'argument?040' assigned to Register 'R6/R7' ---- ; SOURCE LINE # 2 ; unsigned int argument) ; { ; SOURCE LINE # 4 ; return (argument + 1); // Insert dummy lines to access all args and retvals ; SOURCE LINE # 5 MOV A,R7 INC A MOV R7,A ; } ; SOURCE LINE # 6 ?C0001: RET ; END OF _my_assembly_func END
#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
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