Chapter 12: High-Level Language Interface. Chapter Overview Introduction Inline Assembly Code C calls assembly procedures Assembly calls C procedures.

Slides:



Advertisements
Similar presentations
Assembly Language for x86 Processors 6th Edition Chapter 5: Procedures (c) Pearson Education, All rights reserved. You may modify and copy this slide.
Advertisements

Computer Architecture CSCE 350
C Programming and Assembly Language Janakiraman V – NITK Surathkal 2 nd August 2014.
Chapter 8: Programming the Microprocessor. Copyright ©2009 by Pearson Education, Inc. Upper Saddle River, New Jersey All rights reserved. The Intel.
Assembly Language for Intel-Based Computers, 5 th Edition Chapter 12: High-Level Language Interface (c) Pearson Education, All rights reserved.
Assembly Language for Intel-Based Computers Chapter 5: Procedures Kip R. Irvine.
Outline Learning Assembly by an Example.  Program Formats  Some Simple Instructions  Assemble and Execute Learning Another Example  Data Definition.
Assembly Language for Intel-Based Computers, 5 th Edition Chapter 12: High-Level Language Interface (c) Pearson Education, All rights reserved.
PC hardware and x86 3/3/08 Frans Kaashoek MIT
1 ICS 51 Introductory Computer Organization Fall 2006 updated: Oct. 2, 2006.
1 Lecture 5: Procedures Assembly Language for Intel-Based Computers, 4th edition Kip R. Irvine.
1 Function Calls Professor Jennifer Rexford COS 217 Reading: Chapter 4 of “Programming From the Ground Up” (available online from the course Web site)
Accessing parameters from the stack and calling functions.
1 Homework Reading –PAL, pp , Machine Projects –Finish mp2warmup Questions? –Start mp2 as soon as possible Labs –Continue labs with your.
Assembly Language for Intel-Based Computers, 4 th Edition Chapter 12: High-Level Language Interface (c) Pearson Education, All rights reserved. You.
ICS312 Set 11 Introduction to Subroutines. All the combinations in which a subroutine can be written 1. The subroutine may be: a. Internal or b. External.
CS2422 Assembly Language and System Programming High-Level Language Interface Department of Computer Science National Tsing Hua University.
CS2422 Assembly Language & System Programming November 7, 2006.
CS2422 Assembly Language & System Programming September 26, 2006.
Assembly Language for x86 Processors 6th Edition Chapter 13: High-Level Language Interface (c) Pearson Education, All rights reserved. You may modify.
High-Level Language Interface Chapter 17 S. Dandamudi.
6.828: PC hardware and x86 Frans Kaashoek
Introduction to Subroutines. All the combinations in which a subroutine can be written 1. The subroutine may be: a. Internal or b. External 2. The type.
Today’s topics Parameter passing on the system stack Parameter passing on the system stack Register indirect and base-indexed addressing modes Register.
Assembly Language for Intel-Based Computers, 6 th Edition Chapter 8: Advanced Procedures (c) Pearson Education, All rights reserved. You may.
Today's topics Multi-dimensional arrays Multi-dimensional arrays String processing String processing Macros Macros.
High-Level Language Interface Computer Organization and Assembly Languages Yung-Yu Chuang 2005/12/15 with slides by Kip Irvine.
1 Modular Programming, Stack Frames, and High-Level Language Interfacing Read Chapters 8 and 12 of textbook.
Procedures and the Stack Chapter 5 S. Dandamudi To be used with S. Dandamudi, “Introduction to Assembly Language Programming,” Second Edition, Springer,
Chapter 12: High-Level Language Interface. 2 Why Link ASM and HLL Programs? Use high-level language for overall project development Relieves programmer.
Today’s topics Procedures Procedures Passing values to/from procedures Passing values to/from procedures Saving registers Saving registers Documenting.
Lecture 7 A closer look at procedures Dr. Dimitrios S. Nikolopoulos CSL/UIUC.
Assembly Language for x86 Processors 7th Edition Chapter 13: High-Level Language Interface (c) Pearson Education, All rights reserved. You may modify.
Sahar Mosleh California State University San MarcosPage 1 Stack operations, Applications and defining procedures.
CSC 221 Computer Organization and Assembly Language
Addressing Modes Chapter 6 S. Dandamudi To be used with S. Dandamudi, “Introduction to Assembly Language Programming,” Second Edition, Springer,
Low Level Programming Lecturer: Duncan Smeed The Interface Between High-Level and Low-Level Languages.
Assembly Language for x86 Processors 7th Edition
Introduction to Assembly II Abed Asi Extended System Programming Laboratory (ESPL) CS BGU Fall 2013/2014.
Functions/Methods in Assembly
Compiler Construction Code Generation Activation Records
1 The Stack and Procedures Chapter 5. 2 A Process in Virtual Memory  This is how a process is placed into its virtual addressable space  The code is.
Introduction to Assembly II Abed Asi Extended System Programming Laboratory (ESPL) CS BGU Fall 2014/2015.
Introduction to Intel IA-32 and IA-64 Instruction Set Architectures.
1 Assembly Language: Function Calls Jennifer Rexford.
Calling Procedures C calling conventions. Outline Procedures Procedure call mechanism Passing parameters Local variable storage C-Style procedures Recursion.
Preocedures A closer look at procedures. Outline Procedures Procedure call mechanism Passing parameters Local variable storage C-Style procedures Recursion.
NASM ASSEMBLER & COMPILE WITH GCC 어셈러브 refered to ‘PC Assembly Language’ by Paul A. Carter
ICS51 Introductory Computer Organization Accessing parameters from the stack and calling functions.
7-Nov Fall 2001: copyright ©T. Pearce, D. Hutchinson, L. Marshall Oct lecture23-24-hll-interrupts 1 High Level Language vs. Assembly.
Practical Session 3.
Assembly function call convention
Assembly language.
Segment Definition The CPU has several segment registers:
ISA's, Compilers, and Assembly
Assembly Language for x86 Processors 6th Edition
Microprocessor and Assembly Language
Introduction to Compilers Tim Teitelbaum
High-Level Language Interface
Stack Frames and Advanced Procedures
Procedures – Overview Lecture 19 Mon, Mar 28, 2005.
Assembly Language Programming II: C Compiler Calling Sequences
MIPS Procedure Calls CSE 378 – Section 3.
EECE.3170 Microprocessor Systems Design I
Topic 3-a Calling Convention 1/10/2019.
Multi-modules programming
EECE.3170 Microprocessor Systems Design I
Assembly Language for Intel-Based Computers, 4th Edition
Computer Organization and Assembly Language
Procedures & Macros Introduction Syntax Difference.
Presentation transcript:

Chapter 12: High-Level Language Interface

Chapter Overview Introduction Inline Assembly Code C calls assembly procedures Assembly calls C procedures

Why Link ASM and HLL Programs? Use high-level language for overall project development –Relieves programmer from low-level details Use assembly language code –Speed up critical sections of code –Access nonstandard hardware devices –Write platform-specific code –Extend the HLL's capabilities

General Conventions Considerations when calling assembly language procedures from high-level languages: –Both must use the same naming convention (rules regarding the naming of variables and procedures) –Both must use the same memory model, with compatible segment names –Both must use the same calling convention

Calling Convention Identifies specific registers that must be preserved by procedures Determines how arguments are passed to procedures: in registers, on the stack, in shared memory, etc. Determines the order in which arguments are passed by calling programs to procedures Determines whether arguments are passed by value or by reference Determines how the stack pointer is restored after a procedure call Determines how functions return values

External Identifiers An external identifier is a name that has been placed in a module’s object file in such a way that the linker can make the name available to other program modules. The linker resolves references to external identifiers, but can only do so if the same naming convention is used in all program modules.

What's Next Introduction Inline Assembly Code C calls assembly procedures Assembly calls C procedures

Inline Assembly Code Assembly language source code that is inserted directly into a HLL program. Compilers such as Microsoft Visual C++ and Borland C++ have compiler-specific directives that identify inline ASM code. Efficient inline code executes quickly because CALL and RET instructions are not required. Simple to code because there are no external names, memory models, or naming conventions involved. Decidedly not portable because it is written for a single platform.

_asm Directive in Microsoft Visual C++ Can be placed at the beginning of a single statement Or, It can mark the beginning of a block of assembly language statements Syntax: __asm statement __asm { statement-1 statement-2... statement-n }

Commenting Styles mov esi,buf ; initialize index register mov esi,buf // initialize index register mov esi,buf /* initialize index register */ All of the following comment styles are acceptable, but the latter two are preferred:

You Can Do the Following... Use any instruction from the Intel instruction set Use register names as operands Reference function parameters by name Reference code labels and variables that were declared outside the asm block Use numeric literals that incorporate either assembler-style or C-style radix notation Use the PTR operator in statements such as inc BYTE PTR [esi] Use the EVEN and ALIGN directives Use LENGTH, TYPE, and SIZE directives

You Cannot Do the Following... Use data definition directives such as DB, DW, or BYTE Use assembler operators other than PTR Use STRUCT, RECORD, WIDTH, and MASK Use the OFFSET operator (but LEA is ok) Use macro directives such as MACRO, REPT, IRC, IRP Reference segments by name. –(You can, however, use segment register names as operands.)

char q[]={4,5,6}; void foo(void) { char p[]={1,2,3}; _asm{ lea eax,p mov byte ptr [eax],0 mov ebx, offset q mov byte ptr [ebx],0 } Why can’t we use “mov eax, offset p”? Can we use “lea ebx, q?”

Register Usage In general, you can modify EAX, EBX, ECX, and EDX in your inline code because the compiler does not expect these values to be preserved between statements Conversely, always save and restore ESI, EDI, and EBP.

Example: int *p, *q, count; … // use assembly for fast memory copy _asm{ mov edi, p mov esi, q mov ecx, count cld rep movsd } // the copy is done

What's Next Introduction Inline Assembly Code C calls assembly procedures Assembly calls C procedures

C calls Assembly Procedures Write performance-critical procedures as a standalone.asm file Can be called from C programs Assembly procedure must be declared before it can be called

C calls Assembly Procedures C calling convention –Arguments are pushed onto the stack in reverse order –Return value is stored in EAX –The caller is responsible to clean up the stack i.e., to remove the arguments on the stack after a procedure call

C side extern int ASM_add(int,int); main() { printf("%d",ASM_add(3,5)); }

Assembly side INCLUDE Irvine32.inc.code ASM_add PROC C, a:DWORD, b:DWORD mov eax,a add eax,b ret ASM_add ENDP END

What's Next Introduction Inline Assembly Code C calls assembly procedures Assembly calls C procedures

Assembly Calls C procedures Assembly is not a good choice to implement complicate control structures Calls a C procedure to take over complex (but not performance-critical) tasks Ex: calling a follow-up procedure from an interrupt service routine (ISR)

C side int C_add(int x,int y) { return x+y; }

Assembly side C_add PROTO C, x:DWORD, y:DWORD.data aDWORD ? bDWORD ?.code MAIN PROC... INVOKE C_add, a, b... MAIN ENDP END

Fin