computer organization and design assembly & simulation

18
Computer Organization and Computer Organization and Design Design Assembly & Simulation Assembly & Simulation Montek Singh Montek Singh Mon, Sep 30, 2013 Mon, Sep 30, 2013 Lecture 7 Lecture 7

Upload: jaunie

Post on 01-Feb-2016

57 views

Category:

Documents


0 download

DESCRIPTION

Computer Organization and Design Assembly & Simulation. Montek Singh Mon, Sep 30, 2013 Lecture 7. Today. Assembly programming structure of an assembly program assembler directives data and text segments allocating space for data MIPS assembler: MARS development environment - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: Computer Organization and Design Assembly & Simulation

Computer Organization and Computer Organization and DesignDesign

Assembly & SimulationAssembly & Simulation

Montek SinghMontek Singh

Mon, Sep 30, 2013Mon, Sep 30, 2013

Lecture 7Lecture 7

Page 2: Computer Organization and Design Assembly & Simulation

TodayToday Assembly programmingAssembly programming

structure of an assembly programstructure of an assembly program assembler directivesassembler directives data and text segmentsdata and text segments allocating space for dataallocating space for data

MIPS assembler: MARSMIPS assembler: MARS development environmentdevelopment environment

A few coding examplesA few coding examples self-studyself-study

Page 3: Computer Organization and Design Assembly & Simulation

What is an Assembler?What is an Assembler? A program for writing programsA program for writing programs Machine Language:Machine Language:

11’’s and 0s and 0’’s loaded into memory.s loaded into memory.(Did anybody ever really do that?)(Did anybody ever really do that?)

Assembly Language:Assembly Language:Front panel of a classic PDP8e. The toggle switches were used to enter machine language.

ASM 01101101110001100010111110110001.....

SymbolicSOURCEtext file

BinaryMachine

Language

ASSEMBLERTranslatorprogram

STREAM of bits to be loaded into memory

.globl mainmain: subu $sp, $sp, 24 sw $ra, 16($sp) li $a0, 18 li $a1, 12 li $a2, 6 jal tak move $a0, $v0

Assembler: 1. A Symbolic LANGUAGE for representing strings of bits2. A PROGRAM for translating Assembly Source to binary

Page 4: Computer Organization and Design Assembly & Simulation

Assembly Source LanguageAssembly Source LanguageAn Assembly SOURCE FILE contains, in symbolic text, values of successive bytes to be loaded into memory... e.g.

Resulting memory dump:

.data 0x10000000

.byte 1, 2, 3, 4

.byte 5, 6, 7, 8

.word 1, 2, 3, 4

.asciiz "Comp 411"

.align 2

.word 0xfeedbeef

[0x10000000] 0x04030201 0x08070605 0x00000001 0x00000002[0x10000010] 0x00000003 0x00000004 0x706d6f43 0x31313420[0x10000020] 0x00000000 0xfeedbeef 0x00000000 0x00000000

Notice the byte ordering. This MIPS is “little-endian” (The least significant byte of a word or half-word has the lowest address)

Specifies “current” address, i.e., start of dataFour byte valuesAnother four byte valuesFour word values (each is 4 bytes)A zero-terminated ASCII stringAlign to next multiple of 22

A hex-encoded word value

Page 5: Computer Organization and Design Assembly & Simulation

Assembler SyntaxAssembler Syntax Assembler DIRECTIVES = Keywords prefixed with Assembler DIRECTIVES = Keywords prefixed with ‘‘..’’

Control the placement and interpretation of bytes in Control the placement and interpretation of bytes in memorymemory

.data <addr>.data <addr> Subsequent items are considered dataSubsequent items are considered data

.text <addr>.text <addr> Subsequent items are considered Subsequent items are considered instructionsinstructions.align N.align N Skip to next address multiple of 2Skip to next address multiple of 2NN

Allocate StorageAllocate Storage.byte b.byte b11, b, b22, …, b, …, bnn Store a sequence of bytes (8-bits)Store a sequence of bytes (8-bits).half h.half h11, h, h22, …, h, …, hnn Store a sequence of half-words (16-bits)Store a sequence of half-words (16-bits).word w.word w11, w, w22, …, w, …, wnn Store a sequence of words (32-bits)Store a sequence of words (32-bits).ascii .ascii ““stringstring”” Stores a sequence of ASCII encoded bytesStores a sequence of ASCII encoded bytes.asciiz .asciiz ““stringstring”” Stores a zero-terminated stringStores a zero-terminated string.space n.space n Allocates n successive bytesAllocates n successive bytes

Define scopeDefine scope.globl sym .globl sym Declares symbol to be visible to other files Declares symbol to be visible to other files .extern sym size.extern sym size Sets size of symbol defined in another fileSets size of symbol defined in another file

(Also makes it directly addressable) (Also makes it directly addressable)

Page 6: Computer Organization and Design Assembly & Simulation

More Assembler SyntaxMore Assembler Syntax Assembler COMMENTSAssembler COMMENTS

All text following a All text following a ‘‘## ’’ (sharp) to the end of the line is (sharp) to the end of the line is ignoredignored

Assembler LABELSAssembler LABELS Labels are symbols that represent memory addressesLabels are symbols that represent memory addresses

labels take on the values of the labels take on the values of the address where they are address where they are declareddeclared

labels can be for data as well as for instructionslabels can be for data as well as for instructions Syntax: <start_of_line><label><colon>Syntax: <start_of_line><label><colon>

.data 0x80000000.data 0x80000000

item:item: .word 1.word 1 # a data word# a data word

.text 0x00010000.text 0x00010000

start:start: addadd $3, $4, $2 $3, $4, $2 # an instruction label# an instruction label

sllsll $3, $3, 8$3, $3, 8andiandi $3, $3, 0xff$3, $3, 0xff

beqbeq ..., ..., start..., ..., start

Page 7: Computer Organization and Design Assembly & Simulation

Even More Assembler SyntaxEven More Assembler Syntax Assembler PREDEFINED SYMBOLSAssembler PREDEFINED SYMBOLS

Register names and aliasesRegister names and aliases$0-$31, $zero, $v0-$v1, $a0-$a3, $t0-$t9, $s0-$s7, $0-$31, $zero, $v0-$v1, $a0-$a3, $t0-$t9, $s0-$s7, $at, $k0-$k1, $gp, $sp, $fp, $ra$at, $k0-$k1, $gp, $sp, $fp, $ra

Assembler MNEMONICSAssembler MNEMONICS Symbolic representations of individual instructionsSymbolic representations of individual instructions

add, addu, addi, addiu, sub, subu, and, andi, or, ori, xor, add, addu, addi, addiu, sub, subu, and, andi, or, ori, xor, xori, nor, lui, sll, sllv, sra, srav, srl, srlv, div, divu, xori, nor, lui, sll, sllv, sra, srav, srl, srlv, div, divu, mult, multu, mfhi, mflo, mthi, mtlo, slt, sltu, slti, sltiu, mult, multu, mfhi, mflo, mthi, mtlo, slt, sltu, slti, sltiu, beq, bgez, bgezal, bgtz, blez, bltzal, bltz, bne, j, jal, jalr, beq, bgez, bgezal, bgtz, blez, bltzal, bltz, bne, j, jal, jalr, jr, lb, lbu, lh, lhu, lw, lwl, lwr, sb, sh, sw, swl, swr, rfejr, lb, lbu, lh, lhu, lw, lwl, lwr, sb, sh, sw, swl, swr, rfe

not allnot all implemented in all MIPS versionsimplemented in all MIPS versions Pseudo-instructionsPseudo-instructions (mnemonics that are not instructions) (mnemonics that are not instructions)

abs, mul, mulo, mulou, neg, negu, not, rem, remu, rol, ror, li, abs, mul, mulo, mulou, neg, negu, not, rem, remu, rol, ror, li, seq, sge, sgeu, sgt, sgtu, sle, sleu, sne, b, beqz, bge, bgeu, seq, sge, sgeu, sgt, sgtu, sle, sleu, sne, b, beqz, bge, bgeu, bgt, bgtu, ble, bleu, blt, bltu, bnez, la, ld, ulh, ulhu, ulw, bgt, bgtu, ble, bleu, blt, bltu, bnez, la, ld, ulh, ulhu, ulw, sd, ush, usw, move,syscall, break, nop sd, ush, usw, move,syscall, break, nop

not real MIPS instructions; broken down by assembler into real not real MIPS instructions; broken down by assembler into real onesones

Page 8: Computer Organization and Design Assembly & Simulation

A Simple Programming TaskA Simple Programming Task Add the numbers 0 to 4 …Add the numbers 0 to 4 …

10 = 0 + 1 + 2 + 3 + 410 = 0 + 1 + 2 + 3 + 4

Program in Program in ““CC””::

Now letNow let’’s code it in ASSEMBLYs code it in ASSEMBLY

int i, sum;

main() { sum = 0; for (i=0; i<5; i++) sum = sum + i;}

Page 9: Computer Organization and Design Assembly & Simulation

First Step: Variable AllocationFirst Step: Variable Allocation Two integer variables (by default 32 bits in MIPS)Two integer variables (by default 32 bits in MIPS)

Thing to note:Thing to note: ““.data.data”” assembler directive places the following words assembler directive places the following words

into the data segmentinto the data segment ““.globl.globl”” directives make the directives make the ““sumsum”” and and ““ii”” variables visible variables visible

to all other assembly modules (in other files)to all other assembly modules (in other files)could skip in single-file assembly programscould skip in single-file assembly programs

““.space.space”” directives allocate 4 bytes for each variable directives allocate 4 bytes for each variable in contrast to in contrast to ““.word.word””, , ““.space.space”” does not initialize the variables does not initialize the variables

.data 0x80000000

.globl sum

.globl isum: .space 4i: .space 4

Page 10: Computer Organization and Design Assembly & Simulation

Actual Actual ““CodeCode”” Next we write ASSEMBLY code using instr Next we write ASSEMBLY code using instr

mnemonicsmnemonics.text 0x10000000.globl mainmain: add $8,$0,$0 # sum = 0 add $9,$0,$0 # for (i = 0; ...loop: addu $8,$8,$9 # sum = sum + i; addi $9,$9,1 # for (...; ...; i++ slti $10,$9,5 # for (...; i<5; bne $10,$0,loopend: ...

A common convention, which originated with the ‘C’ programming language, is for the entry point (starting location) of a program to named “main”.

Bookkeeping: 1) Register $8 is allocated as the “sum” variable 2) Register $9 is allocated as the “i” variableWe will talk about how to exit a program later

Page 11: Computer Organization and Design Assembly & Simulation

MARSMARS MIPS MIPS

Assembler and Assembler and Runtime Runtime Simulator Simulator (MARS)(MARS) Java applicationJava application Runs on all Runs on all

platformsplatforms Links on class Links on class

websitewebsite Download it Download it

now!now!

Page 12: Computer Organization and Design Assembly & Simulation

A Slightly More Challenging A Slightly More Challenging ProgramProgram Add 5 numbers from a list …Add 5 numbers from a list …

sum = nsum = n00 + n + n11 + n + n22 + n + n33 + n + n44

In In ““CC””::

Once more… letOnce more… let’’s code it in assemblys code it in assembly

int i, sum;int a[5] = {7,8,9,10,8};

main() { sum = 0; for (i=0; i<5; i++) sum = sum + a[i];}

Page 13: Computer Organization and Design Assembly & Simulation

Variable AllocationVariable Allocation Variables will be allocated to memory Variables will be allocated to memory

locations…locations… … … rather than registersrather than registers

This time we add the contents of an arrayThis time we add the contents of an array

Note: Note: ““.word.word”” also works for an array of words also works for an array of words allows us to initialize a list of sequential words in allows us to initialize a list of sequential words in

memorymemory label represents the address of the first word in the label represents the address of the first word in the

list, or the name of the arraylist, or the name of the array

.data 0x0sum: .space 4i: .space 4a: .word 7,8,9,10,8

Arrays have to be in memory. Why?

Page 14: Computer Organization and Design Assembly & Simulation

The New CodeThe New Code Note the small changes:Note the small changes:

.text 0x3000

.globl mainmain: sw $0,sum # sum = 0; sw $0,i # for (i = 0; lw $9,i # allocate register for i lw $8,sum # allocate register for sumloop: sll $10,$9,2 # covert "i" to word offset lw $10,a($10) # load a[i] addu $8,$8,$10 # sum = sum + a[i]; sw $8,sum # update variable in memory addi $9,$9,1 # for (...; ...; i++ sw $9,i # update memory slti $10,$9,5 # for (...; i<5; bne $10,$0,loopend: ... # code for exit here

Page 15: Computer Organization and Design Assembly & Simulation

A Little A Little ““WeirdnessWeirdness””

The Assembler rewrote one of our instructions. What’s going on?

Page 16: Computer Organization and Design Assembly & Simulation

A Coding ChallengeA Coding Challenge

What is the largest Fibonacci number less than What is the largest Fibonacci number less than 100?100? Fibonacci numbers: Fibonacci numbers:

FFi+1i+1 = F = Fii + F + Fi-1i-1

FF00 = 0 = 0FF11 = 1 = 1

0, 1, 1, 2, 3, 5, 8, 13, 21, 34, …0, 1, 1, 2, 3, 5, 8, 13, 21, 34, …

In In ““CC””::int x, y;

main() { x = 0; y = 1; while (y < 100) { int t = x; x = y; y = t + y; }}

Page 17: Computer Organization and Design Assembly & Simulation

MIPS Assembly CodeMIPS Assembly Code

In assemblyIn assembly.data 0x0x: .space 4y: .space 4

.text 0x3000

.globl mainmain: sw $0,x # x = 0; addi $9,$0,1 # y = 1; sw $9,y lw $8,xwhile: # while (y < 100) { slti $10,$9,100 beq $10,$0,endw add $10,$0,$8 # int t = x; add $8,$0,$9 # x = y; sw $8,x add $9,$10,$9 # y = t + y; sw $9,y j while # }endw: # code for exit here # answer is in x

Page 18: Computer Organization and Design Assembly & Simulation

Next ClassNext Class

Parameterized ProgramsParameterized Programs

ProceduresProcedures

StacksStacks

MIPS procedure linkage conventionsMIPS procedure linkage conventions