Review (#1/2) COMP Microprocessors and Embedded Systems. Lectures 13: Making Decisions in C/Assembly Language - I

Similar documents
An Introduction to Assembly Programming with the ARM 32-bit Processor Family

Instruction Set Architecture

Reduced Instruction Set Computer (RISC)

THUMB Instruction Set

We will use the accumulator machine architecture to demonstrate pass1 and pass2.

Instruction Set Architecture (ISA)

Instruction Set Architecture. or How to talk to computers if you aren t in Star Trek

Translating C code to MIPS

What to do when I have a load/store instruction?

An Introduction to the ARM 7 Architecture

Embedded Systems. Review of ANSI C Topics. A Review of ANSI C and Considerations for Embedded C Programming. Basic features of C

Computer Organization and Architecture

HC12 Assembly Language Programming

what operations can it perform? how does it perform them? on what kind of data? where are instructions and data stored?

Intel 8086 architecture

MIPS Assembly Code Layout

Summary of the MARIE Assembly Language

Addressing The problem. When & Where do we encounter Data? The concept of addressing data' in computations. The implications for our machine design(s)

Advanced Computer Architecture-CS501. Computer Systems Design and Architecture 2.1, 2.2, 3.2

Exception and Interrupt Handling in ARM

Administration. Instruction scheduling. Modern processors. Examples. Simplified architecture model. CS 412 Introduction to Compilers

Stack machines The MIPS assembly language A simple source language Stack-machine implementation of the simple language Readings:

Instruction Set Architecture (ISA) Design. Classification Categories

Instruction Set Design

picojava TM : A Hardware Implementation of the Java Virtual Machine

ARM Cortex-M3 Assembly Language

PROBLEMS #20,R0,R1 #$3A,R2,R4

Typy danych. Data types: Literals:

Keil C51 Cross Compiler

Lecture 3 Addressing Modes, Instruction Samples, Machine Code, Instruction Execution Cycle

Chapter 2 Topics. 2.1 Classification of Computers & Instructions 2.2 Classes of Instruction Sets 2.3 Informal Description of Simple RISC Computer, SRC

2) Write in detail the issues in the design of code generator.

Software based Finite State Machine (FSM) with general purpose processors

The ARM Architecture. With a focus on v7a and Cortex-A8

CSE 141L Computer Architecture Lab Fall Lecture 2

ASSEMBLY LANGUAGE PROGRAMMING (6800) (R. Horvath, Introduction to Microprocessors, Chapter 6)

CHAPTER 7: The CPU and Memory

Figure 1: Graphical example of a mergesort 1.

Computer Architecture Lecture 2: Instruction Set Principles (Appendix A) Chih Wei Liu 劉 志 尉 National Chiao Tung University

Review: MIPS Addressing Modes/Instruction Formats

Computer Architectures

How To Understand The Design Of A Microprocessor

MACHINE ARCHITECTURE & LANGUAGE

Comp 255Q - 1M: Computer Organization Lab #3 - Machine Language Programs for the PDP-8

Here is a diagram of a simple computer system: (this diagram will be the one needed for exams) CPU. cache

LSN 2 Computer Processors

An Overview of Stack Architecture and the PSC 1000 Microprocessor

VLIW Processors. VLIW Processors

CPU Organization and Assembly Language

a storage location directly on the CPU, used for temporary storage of small amounts of data during processing.

Notes on Assembly Language

ARM. Architecture and Assembly. Modest Goal: Turn on an LED

612 CHAPTER 11 PROCESSOR FAMILIES (Corrisponde al cap Famiglie di processori) PROBLEMS

Lecture 2. Binary and Hexadecimal Numbers

A-level COMPUTER SCIENCE

Operating Systems. Virtual Memory


Graded ARM assembly language Examples

Lecture Outline. Stack machines The MIPS assembly language. Code Generation (I)

Chapter 7D The Java Virtual Machine

CS412/CS413. Introduction to Compilers Tim Teitelbaum. Lecture 20: Stack Frames 7 March 08

COMP 303 MIPS Processor Design Project 4: MIPS Processor Due Date: 11 December :59

Central Processing Unit (CPU)

Topics. Introduction. Java History CS 146. Introduction to Programming and Algorithms Module 1. Module Objectives

Faculty of Engineering Student Number:

language 1 (source) compiler language 2 (target) Figure 1: Compiling a program

CS101 Lecture 26: Low Level Programming. John Magee 30 July 2013 Some material copyright Jones and Bartlett. Overview/Questions

(Refer Slide Time: 00:01:16 min)

6. Control Structures

Board Notes on Virtual Memory

TIMING DIAGRAM O 8085

Microprocessor and Microcontroller Architecture

M A S S A C H U S E T T S I N S T I T U T E O F T E C H N O L O G Y DEPARTMENT OF ELECTRICAL ENGINEERING AND COMPUTER SCIENCE

Outline. Lecture 3. Basics. Logical vs. physical memory physical memory. x86 byte ordering

The 104 Duke_ACC Machine

MICROPROCESSOR AND MICROCOMPUTER BASICS

Processor Architectures

PROBLEMS (Cap. 4 - Istruzioni macchina)

Computer Organization. and Instruction Execution. August 22

ELEG3924 Microprocessor Ch.7 Programming In C

Interpreters and virtual machines. Interpreters. Interpreters. Why interpreters? Tree-based interpreters. Text-based interpreters

Overview. CISC Developments. RISC Designs. CISC Designs. VAX: Addressing Modes. Digital VAX

Systems I: Computer Organization and Architecture

ios applications reverse engineering Julien Bachmann

8-Bit Flash Microcontroller for Smart Cards. AT89SCXXXXA Summary. Features. Description. Complete datasheet available under NDA

Embedded Programming in C/C++: Lesson-1: Programming Elements and Programming in C

How It All Works. Other M68000 Updates. Basic Control Signals. Basic Control Signals

Microprocessor & Assembly Language

PART B QUESTIONS AND ANSWERS UNIT I

Introducción. Diseño de sistemas digitales.1

CSE 141 Introduction to Computer Architecture Summer Session I, Lecture 1 Introduction. Pramod V. Argade June 27, 2005

How to Run the MQX RTOS on Various RAM Memories for i.mx 6SoloX

Developer Suite ARM. Assembler Guide. Version 1.2. Copyright 2000, 2001 ARM Limited. All rights reserved. ARM DUI 0068B

Central Processing Unit Simulation Version v2.5 (July 2005) Charles André University Nice-Sophia Antipolis

9 Control Statements. 9.1 Introduction. 9.2 Objectives. 9.3 Statements

EE282 Computer Architecture and Organization Midterm Exam February 13, (Total Time = 120 minutes, Total Points = 100)

Computers. Hardware. The Central Processing Unit (CPU) CMPT 125: Lecture 1: Understanding the Computer

Efficient Low-Level Software Development for the i.mx Platform

How To Write A Microsoft Microsoft 8D (Droid) (Program) (Powerbook) (I386) (Microsoft) (Donga) (Opera) And (Dungeo) (Dugeo

Let s put together a Manual Processor

Transcription:

COMP 3221 Microprocessors and Embedded Systems Lectures 13: Making Decisions in C/Assembly Language - I http://www.cse.unsw.edu.au/~cs3221 August, 2003 Review (#1/2) Big idea in CS&E; compilation to translate from one level of abstraction to lower level Generally single HLL statement produces many assembly instructions Also hides address calculations (byte vs. word addressing) Design of an Assembly Language like ARM shaped by 1) Desire to keep hardware simple: e.g., most operations have 3 operands 2) Smaller is faster: e.g., ARM has 16 registers Saeid@unsw.edu.au COMP3221 lec13-decision-i.1 COMP3221 lec13-decision-i.2 COMP3221 lec13-decision-i.3 Review (#2/2) ARM assembly language thus far: Instructions: add,sub,mov, orr,and,bic, eor, mul, ldr, str At most one assembly instruction per line Comments start with; to end of line Operands: registers r0 r3 a1 a4 (correspond to C functions arguments. Used for scratch pad too!) r4 r10 v1 v7 (correspond to function variables) Operands: memory Memory[0], Memory[4], Memory[8],,..., Memory[4294967292] Baby Quiz What are the three different ways to obtain a data operand you have seen? Immediate - data is IN the instruction add r1, r1, #24 Register Direct - data is IN a register the register number is in the instruction add r1, r1, r2 Base plus offset - data is IN memory the register number is in the instruction the base address is in the register the offset is in the instruction/offset index register number in instruction ldr r1, [r2, #24] / ldr r1, [r2,r3] These are called Addressing Modes COMP3221 lec13-decision-i.4

Overview C/Assembly if, goto, if-else C /Assembly Loops: goto, while Test for less Than, Greater Than, etc C/Assembly case/switch statement Conclusion C Decisions (Control Flow): if statements 2 kinds of if statements in C if (condition) statement if (condition) statement1 else statement2 Following code is same as 2nd if if (condition) goto L1; statement2; goto L2; L1: statement1; L2: Not as elegant as if-else, but same meaning COMP3221 lec13-decision-i.5 COMP3221 lec13-decision-i.6 ARM decision instructions (control flow) (#1/2) Decision instruction in ARM: cmp register1, register2 ;compare register1 with ; register2 beq L1 ; branch to L1 if equal is Branch if (registers are) equal if (register1==register2) goto L1 Complementary ARM decision instruction cmp register1, register2 bne L1 bne is Branch if (registers are) not equal if (register1!=register2) goto L1 Called conditional branches ARM decision instructions (control flow) (#2/2) Decision instruction in ARM: cmp register1, #immediate ;compare register1 with ; immediate number beq L1 ; branch to L1 if equal is Branch if (register and immediate are) equal if (register1==#immediate) goto L1 Complementary ARM decision instruction cmp register1, #immediate bne L1 bne is Branch if (register and immediate are) not equal if (register1!=#immediate) goto L1 Called conditional branches COMP3221 lec13-decision-i.7 COMP3221 lec13-decision-i.8

Compiling C if into ARM Assembly Compile by hand if (i == j) f=g+h; else f=g-h; Mapping f: v1, g: v2, h: v3, i: v4, j: v5 Start with branch: cmp v4, v5 beq L-true Follow with false part sub v1,v2,v3 (true) i == j ; branch to L-True ; if i==j ; f=g-h f=g+h i == j? exit f=g-h (false) i!= j Compiling C if into ARM Assembly Need instruction that always transfers control to skip over true part ARM has branch: b label ; goto label sub v1,v2,v3 b L-exit Next is true part L-true: add v1,v2,v3 ; f=g-h Followed by exit branch label L-exit: ; f=g+h COMP3221 lec13-decision-i.9 COMP3221 lec13-decision-i.10 C Compiling C if into ARM: Summary Compile by hand if (i == j) f=g+h; else f=g-h; Mapping f: v1, g: v2, h: v3, i: v4, j: v5 cmp v4,v5 A beq L-true R sub v1,v2,v3 b L-exit M L-true: add v1,v2,v3 L-exit: COMP3221 lec13-decision-i.11 (true) i == j f=g+h i == j? f=g-h ; branch i==j ; (false) ; go to Exit ;(true) Note:Compiler supplies labels for branches not found in HLL code; often it flips the condition to branch to false part (false) i!= j Motoring with Microprocessors Thanks to the magic of microprocessors and embedded systems, our cars are becoming safer, more efficient, and entertaining. The average middle-class household includes over 40 embedded processors. About half are in the garage. Cars make a great vehicle for deploying embedded processors in huge numbers. These processors provide a ready source of power, ventilation, and mounting space and sell in terrific quantities. How many embedded processors does your car have? If you've got a late-model luxury sedan, two or three processors might be obvious in the GPS navigation system or the automatic distance control. Yet you'd still be off by a factor of 25 or 50. The current 7-Series BMW and S-class Mercedes boast about 100 processors apiece. A relatively low-profile Volvo still has 50 to 60 baby processors on board. Even a boring low-cost econobox has a few dozen different microprocessors in it. Your transportation appliance probably has more chips than your Internet appliance. New cars now frequently carry 200 pounds of electronics and more than a mile of wiring. COMP3221 lec13-decision-i.12 http://www.embedded.com/

COMP3221 Reading Materials (Week #5) Week #5: Steve Furber: ARM System On-Chip; 2nd Ed, Addison-Wesley, 2000, ISBN: 0-201-67519-6. We use chapters 3 and 5 ARM Architecture Reference Manual On CD ROM A copy of the article by Cohen, D. On holy wars and a plea for peace (data transmission). Computer, vol.14, (no.10), Oct. 1981. p.48-54, is place on the class website. Loops in C/Assembly Simple loop in C Loop: g = g + A[i]; i = i + j; if (i!= h) goto Loop; (g,h,i,j:v2,v3,v4,v5; base of A[]:v6): 1st fetch A[i] Loop: ldr a1,[v6, v4, lsl #2] ;(v6+v4*4)=addr A[i] ;a1=a[i] COMP3221 lec13-decision-i.13 COMP3221 lec13-decision-i.14 Simple Loop (cont) Add value of A[i] to g and then j to i g = g + a1 i = i + j; (g,h,i,j:v2,v3,v4,v5): add v2,v2,a1 ; g = g+a[i] add v4,v4,v5 ; i = i + j The final instruction branches back to Loop if i!= h : cmp v4,v3 bne Loop ; goto Loop ; if i!=h Loops in C/Assembly: Summary Loop: C A R M g = g + A[i]; i = i + j; if (i!= h) goto Loop; (g,h,i,j:v2,v3,v4,v5; base of A[]:v6): Loop: ldr a1,[v6, v4, lsl #2] ;(v6+v4*4)=addr A[i] ;a1=a[i] add v2,v2,a1 ; g = g+a[i] add v4,v4,v5 ; i = i + j cmp v4,v3 bne Loop ; goto Loop ; if i!=h COMP3221 lec13-decision-i.15 COMP3221 lec13-decision-i.16

while in C/Assembly: Although legal C, almost never write loops with if, goto: use while, or for loops Syntax: while(condition) statement while (save[i] == k) i = i + j; 1st load save[i] into a scratch register (i,j,k: v4,v5,v6: base of save[]:v7): Loop: ldr a1,[v7,v4,lsl #2] ;v7+v4*4=addr of save[i] ;a1=save[i] While in C/Assembly (cont) Loop test: exit if save[i]!= k (i,j,k: v4,v5,v6: base of save[]:v7) cmp a1,v6 bne Exit ;goto Exit ;if save[i]!=k The next instruction adds j to i: add v4,v4,v5 ; i = i + j End of loop branches back to the while test at top of loop. Add the Exit label after: b Loop ; goto Loop Exit: COMP3221 lec13-decision-i.17 COMP3221 lec13-decision-i.18 C While in C/Assembly: Summary while (save[i]==k) i = i + j; (i,j,k: v4,v5,v6: base of save[]:v7) Loop: ldr a1,[v7,v4,lsl #2] ;v7+v4*4=addr of save[i] A R M ;a1=save[i] cmp a1,v6 bne Exit ;goto Exit add v4,v4,v5 b Loop Exit: ;if save[i]!=k ; i = i + j ; goto Loop Beyond equality tests in ARM Assembly (#1/2) So far ==,!=, What about < or >? cmp register1, register2 blt L1 is Branch if (register1 <register2) if (register1<register2) go to L1 Complementary ARM decision instruction cmp register1, register2 bge L1 bge is Branch if (register1 >= register2) if (register1>=register2) go to L1 COMP3221 lec13-decision-i.19 COMP3221 lec13-decision-i.20

Beyond equality tests in ARM Assembly (#2/2) Also cmp register1, #immediate blt L1 is Branch if (register1 <#immediate) if (register1<immediate) go to L1 Complementary ARM decision instruction cmp register1, #immediate bge L1 bge is Branch if (register1 >= #immediate) if (register1>=immediate) go to L1 COMP3221 lec13-decision-i.21 C A R M COMP3221 lec13-decision-i.22 If less_than in C/Assembly if (g < h) {... } cmp v1,v2 ; v1<v2 (g<h) blt Less if (g < h) b noless ; if (g >= h) Less:... noless: Alternative Code cmp v1,v2 ; v1<v2 (g<h) bge noless if (g >= h)... ; if (g < h) noless: COMP3221 lec13-decision-i.23 Some Branch Conditions b Unconditional bal Branch Always beq Branch Equal bne Branch Not Equal blt Branch Less Than ble Branch Less Than or Equal bgt Branch Greater Than bge Branch Greater Than or Equal Full Table Page 64 Steve Furber: ARM System On- Chip; 2nd Ed, Addison-Wesley, 2000, ISBN: 0-201-67519-6. COMP3221 lec13-decision-i.24 What about unsigned numbers? Conditional branch instructions blt, ble, bgt, etc, assume signed operands (defined as int in C). The equivalent instructions for unsigned operands (defined as unsigned in C). are: blo Branch Lower (unsigned) bls Branch Less or Same (unsigned) bhi Branch Higher (unsigned) bhs Branch Higher or Same (Unsigned) v1 = FFFF FFFA hex, v2 = 0000 FFFA hex What is result of cmp v1, v2 cmp v1, v2 bgt L1 bhi L1

Signed VS Unsigned Comparison v1 = FFFF FFFA hex, v2 = 0000 FFFA hex v1 < v2 (signed interpretation) v1 > v2 (unsigned interpretation) What is result of cmp v1, v2 cmp v1, v2 bgt L1 bhi L1 L1: L1: Branch NOT taken Branch Taken COMP3221 lec13-decision-i.25 COMP3221 lec13-decision-i.26 Branches: PC-relative addressing Recall register r15 in the machine also called PC; points to the currently executing instruction Most instruction add 4 to it. (pc increments by 4 after execution of most instructions) Branch changes it to a specific value registers Branch adds to it 24-bit signed value r15 = pc r14 (contained in the instruction) Shifted left by 2 bits Labels => addresses r0 0: FFF... memory b address 24 bits beq address 32MB +32MB C case/switch statement Choose among four alternatives depending on whether k has the value 0, 1, 2, or 3 switch (k) { case 0: f=i+j; break; /* k=0*/ case 1: f=g+h; break; /* k=1*/ case 2: f=g h; break; /* k=2*/ case 3: f=i j; break; /* k=3*/ } Case/switch via chained if-else, C Could be done like chain of if-else if(k==0) f=i+j; else if(k==1) f=g+h; else if(k==2) f=g h; else if(k==3) f=i j; COMP3221 lec13-decision-i.27 COMP3221 lec13-decision-i.28

C A R M Case/switch via chained if-else, C/Asm. Could be done like chain of if-else if(k==0) f=i+j; else if(k==1) f=g+h; COMP3221 lec13-decision-i.29 else if(k==2) f=g h; else if(k==3) f=i j; (f,i,j,g,h,k:v1,v2,v3,v4,v5,v6) cmp v6,#0 bne L1 ; branch k!=0 add v1,v2,v3 k=0 so f=i+j L1:cmp v6,#1 bne L2 ; branch k!=1 add v1,v4,v5 ; k=1 so f=g+h L2:cmp v6,#2 bne L3 ; branch k!=2 sub v1,v4,v5 ; k=2 so f=g-h L3:cmp v6,#3 bne Exit ; branch k!=2 sub v1,v2,v3 ; k=3 so f=i-j Exit: Case/Switch via Jump Address Table Notice that last case must wait for n-1 tests before executing, making it slow Alternative tries to go to all cases equally fast: jump address table Idea: encode alternatives as a table of addresses of the cases - Table an array of words with addresses corresponding to case labels Program indexes into table and jumps ARM instruction ldr pc, [ ] unconditionally branches to address L1 (Changes PC to address of L1) COMP3221 lec13-decision-i.30 Idea for Case using Jump Table check within range get address of target clause from target array jump to target address Address Jump Table Default clause code for clause jump to end_of_case Case/Switch via Jump Address Table (#1/3) Use k to index a jump address table, and then jump via the value loaded 1st test that k matches 1 of cases (0<=k<=3); if not, the code exits (k:v6, v7: Base address of JumpTable[k]) cmp v6, #0 ;Test if k < 0 blt Exit ;if k<0,goto Exit cmp v6, #3 ;Test if k >3 bgt Exit ;if k>3,goto Exit end_of_case: COMP3221 lec13-decision-i.31 COMP3221 lec13-decision-i.32

Case/Switch via Jump Address Table (#2/3) Assume 4 sequential words (4 bytes) in memory, with base address in v7, have addresses corresponding to labels L0, L1, L2, L3. Now use (4*k) (k:v6) to index table of words and load the clause address from the table (Address of labels L0, L1, L2, L3 ) to register pc. ldr pc, [v7, v6,lsl #2] ;JumpTable[k]= v7 + (v6*4) V6*4 (Register Indexed Addressing) PC will contain the address of the clause and execution starts from there. v7 L0 L1 L2 L3 Case/Switch via Jump Address Table (#3/3) Cases jumped to by ldr pc, [v7, v6,lsl #2] : L0: add v1,v2,v3 ; k=1 so f=i+j L1: add v1,v4,v5 ; k=1 so f=g+h L2: sub v1,v4,v5 ; k=2 so f=g-h L3: sub v1,v2,v3 ; k=3 so f=i-j Exit: COMP3221 lec13-decision-i.33 COMP3221 lec13-decision-i.34 Jump Address Table: Summary (k,f,i,j,g,h Base address of JumpTable[k]) :v6,v1,v2,v3,v4,v5,v7) cmp v6, #0 ;Test if k < 0 blt Exit ;if k<0,goto Exit cmp v6, #3 ;Test if k >3 bgt Exit ;if k>3,goto Exit ldr pc, [v7, v6,lsl #2] ;JumpTable[k]= v7 + (v6*4) L0: add v1,v2,v3 ; k=1 so f=i+j L1: add v1,v4,v5 ; k=1 so f=g+h L2: sub v1,v4,v5 ; k=2 so f=g-h L3: sub v1,v2,v3 ; k=3 so f=i-j Exit: COMP3221 lec13-decision-i.35 More example on Jump Tables on CD-ROM COMP3221 lec13-decision-i.36 If there is time, do it yourself: Compile this C code into ARM: sum = 0; for (i=0;i<10;i=i+1) sum = sum + A[i]; sum:v1, i:v2, base address of A:v3

C (If time allows) Do it yourself: sum = 0; for (i=0;i<10;i=i+1) sum = sum + A[i]; sum:v1, i:v2, base address of A:v3 And in Conclusion (#1/2) HLL decisions (if, case) and loops (while, for) use same assembly instructions Comparison: cmp in ARM Conditional branches: beq, bne in ARM Unconditional Jumps: b, ldr pc,, mov pc, in ARM Case/Switch: either chained if-else or jump table + ldr pc, A R M mov v1, #0 mov v2, #0 Loop: ldr a1,[v3,v2,lsl #2] ; a1=a[i] add v1, v1, a1 ; sum = sum+a [i] add v2, v2, #1 ; increment i cmp v2, #10 ; Check(i<10) bne Loop ; goto loop COMP3221 lec13-decision-i.37 COMP3221 lec13-decision-i.38 And in Conclusion (#1/2) New Instructions: cmp beq bne bgt bge blt ble bhi bhs blo bls COMP3221 lec13-decision-i.39