CMPE13Cyrus Bazeghi 1 Chapter 12 Variables and Operators.
-
Upload
aileen-newton -
Category
Documents
-
view
225 -
download
0
Transcript of CMPE13Cyrus Bazeghi 1 Chapter 12 Variables and Operators.
![Page 1: CMPE13Cyrus Bazeghi 1 Chapter 12 Variables and Operators.](https://reader033.fdocuments.us/reader033/viewer/2022051316/5697bfe11a28abf838cb3e36/html5/thumbnails/1.jpg)
CMPE13 Cyrus Bazeghi1
Chapter 12
Variables and Operators
![Page 2: CMPE13Cyrus Bazeghi 1 Chapter 12 Variables and Operators.](https://reader033.fdocuments.us/reader033/viewer/2022051316/5697bfe11a28abf838cb3e36/html5/thumbnails/2.jpg)
CMPE13 Cyrus Bazeghi2
Basic C Elements
• Variables– named, typed data items
• Operators– predefined actions performed on data
items– combined with variables to form
expressions, statements
• Rules and usage • Implementation using LC-3
![Page 3: CMPE13Cyrus Bazeghi 1 Chapter 12 Variables and Operators.](https://reader033.fdocuments.us/reader033/viewer/2022051316/5697bfe11a28abf838cb3e36/html5/thumbnails/3.jpg)
CMPE13 Cyrus Bazeghi3
Data Types
• C for the LC-3 has three basic data types
int integer (at least 16 bits)
double floating point (at least 32 bits)char character (at least 8 bits)
• Exact size can vary, depending on processor– int is supposed to be "natural" integer size;
for LC-3, that's 16 bits -- 32 bits for most modern processors
![Page 4: CMPE13Cyrus Bazeghi 1 Chapter 12 Variables and Operators.](https://reader033.fdocuments.us/reader033/viewer/2022051316/5697bfe11a28abf838cb3e36/html5/thumbnails/4.jpg)
CMPE13 Cyrus Bazeghi
“Standard” Data Types
4
Type Bytes
Range
short int 2 -32,768 -> +32,767 (32kb)
unsigned short int 2 0 -> +65,535 (64Kb)
unsigned int 4 0 -> +4,294,967,295 ( 4Gb)
int 4 -2,147,483,648 -> +2,147,483,647 ( 2Gb)
long int 4 -2,147,483,648 -> +2,147,483,647 ( 2Gb)
signed char 1 -128 -> +127
unsigned char 1 0 -> +255
float 4 Big
double 8 Bigger
long double 12 Biggest
![Page 5: CMPE13Cyrus Bazeghi 1 Chapter 12 Variables and Operators.](https://reader033.fdocuments.us/reader033/viewer/2022051316/5697bfe11a28abf838cb3e36/html5/thumbnails/5.jpg)
CMPE13 Cyrus Bazeghi5
Variable Names
• Any combination of letters, numbers, and underscore (_)
• Case matters– "sum" is different than "Sum"
• Cannot begin with a number– usually, variables beginning with
underscoreare used only in special library routines
• Only first 31 characters are used
![Page 6: CMPE13Cyrus Bazeghi 1 Chapter 12 Variables and Operators.](https://reader033.fdocuments.us/reader033/viewer/2022051316/5697bfe11a28abf838cb3e36/html5/thumbnails/6.jpg)
CMPE13 Cyrus Bazeghi6
Examples
LegaliwordsPerSecondwords_per_second_greenaReally_longName_moreThan31charsaReally_longName_moreThan31characters
Illegal10sdigitten'sdigitdone?double
reserved keyword
same identifier
![Page 7: CMPE13Cyrus Bazeghi 1 Chapter 12 Variables and Operators.](https://reader033.fdocuments.us/reader033/viewer/2022051316/5697bfe11a28abf838cb3e36/html5/thumbnails/7.jpg)
CMPE13 Cyrus Bazeghi7
Literals
Integer123 /* decimal */
-123
0x123 /* hexadecimal */
Floating point6.023
6.023e23 /* 6.023 x 1023 */
5E12 /* 5.0 x 1012 */
![Page 8: CMPE13Cyrus Bazeghi 1 Chapter 12 Variables and Operators.](https://reader033.fdocuments.us/reader033/viewer/2022051316/5697bfe11a28abf838cb3e36/html5/thumbnails/8.jpg)
CMPE13 Cyrus Bazeghi8
Literals
Character'c'
'\n' /* newline */
'\xA' /* ASCII 10 (0xA) */
![Page 9: CMPE13Cyrus Bazeghi 1 Chapter 12 Variables and Operators.](https://reader033.fdocuments.us/reader033/viewer/2022051316/5697bfe11a28abf838cb3e36/html5/thumbnails/9.jpg)
CMPE13 Cyrus Bazeghi9
Scope: Global and Local
Where is the variable accessible?
• Global: accessed anywhere in program• Local: only accessible in a particular
region
![Page 10: CMPE13Cyrus Bazeghi 1 Chapter 12 Variables and Operators.](https://reader033.fdocuments.us/reader033/viewer/2022051316/5697bfe11a28abf838cb3e36/html5/thumbnails/10.jpg)
CMPE13 Cyrus Bazeghi10
Scope: Global and Local
Compiler infers scope from where variable is declared
– programmer doesn't have to explicitly state
Variable is local to the block in which it is declared
– block defined by open and closed braces { }– can access variable declared in any
"containing" block
Global variable is declared outside all blocks
![Page 11: CMPE13Cyrus Bazeghi 1 Chapter 12 Variables and Operators.](https://reader033.fdocuments.us/reader033/viewer/2022051316/5697bfe11a28abf838cb3e36/html5/thumbnails/11.jpg)
CMPE13 Cyrus Bazeghi11
Structure of a C program
• One main() function• A bunch of other functions
/*****************************/main(){}/*---------------------------*/functionA(){}/*---------------------------*/functionB(){}/*****************************/
![Page 12: CMPE13Cyrus Bazeghi 1 Chapter 12 Variables and Operators.](https://reader033.fdocuments.us/reader033/viewer/2022051316/5697bfe11a28abf838cb3e36/html5/thumbnails/12.jpg)
CMPE13 Cyrus Bazeghi12
Example
#include <stdio.h>int itsGlobal = 0;
main(){ int itsLocal = 1; /* local to main */ printf("Global %d Local %d\n", itsGlobal, itsLocal); { int itsLocal = 2; /* local to this block */ itsGlobal = 4; /* change global variable */ printf("Global %d Local %d\n", itsGlobal, itsLocal); } printf("Global %d Local %d\n", itsGlobal, itsLocal);}
OutputGlobal 0 Local 1Global 4 Local 2Global 4 Local 1
![Page 13: CMPE13Cyrus Bazeghi 1 Chapter 12 Variables and Operators.](https://reader033.fdocuments.us/reader033/viewer/2022051316/5697bfe11a28abf838cb3e36/html5/thumbnails/13.jpg)
CMPE13 Cyrus Bazeghi13
Operators
• Programmers manipulate variables using the operators provided by the high-level language.
• Variables and operators combine to formexpressions and statementswhich denote the work to be done by the program.
![Page 14: CMPE13Cyrus Bazeghi 1 Chapter 12 Variables and Operators.](https://reader033.fdocuments.us/reader033/viewer/2022051316/5697bfe11a28abf838cb3e36/html5/thumbnails/14.jpg)
CMPE13 Cyrus Bazeghi14
Operators
Each operator may correspond to many machine instructions.
– Example: The multiply operator (*) typically requires multiple LC-3 ADD instructions.
![Page 15: CMPE13Cyrus Bazeghi 1 Chapter 12 Variables and Operators.](https://reader033.fdocuments.us/reader033/viewer/2022051316/5697bfe11a28abf838cb3e36/html5/thumbnails/15.jpg)
CMPE13 Cyrus Bazeghi15
Expression
• Any combination of variables, constants, operators, and function calls– every expression has a type, derived
from the types of its components (according to C typing rules)
• Examples:counter >= STOP
x + sqrt(y)
x & z + 3 || 9 - w-- % 6
![Page 16: CMPE13Cyrus Bazeghi 1 Chapter 12 Variables and Operators.](https://reader033.fdocuments.us/reader033/viewer/2022051316/5697bfe11a28abf838cb3e36/html5/thumbnails/16.jpg)
CMPE13 Cyrus Bazeghi16
Statement
• Expresses a complete unit of work– executed in sequential order
• Simple statement ends with semicolonz = x * y; /* assign product to z */
y = y + 1; /* after multiplication */
; /* null statement */
![Page 17: CMPE13Cyrus Bazeghi 1 Chapter 12 Variables and Operators.](https://reader033.fdocuments.us/reader033/viewer/2022051316/5697bfe11a28abf838cb3e36/html5/thumbnails/17.jpg)
CMPE13 Cyrus Bazeghi17
Statement
• Compound statement groups simple statements using braces. – syntactically equivalent to a simple
statement
{ z = x * y; y = y + 1; }
![Page 18: CMPE13Cyrus Bazeghi 1 Chapter 12 Variables and Operators.](https://reader033.fdocuments.us/reader033/viewer/2022051316/5697bfe11a28abf838cb3e36/html5/thumbnails/18.jpg)
CMPE13 Cyrus Bazeghi18
Operators
Three things to know about each operator• (1) Function
– what does it do?
• (2) Precedence– in which order are operators combined?– Example:
"a * b + c * d" is the same as "(a * b) + (c * d)"because multiply (*) has a higher precedence than addition (+)
![Page 19: CMPE13Cyrus Bazeghi 1 Chapter 12 Variables and Operators.](https://reader033.fdocuments.us/reader033/viewer/2022051316/5697bfe11a28abf838cb3e36/html5/thumbnails/19.jpg)
CMPE13 Cyrus Bazeghi19
Operators
• (3) Associativity– in which order are operators of the same
precedence combined?– Example:
"a - b - c" is the same as "(a - b) - c"because add/sub associate left-to-right
![Page 20: CMPE13Cyrus Bazeghi 1 Chapter 12 Variables and Operators.](https://reader033.fdocuments.us/reader033/viewer/2022051316/5697bfe11a28abf838cb3e36/html5/thumbnails/20.jpg)
CMPE13 Cyrus Bazeghi20
Assignment Operator
Changes the value of a variable.
x = x + 4;
1. Evaluate right-hand side.
2. Set value of left-hand side variable to result.
![Page 21: CMPE13Cyrus Bazeghi 1 Chapter 12 Variables and Operators.](https://reader033.fdocuments.us/reader033/viewer/2022051316/5697bfe11a28abf838cb3e36/html5/thumbnails/21.jpg)
CMPE13 Cyrus Bazeghi21
Assignment Operator
All expressions evaluate to a value, even ones with the assignment operator.
For assignment, the result is the value assigned.
– usually (but not always) the value of the right-hand side•type conversion might make assigned
value different than computed value
![Page 22: CMPE13Cyrus Bazeghi 1 Chapter 12 Variables and Operators.](https://reader033.fdocuments.us/reader033/viewer/2022051316/5697bfe11a28abf838cb3e36/html5/thumbnails/22.jpg)
CMPE13 Cyrus Bazeghi22
Assignment Operator
Assignment associates right to left.y = x = 3;
• y gets the value 3, because (x = 3) evaluates to the value 3.
![Page 23: CMPE13Cyrus Bazeghi 1 Chapter 12 Variables and Operators.](https://reader033.fdocuments.us/reader033/viewer/2022051316/5697bfe11a28abf838cb3e36/html5/thumbnails/23.jpg)
CMPE13 Cyrus Bazeghi23
Arithmetic Operators
All associate left to right.* / % have higher precedence than + -.
Symbol
Operation Usage Precedence
Assoc
* Multiply X * Y 6 L-to-R
/ Divide X / Y 6 L-to-R
% Modulo X % Y 6 L-to-R
+ Addition X + Y 7 L-to-R
- subtraction X - Y 7 L-to-R
![Page 24: CMPE13Cyrus Bazeghi 1 Chapter 12 Variables and Operators.](https://reader033.fdocuments.us/reader033/viewer/2022051316/5697bfe11a28abf838cb3e36/html5/thumbnails/24.jpg)
CMPE13 Cyrus Bazeghi
Examples
• basic.c
24
![Page 25: CMPE13Cyrus Bazeghi 1 Chapter 12 Variables and Operators.](https://reader033.fdocuments.us/reader033/viewer/2022051316/5697bfe11a28abf838cb3e36/html5/thumbnails/25.jpg)
CMPE13 Cyrus Bazeghi25
Arithmetic Expressions
If mixed types, smaller type is "promoted" to larger.
x + 4.3
if x is int, converted to double and result is double
Integer division -- fraction is dropped.x / 3
if x is int and x=5, result is 1 (not 1.666666...)
![Page 26: CMPE13Cyrus Bazeghi 1 Chapter 12 Variables and Operators.](https://reader033.fdocuments.us/reader033/viewer/2022051316/5697bfe11a28abf838cb3e36/html5/thumbnails/26.jpg)
CMPE13 Cyrus Bazeghi26
Arithmetic Expressions
Modulo -- result is remainder.
x % 3
if x is int and x=5, result is 2.
![Page 27: CMPE13Cyrus Bazeghi 1 Chapter 12 Variables and Operators.](https://reader033.fdocuments.us/reader033/viewer/2022051316/5697bfe11a28abf838cb3e36/html5/thumbnails/27.jpg)
CMPE13 Cyrus Bazeghi27
Bitwise Operators
• Operate on variables bit-by-bit.– Like LC-3 AND and NOT instructions.
• Shift operations are logical (not arithmetic).• Operate on values -- neither operand is changed.
Symbol
Operation Usage Precedence
Assoc
~ Bitwise NOT ~X 4 R-to-L
<< Left shift X << Y 8 L-to-R
>> Right shift X >> Y 8 L-to-R
& Bitwise AND X & Y 11 L-to-R
^ Bitwise XOR X ^ Y 12 L-to-R
| Bitwise OR X | Y 13 L-to-R
![Page 28: CMPE13Cyrus Bazeghi 1 Chapter 12 Variables and Operators.](https://reader033.fdocuments.us/reader033/viewer/2022051316/5697bfe11a28abf838cb3e36/html5/thumbnails/28.jpg)
CMPE13 Cyrus Bazeghi
Examples
• bitwise.c
28
![Page 29: CMPE13Cyrus Bazeghi 1 Chapter 12 Variables and Operators.](https://reader033.fdocuments.us/reader033/viewer/2022051316/5697bfe11a28abf838cb3e36/html5/thumbnails/29.jpg)
CMPE13 Cyrus Bazeghi29
Logical Operators
• Treats entire variable (or value) as TRUE (non-zero) or FALSE (zero).
• Result is 1 (TRUE) or 0 (FALSE).
Symbol
Operation Usage Precedence
Assoc
! Logical NOT !X 4 R-to-L
&& Logical AND
X && Y 14 L-to-R
|| Logical OR X || Y 15 L-to-R
![Page 30: CMPE13Cyrus Bazeghi 1 Chapter 12 Variables and Operators.](https://reader033.fdocuments.us/reader033/viewer/2022051316/5697bfe11a28abf838cb3e36/html5/thumbnails/30.jpg)
CMPE13 Cyrus Bazeghi30
Relational Operators
• Result is 1 (TRUE) or 0 (FALSE).
• Note: Don't confuse equality (==) with assignment (=).
Symbol Operation Usage Precedence
Assoc
> Greater than X > Y 9 L-to-R
>= Greater than or equal X >= Y 9 L-to-R
< Less than X < Y 9 L-to-R
<= Less than or equal X <= Y 9 L-to-R
== Equal X == Y 10 L-to-R
!= Not equal X != Y 10 L-to-R
![Page 31: CMPE13Cyrus Bazeghi 1 Chapter 12 Variables and Operators.](https://reader033.fdocuments.us/reader033/viewer/2022051316/5697bfe11a28abf838cb3e36/html5/thumbnails/31.jpg)
CMPE13 Cyrus Bazeghi31
Special Operators: ++ and --
• Changes value of variable before (or after)its value is used in an expression.
• Pre: Increment/decrement variable before using its value.
• Post: Increment/decrement variable after using its value.
Symbol
Operation Usage Precedence
Assoc
++ Post increment X++ 2 R-to-L
-- Post decrement
X-- 2 R-to-L
++ Pre increment ++X 3 R-to-L
-- Pre decrement --X 3 R-to-L
![Page 32: CMPE13Cyrus Bazeghi 1 Chapter 12 Variables and Operators.](https://reader033.fdocuments.us/reader033/viewer/2022051316/5697bfe11a28abf838cb3e36/html5/thumbnails/32.jpg)
CMPE13 Cyrus Bazeghi32
Using ++ and --
x = 4;
y = x++;• Results: x = 5, y = 4
(because x is incremented after assignment)
x = 4;
y = ++x;• Results: x = 5, y = 5
(because x is incremented before assignment)
![Page 33: CMPE13Cyrus Bazeghi 1 Chapter 12 Variables and Operators.](https://reader033.fdocuments.us/reader033/viewer/2022051316/5697bfe11a28abf838cb3e36/html5/thumbnails/33.jpg)
CMPE13 Cyrus Bazeghi33
Practice with Precedence
Assume a=1, b=2, c=3, d=4.x = a * b + c * d / 2; /* x = 8 */
same as:x = (a * b) + ((c * d) / 2);
• For long or confusing expressions, use parentheses, because reader (or you!) might not have memorized precedence table.
• Note: Assignment operator has lowest precedence,so all the arithmetic operations on the right-hand sideare evaluated first.
![Page 34: CMPE13Cyrus Bazeghi 1 Chapter 12 Variables and Operators.](https://reader033.fdocuments.us/reader033/viewer/2022051316/5697bfe11a28abf838cb3e36/html5/thumbnails/34.jpg)
CMPE13 Cyrus Bazeghi34
Special Operators: +=, *=, etc.
Arithmetic and bitwise operators can be combined with assignment operator.
Statement Equivalent assignmentx += y; x = x + y;x -= y; x = x - y;x *= y; x = x * y;x /= y; x = x / y;x %= y; x = x % y;x &= y; x = x & y;x |= y; x = x | y;x ^= y; x = x ^ y;x <<= y; x = x << y;x >>= y; x = x >> y;
All have sameprecedence andassociativity as =and associateright-to-left.
![Page 35: CMPE13Cyrus Bazeghi 1 Chapter 12 Variables and Operators.](https://reader033.fdocuments.us/reader033/viewer/2022051316/5697bfe11a28abf838cb3e36/html5/thumbnails/35.jpg)
CMPE13 Cyrus Bazeghi35
Special Operator: Conditional
• If x is TRUE (non-zero), result is y; else, result is z.
• Like a MUX, with x as the select signal.
x
y z
1 0
Symbol Operation Usage Precedence
Assoc
?: Conditional X ? Y : Z 16 L-to-R
![Page 36: CMPE13Cyrus Bazeghi 1 Chapter 12 Variables and Operators.](https://reader033.fdocuments.us/reader033/viewer/2022051316/5697bfe11a28abf838cb3e36/html5/thumbnails/36.jpg)
CMPE13 Cyrus Bazeghi36
Special Operator: Conditional
main ()
{
int x, y, z;
int result;
x = 0;
y = 5;
z = 10;
result = x ? y : z;
printf ("%d\n",result);
}
![Page 37: CMPE13Cyrus Bazeghi 1 Chapter 12 Variables and Operators.](https://reader033.fdocuments.us/reader033/viewer/2022051316/5697bfe11a28abf838cb3e36/html5/thumbnails/37.jpg)
CMPE13 Cyrus Bazeghi37
Variable allocation
• Global variables – allocated on the HEAP• Local variables – allocated in the activation
record– For each block– For each function
![Page 38: CMPE13Cyrus Bazeghi 1 Chapter 12 Variables and Operators.](https://reader033.fdocuments.us/reader033/viewer/2022051316/5697bfe11a28abf838cb3e36/html5/thumbnails/38.jpg)
CMPE13 Cyrus Bazeghi38
Memory map• Global data section
– All global variables stored here(actually all static variables)
– R4 points to beginning
• Run-time stack– Used for local variables– R6 points to top of stack– R5 points to top frame on stack– New frame for each block
(goes away when block exited)
• Offset = distance from beginningof storage area– Global: LDR R1, R4, #4– Local: LDR R2, R5, #-3
user code
global data (heap)
run-timestack
0x0000
0xFFFF
PC
R4
R6R5
system (res)
![Page 39: CMPE13Cyrus Bazeghi 1 Chapter 12 Variables and Operators.](https://reader033.fdocuments.us/reader033/viewer/2022051316/5697bfe11a28abf838cb3e36/html5/thumbnails/39.jpg)
CMPE13 Cyrus Bazeghi39
Sample program
Network rate calculation program
![Page 40: CMPE13Cyrus Bazeghi 1 Chapter 12 Variables and Operators.](https://reader033.fdocuments.us/reader033/viewer/2022051316/5697bfe11a28abf838cb3e36/html5/thumbnails/40.jpg)
CMPE13 Cyrus Bazeghi40
Local variable storage
• Local variables are stored in anactivation record, also known as a stack frame.
• Symbol table “offsets” give thedistance from the base of the frame.– R5 is the frame pointer – holds address
of the base of the current frame.– A new frame is pushed on the run-time stack each time a block is entered.– Because stack grows downward,
base is the highest address of the frame,and variable offsets are <= 0.
secondsminuteshourstimerateamountR5
High Mem
Low Mem
R6
![Page 41: CMPE13Cyrus Bazeghi 1 Chapter 12 Variables and Operators.](https://reader033.fdocuments.us/reader033/viewer/2022051316/5697bfe11a28abf838cb3e36/html5/thumbnails/41.jpg)
CMPE13 Cyrus Bazeghi41
Symbol table
• Like assembler, compiler needs to know information associated with identifiers
• In assembler, all identifiers were labelsand information is address
• Compiler keeps more information• Name (identifier)• Type• Location in memory
(offset wrt frame ptr)• Scope
Name Type Offset Scope
amounthoursminutesratesecondstime
intintintintintint
0-3-4-1-5-2
mainmainmainmainmainmain
![Page 42: CMPE13Cyrus Bazeghi 1 Chapter 12 Variables and Operators.](https://reader033.fdocuments.us/reader033/viewer/2022051316/5697bfe11a28abf838cb3e36/html5/thumbnails/42.jpg)
CMPE13 Cyrus Bazeghi42
register variables
• In our examples, a variable is always stored in memory.
• When assigning to a variable, must store to memory location.
• A real compiler would perform code optimizationsthat try to keep variables allocated in registers.
• Programmer can try to suggest to the compiler which variables, using the modifier register
![Page 43: CMPE13Cyrus Bazeghi 1 Chapter 12 Variables and Operators.](https://reader033.fdocuments.us/reader033/viewer/2022051316/5697bfe11a28abf838cb3e36/html5/thumbnails/43.jpg)
CMPE13 Cyrus Bazeghi43
Example: Compiling to LC-3#include <stdio.h>int inGlobal;
main(){ int inLocal; /* local to main */ int outLocalA; int outLocalB;
/* initialize */ inLocal = 5; inGlobal = 3;
/* perform calculations */ outLocalA = inLocal++ & ~inGlobal; outLocalB = (inLocal + inGlobal) - (inLocal - inGlobal);
/* print results */ printf("The results are: outLocalA = %d, outLocalB = %d\n", outLocalA, outLocalB);}
![Page 44: CMPE13Cyrus Bazeghi 1 Chapter 12 Variables and Operators.](https://reader033.fdocuments.us/reader033/viewer/2022051316/5697bfe11a28abf838cb3e36/html5/thumbnails/44.jpg)
CMPE13 Cyrus Bazeghi44
Example: Symbol table
Name Type Offset Scope
inGlobal int 0 global
inLocal int 0 main
outLocalA int -1 main
outLocalB int -2 main
![Page 45: CMPE13Cyrus Bazeghi 1 Chapter 12 Variables and Operators.](https://reader033.fdocuments.us/reader033/viewer/2022051316/5697bfe11a28abf838cb3e36/html5/thumbnails/45.jpg)
CMPE13 Cyrus Bazeghi45
Example: Code generation (1/3)
; main
; initialize variables
AND R0, R0, #0 ADD R0, R0, #5 ; inLocal = 5 STR R0, R5, #0 ; (offset = 0)
AND R0, R0, #0 ADD R0, R0, #3 ; inGlobal = 3 STR R0, R4, #0 ; (offset = 0)
![Page 46: CMPE13Cyrus Bazeghi 1 Chapter 12 Variables and Operators.](https://reader033.fdocuments.us/reader033/viewer/2022051316/5697bfe11a28abf838cb3e36/html5/thumbnails/46.jpg)
CMPE13 Cyrus Bazeghi46
Example: Code generation (2/3)
; first statement:
; outLocalA = inLocal++ & ~inGlobal;
LDR R0, R5, #0 ; get inLocal ADD R1, R0, #1 ; increment STR R1, R5, #0 ; store
LDR R1, R4, #0 ; get inGlobal NOT R1, R1 ; ~inGlobal AND R2, R0, R1 ; inLocal & ~inGlobal STR R2, R5, #-1 ; store in outLocalA ; (offset = -1)
![Page 47: CMPE13Cyrus Bazeghi 1 Chapter 12 Variables and Operators.](https://reader033.fdocuments.us/reader033/viewer/2022051316/5697bfe11a28abf838cb3e36/html5/thumbnails/47.jpg)
CMPE13 Cyrus Bazeghi47
Example: Code generation (3/3)
; next statement:; outLocalB = (inLocal + inGlobal); - (inLocal - inGlobal); LDR R0, R5, #0 ; inLocal
LDR R1, R4, #0 ; inGlobal ADD R0, R0, R1 ; R0 is sum LDR R2, R5, #0 ; inLocal LDR R3, R4, #0 ; inGlobal NOT R3, R3 ADD R3, R3, #1 ADD R2, R2, R3 ; R2 is difference NOT R2, R2 ; negate ADD R2, R2, #1 ADD R0, R0, R2 ; R0 = R0 - R2 STR R0, R5, #-2 ; outLocalB (offset = -2)