Ege 631
Download
1 / 13

EGE 631 - PowerPoint PPT Presentation


  • 119 Views
  • Uploaded on

EGE 631. LHO 15 C with assembly language. There are several reasons to call an assembly routine from your C program. You may have assembly code already written that you wish to use You may need to improve the speed of a particular function

loader
I am the owner, or an agent authorized to act on behalf of the owner, of the copyrighted work described.
capcha
Download Presentation

PowerPoint Slideshow about ' EGE 631' - daphne


An Image/Link below is provided (as is) to download presentation

Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -
Presentation Transcript
Ege 631

EGE 631

LHO 15

C with assembly language


There are several reasons to call an assembly routine from your C program.

You may have assembly code already written that you wish to use

You may need to improve the speed of a particular function

You may want to manipulate SFRs or memory-mapped I/O devices directly from assembly

Segment Naming Conventions


Data Objects - your C program.Data objects are the variables and constants you declare in your C programs.

The Cx51 compiler generates a separate segment for each memory type for which a variable is declared. The following table lists the segment names generated for different variable data objects.


Parameter Passing in Registers - your C program.C functions may pass parameters in registers and fixed memory locations. A maximum of 3 parameters may be passed in registers. All other parameters are

passed using fixed memory locations. The following tables define what registers are used for passing parameters.


The following examples clarify how registers are selected your C program.

for parameter passing.


Function Return Values - your C program.Function return values are always passed using CPU registers. The following table lists the possible return types and the registers used for each.


; ASM1.SRC generated from: ASM1.C your C program.

NAME ASM1

?PR?_asmfunc1?ASM1 SEGMENT CODE

PUBLIC _asmfunc1

; #pragma SRC

; #pragma SMALL

; unsigned int asmfunc1 (

RSEG ?PR?_asmfunc1?ASM1

USING 0

_asmfunc1:

;---- Variable 'arg?00' assigned to Register 'R6/R7' ----

; SOURCE LINE # 4

; SOURCE LINE # 6

; return (1 + arg);

; SOURCE LINE # 7

MOV A,R7

ADD A,#01H

MOV R7,A

CLR A

ADDC A,R6

MOV R6,A

; }

; SOURCE LINE # 8

?C0001:

RET

; END OF _asmfunc1

END


$include (c8051f020.inc); Register definition file. your C program.

NAME MBTN

?PR?mbtn?MBTN SEGMENT CODE

?DT?mbtn?MBTN SEGMENT DATA OVERLAYABLE

EXTRN CODE (rd_buttons)

PUBLIC mbtn

RSEG ?DT?mbtn?MBTN

?mbtn?BYTE:

last_button: DS 1

RSEG ?PR?mbtn?MBTN

;***************************************************************

; FUNCTION: mbtn - C callable routine REMEMBERS WHICH BUTTON WAS

; PRESSED LAST. IF NO BUTTONS HAVE BEEN PRESSED

; ASSUMES P5.3 BUTTON WAS LAST ONE PRESSED.

; INPUTS: NONE

; OUTPUTS: R7(3..0) - BITS ARE SET BASED ON LAST BUTTON PRESSED

; NOTE: ONE AND ONLY ONE BIT OF ACC(3..0) IS SET.

; R7(7..0) = UNDEFINED

; CALLS: rd_buttons

; DESTROYS: ACC, PSW, R7

; 27 Bytes of code

;***************************************************************


mbtn: your C program.

USING 0

CALL rd_buttons ;GET BUTTONS

MOV A,R7

JZ FIX_BTNS ;JUMP IS NO BUTTONS PRESSED

MOV last_button,A ;SAVE BUTTONS

;BE SURE ONE AND ONLY ONE BUTTON SAVED

FIX_BTNS:

MOV A,#01 ;SET BUTTON PRESSED BIT

XCH A,last_button ;SWAP LOW NIBBLES

SETB ACC.3 ;BE SURE AT LEAST ONE BIT IS SET

CHKBTN: RRC A ;CHECK FOR A 1

JC GOT1 ;EXIT IF 1

XCH A,last_button ;GET LSTBTN AND

RL A ;SHIFT BIT IN LSTBTN

XCH A,last_button ;SAVE LSTBTN

JMP CHKBTN ;KEEP LOOKING FOR FIRST 1

GOT1: MOV R7,last_button ;RETURN LAST BUTTON PRESSED

RET

END


ad