Download presentation
Presentation is loading. Please wait.
Published byKristin Cummings Modified over 9 years ago
1
Comp Sci 251 -- vars & expns 1 Ch. 4 Variables and Expressions
2
Comp Sci 251 -- vars & expns 2 Supporting high-level languages How do we use MIPS assembly language to implement – Variable declaration & initialization? – Assignment statements? – Expression evaluation?
3
Comp Sci 251 -- vars & expns 3 Program structure ## ## File: foo.a ## ## Brief explanation of program's purpose ## ## Author: Your name ## Date: 10 February 2010 ## ####################################### # Text segment # #######################################.text.globl __start __start: [program instructions...] li $v0, 10#exit syscall ######################################## # Data segment # ########################################.data [data definitions...] ## end of file foo.a [blank line] Note: file extension.a
4
syscalls ServiceCall codeArgumentsResult Print_integer1$a0 = integer Print_float2$f12 = float Print_double3$f12, $f13 = double Print_string4$a0 = address of string Read_int5$v0 (integer) Read_float6$f0 (float) Read_double7$f0, $f1 (double) Read_string8$a0 = buffer, $a1 = length Exit10 Print_char11$a0 = char Read_char12$v0 (char) Comp Sci 251 -- vars & expns 4
5
5 Variable declaration Use assembler directives – Not machine instructions – Reserve memory – Define symbols Affect data segment of memory
6
Comp Sci 251 -- vars & expns 6 Variable declaration High-level int x; MIPS assembly x:.space 4 Symbol name Data type Reserve memory No. of bytes
7
Comp Sci 251 -- vars & expns 7 Sequence of declarations Problem!!! char x; int y; char z;.data x:.space 1 y:.space 4 z:.space 1 0x10000000x 0x10000001y 0x10000005z
8
Comp Sci 251 -- vars & expns 8 Alignment Integer variables must be “word-aligned” Use the.align directive Syntax:.align n Semantics: assembler aligns the next reserved location on an address divisible by 2 n
9
Comp Sci 251 -- vars & expns 9 Example.data x:.space 1.align 2 y:.space 4 z:.space 1 0x10000000x 0x10000004y 0x10000008z
10
Comp Sci 251 -- vars & expns 10 Initialization int x = 5;x:.word 5 initial value symbol name size
11
Comp Sci 251 -- vars & expns 11.word n Reserves & initializes a word of memory n can be – Unsigned number – Signed number – Hexadecimal number Automatically aligns to word boundary – Unnecessary to use.align directive before.word
12
Comp Sci 251 -- vars & expns 12 Byte order We will use SPIM – MIPS simulator software – Runs on many different platforms Byte order in SPIM depends on native byte order of platform Intel: little-endian PowerPC (Mac): big-endian
13
Comp Sci 251 -- vars & expns 13 Example x:.word 5 05x 00 x 05 Little Endian
14
Comp Sci 251 -- vars & expns 14 What about character data? char x = 'a'; x:.byte 'a'
15
Comp Sci 251 -- vars & expns 15.byte n Reserves & initializes a byte of memory n can be – Unsigned number – Signed number – Hexadecimal number – Character in single quotes ASCII code
16
Comp Sci 251 -- vars & expns 16 Strings char s[] = "hello"; s:.asciiz "hello" Cstring variable Array of char (Null-terminated)
17
Comp Sci 251 -- vars & expns 17.asciiz s S is a string in double quotes Sequence of bytes is reserved & initialized One byte per character Final byte contains null character: 0x00 Note: not affected by byte order. – Leftmost char lowest address – Rightmost char highest address
18
Comp Sci 251 -- vars & expns 18 Example x:.asciiz "hello" 0x68x 0x65 0x6c 0x6f 0x00 See Chapter03/data.a
19
Comp Sci 251 -- vars & expns 19 Assignment Store a value in a variable Occurs at runtime, not compile/assemble time Supported with assembly language instructions
20
Comp Sci 251 -- vars & expns 20 Simple assignment int x; x = 5;.text li $t0, 5 #load immediate sw $t0, x #store word.data x:.space 4
21
Comp Sci 251 -- vars & expns 21 Load immediate instruction li reg, value value is loaded into register Value is part of the instruction – not contained in data segment – not contained in register
22
Comp Sci 251 -- vars & expns 22 Store word instruction sw reg, address register contents are copied into memory address can be a symbol or a number address must be word-aligned – otherwise exception is raised
23
Comp Sci 251 -- vars & expns 23 Load/Store architecture MIPS is a Reduced Instruction Set Computer (RISC) Philosophy: superior performance through – simple instructions – small instruction set – fast instructions Some operations require several instructions – assignment requires load & store
24
Comp Sci 251 -- vars & expns 24 Assignment of char data char y; y = 'a';.text li $t0, 'a' #MSBs of $t0=0 sb $t0, y #store byte.data y:.space 1
25
Comp Sci 251 -- vars & expns 25 Store byte instruction sb reg, address low-order byte of register is copied into memory
26
Comp Sci 251 -- vars & expns 26 Assignment between variables int x; int y = 5; x = y;.text lw $t0, y sw $t0, x #store word.data x:.space 4 y:.word 5
27
Comp Sci 251 -- vars & expns 27 Load word instruction lw reg, address word of memory is copied into register address must be word-aligned Note: memory memory transfer requires two instructions
28
Comp Sci 251 -- vars & expns 28 Assignment between char variables char a; char b = '@'; a = b;.text lbu $t0, b1 #load byte #unsigned sb $t0, a.data a:.space 1 b1:.byte '@’ #b assembly # error
29
Comp Sci 251 -- vars & expns 29 Load byte unsigned instruction lbu reg, address byte of memory is copied into LSB of register MSBs are cleared (= 0)
30
Comp Sci 251 -- vars & expns 30 Exercise Write equivalent MIPS code Sketch memory layout int x = 25; char a = '*'; int y; char b; y = x; b = a;
31
Comp Sci 251 -- vars & expns 31 Arithmetic expressions High level language feature How do we evaluate expressions in assembly language? – Single operator – Multiple operators
32
Comp Sci 251 -- vars & expns 32 Addition Expression 2 + 3 MIPS code li $t1, 2 li $t2, 3 add $t0, $t1, $t2 Goal: result in $t0
33
Comp Sci 251 -- vars & expns 33 Add instruction add rd, rs, rt All operands must be registers First operand is destination Second and third operands are sources rd rs + rt Register may appear as source and destination Signed overflow exception is raised
34
Comp Sci 251 -- vars & expns 34 Maximize register re-use Expression 2 + 3 MIPS code li $t0, 2 li $t1, 3 add $t0, $t0, $t1 Goal: result in $t0
35
Comp Sci 251 -- vars & expns 35 Subtraction Expression 2 - 3 MIPS code li $t0, 2 li $t1, 3 sub $t0, $t0, $t1
36
Comp Sci 251 -- vars & expns 36 Sub instruction sub rd, rs, rt All operands must be registers rd rs - rt Signed overflow exception is raised
37
Comp Sci 251 -- vars & expns 37 Multiplication Expression 2 * 3 MIPS code li $t0, 2 li $t1, 3 mul $t0, $t0, $t1
38
Comp Sci 251 -- vars & expns 38 Mul instruction mul rd, rs, rt (pseudo instruction) Signed multiplication All operands must be registers rd rs * rt No exception is raised on overflow. Why? Equivalent to mult rs, rt mflo rd
39
Comp Sci 251 -- vars & expns 39 Division Expression 2 / 3 MIPS code li $t0, 2 li $t1, 3 div $t0, $t0, $t1
40
Comp Sci 251 -- vars & expns 40 Div instruction div rd, rs, rt Signed division All operands must be registers rd rs / rt Signed overflow exception is raised
41
Comp Sci 251 -- vars & expns 41 Remainder (% operator) Expression 2 % 3 MIPS code li $t0, 2 li $t1, 3 rem $t0, $t0, $t1
42
Comp Sci 251 -- vars & expns 42 Rem instruction rem rd, rs, rt For simplicity, stick to non-negative operands All operands must be registers rd rs % rt
43
Comp Sci 251 -- vars & expns 43 Multi-operator expressions (1 + 2) * (3 – 4) Order of operations depends on – Precedence rules – Associativity – Parentheses Several orders are possible + - * - + *
44
Comp Sci 251 -- vars & expns 44 Left-to-right evaluation method Read expression left to right Constant or variable lowest unused t-reg Operator – Wait until both operands in registers – Perform operation – Result left operand register
45
Comp Sci 251 -- vars & expns 45 Exercise Apply left-to-right method to (1 + 2) * (3 – 4)
46
Comp Sci 251 -- vars & expns 46 Optimization Sometimes you can do better than l-t-r – Fewer registers – Fewer instructions Advanced topics – Sethi-Ullman numbering (minimize registers) – Common subexpressions (minimize instructions)
47
Comp Sci 251 -- vars & expns 47 Optimization exercise x + y * z – y L-t-r evaluation code Minimize number of registers Minimize number of instructions
Similar presentations
© 2024 SlidePlayer.com. Inc.
All rights reserved.