0% found this document useful (0 votes)
2 views

Ch13_1 High-Level Language Interface

Chapter 13 discusses the mixed-mode programming interface between C and assembly language, highlighting the advantages and disadvantages of using assembly. It covers key topics such as calling assembly procedures from C, parameter passing, returning values, and the use of inline assembly code. The chapter also explains how to compile mixed-mode programs and the importance of preserving registers and using underscores for external labels.
Copyright
© © All Rights Reserved
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
2 views

Ch13_1 High-Level Language Interface

Chapter 13 discusses the mixed-mode programming interface between C and assembly language, highlighting the advantages and disadvantages of using assembly. It covers key topics such as calling assembly procedures from C, parameter passing, returning values, and the use of inline assembly code. The chapter also explains how to compile mixed-mode programs and the importance of preserving registers and using underscores for external labels.
Copyright
© © All Rights Reserved
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 15

High-Level Language Interface

Chapter 13
S. Dandamudi
High-Level Language Interface

• Why program in mixed- • Calling C functions from


mode? assembly
∗ Focus on C and assembly • Inline assembly code
• Overview of compiling
mixed-mode programs
• Calling assembly
procedures from C
∗ Parameter passing
∗ Returning values
∗ Preserving registers
∗ Publics and externals
∗ Examples

2003  S. Dandamudi Chapter 13: Page 2


To be used with S. Dandamudi, “Fundamentals of Computer Organization and Design,” Springer, 2003.
Why Program in Mixed-Mode?
• Pros and cons of assembly language programming
∗ Advantages:
» Access to hardware
» Time-efficiency
» Space-efficiency
∗ Problems:
» Low productivity
» High maintenance cost
» Lack of portability
• As a result, some programs are written in mixed-
modem (e.g., system software)
2003  S. Dandamudi Chapter 13: Page 3
To be used with S. Dandamudi, “Fundamentals of Computer Organization and Design,” Springer, 2003.
Compiling Mixed-Mode Programs
• We use C and assembly
mixed-mode
programming
∗ Our emphasis is on the
principles
• Can be generalized to
any type of mixed-mode
programming

• To compile
bcc sample1.c sample.asm

2003  S. Dandamudi Chapter 13: Page 4


To be used with S. Dandamudi, “Fundamentals of Computer Organization and Design,” Springer, 2003.
Calling Assembly Procedures from C
Parameter Passing
• Stack is used for parameter passing
• Two ways of pushing arguments onto the stack
∗ Left-to-right
» Most languages including Basic, Fortran, Pascal use this
method
» These languages are called left-pusher languages
∗ Right-to-left
» C uses this method
» These languages are called right-pusher languages

2003  S. Dandamudi Chapter 13: Page 5


To be used with S. Dandamudi, “Fundamentals of Computer Organization and Design,” Springer, 2003.
Calling Assembly Procedures from C (cont’d)
Example:
sum(a,b,c,d)

2003  S. Dandamudi Chapter 13: Page 6


To be used with S. Dandamudi, “Fundamentals of Computer Organization and Design,” Springer, 2003.
Calling Assembly Procedures from C (cont’d)
Returning Values
• Registers are used to return values
Return value type Register used
char, short, int AX
(signed/unsigned)
long DX:AX
(signed/unsigned)
near pointer AX
far pointer DX:AX

2003  S. Dandamudi Chapter 13: Page 7


To be used with S. Dandamudi, “Fundamentals of Computer Organization and Design,” Springer, 2003.
Calling Assembly Procedures from C (cont’d)
Preserving Registers
• The following registers must be preserved
BP, SP, CS, DS, SS
• In addition, if register variables are enabled,
SI and DI
should also be preserved.
• Since we never know whether register variables
are enabled or not, it is a good practice to preserve
BP, SP, CS, DS, SS, SI and DI
2003  S. Dandamudi Chapter 13: Page 8
To be used with S. Dandamudi, “Fundamentals of Computer Organization and Design,” Springer, 2003.
Calling Assembly Procedures from C (cont’d)
Publics and External
• Mixed-mode programming involves at least two
program modules
» One C module and one assembly module
• We have to declare those functions and procedures
that are not defined in the same module as external
» extern in c
» extrn in assembly
• Those procedures that are accessed by another
modules as public

2003  S. Dandamudi Chapter 13: Page 9


To be used with S. Dandamudi, “Fundamentals of Computer Organization and Design,” Springer, 2003.
Calling Assembly Procedures from C (cont’d)
Underscores
• In C, all external labels start with an underscore
» C and C++ compilers automatically append the required
underscore on all external functions and variables
• You must make sure that all assembly references
to C functions and variables begin with
underscores
∗ Also, you should begin all assembly functions and
variables that are made public and referenced by C code
with underscores

2003  S. Dandamudi Chapter 13: Page 10


To be used with S. Dandamudi, “Fundamentals of Computer Organization and Design,” Springer, 2003.
Calling C Functions from Assembly
• Stack is used to pass parameters (as in our
previous discussion)
∗ Similar mechanism is used to pass parameters and to
return values
• C makes the calling procedure responsible for
clearing the stack of the parameters
∗ Make sure to clear the parameters after the call
instruction as in
add SP,4
on line 45 in the example program

2003  S. Dandamudi Chapter 13: Page 11


To be used with S. Dandamudi, “Fundamentals of Computer Organization and Design,” Springer, 2003.
Inline Assembly Code
• Assembly language statements are embedded into
the C code
» Separate assembly module is not necessary
• Assembly statements are identified by placing the
keyword asm
asm xor AX,AX; mov AL,DH
• We can use braces to compound several assembly
statements
asm {
xor AX,AX
mov AL,DH
}
2003  S. Dandamudi Chapter 13: Page 12
To be used with S. Dandamudi, “Fundamentals of Computer Organization and Design,” Springer, 2003.
Inline Assembly Code (cont’d)
Example
Get date interrupt service
∗ Uses interrupt 21H service
∗ Details:
Input:
AH = 2AH
Returns:
AL = day of the week (0=Sun, 1=Mon,…)
CX = year (1980 - 2099)
DH = month (1=Jan, 2=Feb, …)
DL = day of the month (1-31)

2003  S. Dandamudi Chapter 13: Page 13


To be used with S. Dandamudi, “Fundamentals of Computer Organization and Design,” Springer, 2003.
Inline Assembly Code (cont’d)
Compiling inline Assembly Programs
∗ TASM method
» Convert C code into assembly language and then invoke TASM
to produce .OBJ file
» Can use -B compiler option to generate assembly file
» Alternatively, can include
#pragma inline
at the beginning of the C file to instruct the compiler to use the
-B option
∗ BASM method
» Uses the built-in assembler (BASM) to assemble asm
statements
» Restricted to 16-bit instructions (i.e., cannot use 486 or
Pentium instructions)

2003  S. Dandamudi Chapter 13: Page 14


To be used with S. Dandamudi, “Fundamentals of Computer Organization and Design,” Springer, 2003.
Inline Assembly Code (cont’d)

Last slide

2003  S. Dandamudi Chapter 13: Page 15


To be used with S. Dandamudi, “Fundamentals of Computer Organization and Design,” Springer, 2003.

You might also like