50
A crash course in MIPS assembly programming Computer Architecture 1DT016 distance Fall 2017 http://xyx.se/1DT016/index.php Per Foyer Mail: [email protected] [email protected] 2017 1

A Crash course in MIPS assembly programmingxyx.se/.../sessions/Session2-MIPS-assembly-programming.pdf · 2017-09-10 · What do we need to know? To program a MIPS, or any processor

  • Upload
    others

  • View
    6

  • Download
    0

Embed Size (px)

Citation preview

Page 1: A Crash course in MIPS assembly programmingxyx.se/.../sessions/Session2-MIPS-assembly-programming.pdf · 2017-09-10 · What do we need to know? To program a MIPS, or any processor

A crash course in MIPSassembly programming

Computer Architecture

1DT016 distanceFall 2017

http://xyx.se/1DT016/index.php

Per FoyerMail: [email protected]

[email protected] 2017 1

Page 2: A Crash course in MIPS assembly programmingxyx.se/.../sessions/Session2-MIPS-assembly-programming.pdf · 2017-09-10 · What do we need to know? To program a MIPS, or any processor

Microprocessor without Interlocking Pipe Stages

MIPS – ”Our” processor

[email protected] 2017 2

Page 3: A Crash course in MIPS assembly programmingxyx.se/.../sessions/Session2-MIPS-assembly-programming.pdf · 2017-09-10 · What do we need to know? To program a MIPS, or any processor

Where in the machine now?

[email protected] 2017 3

Level 0

Level 1

Level 2

Level 3

Level 4

Level 5

Digital Logic Level

Microprogramminglevel

Conventionalmachine level

Problem-orientedlanguage level

Operating systemmachine level

Assembly languagelevel

addmul: addi $r1, $zero, 2 mul $r1, $r1, 2 jr $ra

int addmul( int t ){ return (t + 2) * 2;}

li $v0, 4syscall

0x24020004 0x0000000c0x03E00008

110110101111010000010110000100010011111010100001

Translation (compiler)

Translation (assembler)

Partial interpretation (OS)

Interpretation(microprogram)

Executed byhardware

Page 4: A Crash course in MIPS assembly programmingxyx.se/.../sessions/Session2-MIPS-assembly-programming.pdf · 2017-09-10 · What do we need to know? To program a MIPS, or any processor

What do we need to know?

To program a MIPS, or any processor for that matter, in assembly language we need to know:

•How many registers are there in the CPU?

•How does the memory map look like?

•What assembler instructions does the CPU have?

• Arithmetic, logic, shift and rotate, jump, …

•What do the addressing modes look like?(in what ways can we reference memory)

•What assembler directives are there?

[email protected] 2017 4

Page 5: A Crash course in MIPS assembly programmingxyx.se/.../sessions/Session2-MIPS-assembly-programming.pdf · 2017-09-10 · What do we need to know? To program a MIPS, or any processor

MIPS register names

[email protected] 2017 5

Page 6: A Crash course in MIPS assembly programmingxyx.se/.../sessions/Session2-MIPS-assembly-programming.pdf · 2017-09-10 · What do we need to know? To program a MIPS, or any processor

MIPS register file

[email protected] 2017 6

Page 7: A Crash course in MIPS assembly programmingxyx.se/.../sessions/Session2-MIPS-assembly-programming.pdf · 2017-09-10 · What do we need to know? To program a MIPS, or any processor

MIPS registers and usage convention

[email protected] 2017 7

Page 8: A Crash course in MIPS assembly programmingxyx.se/.../sessions/Session2-MIPS-assembly-programming.pdf · 2017-09-10 · What do we need to know? To program a MIPS, or any processor

MIPS memory

[email protected] 2017 8

Page 9: A Crash course in MIPS assembly programmingxyx.se/.../sessions/Session2-MIPS-assembly-programming.pdf · 2017-09-10 · What do we need to know? To program a MIPS, or any processor

MIPS memory map

[email protected] 2017 9

Page 10: A Crash course in MIPS assembly programmingxyx.se/.../sessions/Session2-MIPS-assembly-programming.pdf · 2017-09-10 · What do we need to know? To program a MIPS, or any processor

MIPS CPU blocks

[email protected] 2017 10

Von Neumann? Why or why not?

Page 11: A Crash course in MIPS assembly programmingxyx.se/.../sessions/Session2-MIPS-assembly-programming.pdf · 2017-09-10 · What do we need to know? To program a MIPS, or any processor

MIPS addressing modes

[email protected] 2017 11

Page 12: A Crash course in MIPS assembly programmingxyx.se/.../sessions/Session2-MIPS-assembly-programming.pdf · 2017-09-10 · What do we need to know? To program a MIPS, or any processor

Registers and arithmetic

[email protected] 2017 12

Page 13: A Crash course in MIPS assembly programmingxyx.se/.../sessions/Session2-MIPS-assembly-programming.pdf · 2017-09-10 · What do we need to know? To program a MIPS, or any processor

Machine language: The binary representation for instructions.

ISA: Instruction Set Architecture

•Fixed size (32-bit) instructions

•Only 3 instruction formats

•Limited sized immediate fields.

•Strict Load and Store architecture. RISC!

•Studying MIPS machine language will also reveal some restrictions in the instruction set architecture (ISA)

The anatomy (ISA) of a MIPS instruction

[email protected] 2017 13

Page 14: A Crash course in MIPS assembly programmingxyx.se/.../sessions/Session2-MIPS-assembly-programming.pdf · 2017-09-10 · What do we need to know? To program a MIPS, or any processor

MIPS: register-to-register

[email protected] 2017 14

Page 15: A Crash course in MIPS assembly programmingxyx.se/.../sessions/Session2-MIPS-assembly-programming.pdf · 2017-09-10 · What do we need to know? To program a MIPS, or any processor

The R-type format

[email protected] 2017 15

Shamt = ”SHift AMounT”

Page 16: A Crash course in MIPS assembly programmingxyx.se/.../sessions/Session2-MIPS-assembly-programming.pdf · 2017-09-10 · What do we need to know? To program a MIPS, or any processor

The I-type format

[email protected] 2017 16

Page 17: A Crash course in MIPS assembly programmingxyx.se/.../sessions/Session2-MIPS-assembly-programming.pdf · 2017-09-10 · What do we need to know? To program a MIPS, or any processor

The J-type format

[email protected] 2017 17

Page 18: A Crash course in MIPS assembly programmingxyx.se/.../sessions/Session2-MIPS-assembly-programming.pdf · 2017-09-10 · What do we need to know? To program a MIPS, or any processor

The Arithmetic Logic Unit (ALU)

[email protected] 2017 18

ALU

Arithmetic

Logic

A + B

A – B

A * B

A / B

A < B

A == B

A AND B

A OR B

A XOR B

Page 19: A Crash course in MIPS assembly programmingxyx.se/.../sessions/Session2-MIPS-assembly-programming.pdf · 2017-09-10 · What do we need to know? To program a MIPS, or any processor

Basic arithmetic and logic

[email protected] 2017 19

Page 20: A Crash course in MIPS assembly programmingxyx.se/.../sessions/Session2-MIPS-assembly-programming.pdf · 2017-09-10 · What do we need to know? To program a MIPS, or any processor

Immediate operands

[email protected] 2017 20

Page 21: A Crash course in MIPS assembly programmingxyx.se/.../sessions/Session2-MIPS-assembly-programming.pdf · 2017-09-10 · What do we need to know? To program a MIPS, or any processor

Loading and storing bytes

[email protected] 2017 21

Page 22: A Crash course in MIPS assembly programmingxyx.se/.../sessions/Session2-MIPS-assembly-programming.pdf · 2017-09-10 · What do we need to know? To program a MIPS, or any processor

Loading and storing words

[email protected] 2017 22

Page 23: A Crash course in MIPS assembly programmingxyx.se/.../sessions/Session2-MIPS-assembly-programming.pdf · 2017-09-10 · What do we need to know? To program a MIPS, or any processor

Limitations: Loads and stores

[email protected] 2017 23

Page 24: A Crash course in MIPS assembly programmingxyx.se/.../sessions/Session2-MIPS-assembly-programming.pdf · 2017-09-10 · What do we need to know? To program a MIPS, or any processor

Larger constants

[email protected] 2017 24

Page 25: A Crash course in MIPS assembly programmingxyx.se/.../sessions/Session2-MIPS-assembly-programming.pdf · 2017-09-10 · What do we need to know? To program a MIPS, or any processor

Memory alignment

[email protected] 2017 25

Page 26: A Crash course in MIPS assembly programmingxyx.se/.../sessions/Session2-MIPS-assembly-programming.pdf · 2017-09-10 · What do we need to know? To program a MIPS, or any processor

Data flow in MIPS

[email protected] 2017 26

Page 27: A Crash course in MIPS assembly programmingxyx.se/.../sessions/Session2-MIPS-assembly-programming.pdf · 2017-09-10 · What do we need to know? To program a MIPS, or any processor

Function control flow in MIPS

[email protected] 2017 27

Page 28: A Crash course in MIPS assembly programmingxyx.se/.../sessions/Session2-MIPS-assembly-programming.pdf · 2017-09-10 · What do we need to know? To program a MIPS, or any processor

Pseudo-instructions

[email protected] 2017 28

Page 29: A Crash course in MIPS assembly programmingxyx.se/.../sessions/Session2-MIPS-assembly-programming.pdf · 2017-09-10 · What do we need to know? To program a MIPS, or any processor

Assembler directives.align Align next data item on specified byte boundary (0=byte, 1=half, 2=word, 3=double)

.ascii Store the string in the Data segment but do not add null terminator

.asciiz Store the string in the Data segment and add null terminator

.byte Store the listed value(s) as 8 bit bytes

.data Subsequent items stored in Data segment at next available address

.end_macro End macro definition. See .macro

.eqv Substitute second operand for first. First operand is symbol, second

operand is expression (like #define)

.extern Declare the listed label and byte length to be a global data field

.globl Declare the listed label(s) as global to enable referencing from other files

.half Store the listed value(s) as 16 bit halfwords on halfword boundary

.include Insert the contents of the specified file. Put filename in quotes.

.macro Begin macro definition. See .end_macro

.set Set assembler variables. Currently ignored but included for SPIM compatability

.space Reserve the next specified number of bytes in Data segment

.text Subsequent items (instructions) stored in Text segment at next available address

.word Store the listed value(s) as 32 bit words on word boundary

[email protected] 2017 29

Page 30: A Crash course in MIPS assembly programmingxyx.se/.../sessions/Session2-MIPS-assembly-programming.pdf · 2017-09-10 · What do we need to know? To program a MIPS, or any processor

SPIM / MARS system calls

[email protected] 2017 30

Example

Page 31: A Crash course in MIPS assembly programmingxyx.se/.../sessions/Session2-MIPS-assembly-programming.pdf · 2017-09-10 · What do we need to know? To program a MIPS, or any processor

# helloworld.s

#

# Print out "Hello World"

.data

msg: .asciiz "Hello World"

.text

.globl main

main: li $v0, 4 # syscall 4 (print_str)

la $a0, msg # argument: string

syscall # print the string

jr $ra # retrun to caller

Demo: Hello world in Mars

[email protected] 2017 31

After assembling, how do theinstructions look like?

How about the memory map?

Page 32: A Crash course in MIPS assembly programmingxyx.se/.../sessions/Session2-MIPS-assembly-programming.pdf · 2017-09-10 · What do we need to know? To program a MIPS, or any processor

”Endianness”

[email protected] 2017 32

First word: ”lleH”…

Big endian

Little endian

Byte 4Byte 3Byte 2Byte 1

Byte 4 Byte 3 Byte 3 Byte 1

Lowest memory address

Page 33: A Crash course in MIPS assembly programmingxyx.se/.../sessions/Session2-MIPS-assembly-programming.pdf · 2017-09-10 · What do we need to know? To program a MIPS, or any processor

Branches – Short conditional jumps

[email protected] 2017 33

Page 34: A Crash course in MIPS assembly programmingxyx.se/.../sessions/Session2-MIPS-assembly-programming.pdf · 2017-09-10 · What do we need to know? To program a MIPS, or any processor

Larger branch constants

[email protected] 2017 34

Page 35: A Crash course in MIPS assembly programmingxyx.se/.../sessions/Session2-MIPS-assembly-programming.pdf · 2017-09-10 · What do we need to know? To program a MIPS, or any processor

Nested functions

[email protected] 2017 35

Page 36: A Crash course in MIPS assembly programmingxyx.se/.../sessions/Session2-MIPS-assembly-programming.pdf · 2017-09-10 · What do we need to know? To program a MIPS, or any processor

”Spilling” registers

[email protected] 2017 36

Page 37: A Crash course in MIPS assembly programmingxyx.se/.../sessions/Session2-MIPS-assembly-programming.pdf · 2017-09-10 · What do we need to know? To program a MIPS, or any processor

Who saves the registers?

[email protected] 2017 37

Page 38: A Crash course in MIPS assembly programmingxyx.se/.../sessions/Session2-MIPS-assembly-programming.pdf · 2017-09-10 · What do we need to know? To program a MIPS, or any processor

The caller?

[email protected] 2017 38

Page 39: A Crash course in MIPS assembly programmingxyx.se/.../sessions/Session2-MIPS-assembly-programming.pdf · 2017-09-10 · What do we need to know? To program a MIPS, or any processor

The routine that’s called?

[email protected] 2017 39

Page 40: A Crash course in MIPS assembly programmingxyx.se/.../sessions/Session2-MIPS-assembly-programming.pdf · 2017-09-10 · What do we need to know? To program a MIPS, or any processor

…or both?

[email protected] 2017 40

Page 41: A Crash course in MIPS assembly programmingxyx.se/.../sessions/Session2-MIPS-assembly-programming.pdf · 2017-09-10 · What do we need to know? To program a MIPS, or any processor

Register spilling convention

[email protected] 2017 41

Page 42: A Crash course in MIPS assembly programmingxyx.se/.../sessions/Session2-MIPS-assembly-programming.pdf · 2017-09-10 · What do we need to know? To program a MIPS, or any processor

Demo: stradd.s

Simple program that demonstrates single nested functions following the register spilling convention.

•Uses SPIM / MARS syscalls

•Test setting breakpoints

•Test single backstepping

[email protected] 2017 42

Page 43: A Crash course in MIPS assembly programmingxyx.se/.../sessions/Session2-MIPS-assembly-programming.pdf · 2017-09-10 · What do we need to know? To program a MIPS, or any processor

Function calls and stacks

[email protected] 2017 43

Page 44: A Crash course in MIPS assembly programmingxyx.se/.../sessions/Session2-MIPS-assembly-programming.pdf · 2017-09-10 · What do we need to know? To program a MIPS, or any processor

Stacks and function calls

[email protected] 2017 44

Page 45: A Crash course in MIPS assembly programmingxyx.se/.../sessions/Session2-MIPS-assembly-programming.pdf · 2017-09-10 · What do we need to know? To program a MIPS, or any processor

The MIPS stack

[email protected] 2017 45

Page 46: A Crash course in MIPS assembly programmingxyx.se/.../sessions/Session2-MIPS-assembly-programming.pdf · 2017-09-10 · What do we need to know? To program a MIPS, or any processor

Pushing elements

[email protected] 2017 46

Page 47: A Crash course in MIPS assembly programmingxyx.se/.../sessions/Session2-MIPS-assembly-programming.pdf · 2017-09-10 · What do we need to know? To program a MIPS, or any processor

Accessing and popping elements

[email protected] 2017 47

Page 48: A Crash course in MIPS assembly programmingxyx.se/.../sessions/Session2-MIPS-assembly-programming.pdf · 2017-09-10 · What do we need to know? To program a MIPS, or any processor

Summary: Calls, Registers and Stack

Function (subroutine) calls in MIPS:

•Functions are called using jal, passing arguments in registers $a0-$a3

•Functions place results in registers $v0-$v1 and return using $ra

Assembly programmers must follow many conventions. Nothing prevents a “rogue” program from overwriting registers or stack memory used by some other function.

[email protected] 2017 48

Page 49: A Crash course in MIPS assembly programmingxyx.se/.../sessions/Session2-MIPS-assembly-programming.pdf · 2017-09-10 · What do we need to know? To program a MIPS, or any processor

Decoding Machine Language

[email protected] 2017 49

A form of ”reverse engineering”, Disassembling machine code

Page 50: A Crash course in MIPS assembly programmingxyx.se/.../sessions/Session2-MIPS-assembly-programming.pdf · 2017-09-10 · What do we need to know? To program a MIPS, or any processor

Finito la musica!

[email protected] 2017 50