MIPS Assembly Language MIPS Assembly ... - Courses.cs.vt.edu… [PDF]

Indentation is insignificant to the assembler, but is certainly significant to the human reader. MIPS command tokens are

3 downloads 5 Views 230KB Size

Recommend Stories


MIPS & NiosII Assembly Language Today's Lecture
Raise your words, not voice. It is rain that grows flowers, not thunder. Rumi

mips 2017
Be who you needed when you were younger. Anonymous

MIPS reference card [PDF]
MIPS reference card add rd, rs, rt. Add rd = rs + rt. R0/20 sub rd, rs, rt. Subtract rd = rs - rt. R0/22 addi rt, rs, imm. Add Imm. rt = rs + imm±. I 8 addu rd, rs, rt. Add Unsigned rd = rs + rt. R0/21 subu rd, rs, rt. Subtract Unsigned rd = rs - rt

MIPS berechnen
The only limits you see are the ones you impose on yourself. Dr. Wayne Dyer

2017 MIPS
Almost everything will work again if you unplug it for a few minutes, including you. Anne Lamott

MIPS Green Sheet [PDF] [PDF]
OPCODES, BASE CONVERSION, ASCII SYMBOLS. ®. MIPS (l) MIPS (2) MIPS Deci_ Hexa- A C11 Deci_ HEXa- ASCII opcode funct funct Binary l decl- Char- l deci- Char-. (3126) (5;0) (5:0) ma mal aeter ma mai acter. (l) :111 addf 00 0000 0 0 NUL 64 40 Ñ@Í sub

Assembly Language
Courage doesn't always roar. Sometimes courage is the quiet voice at the end of the day saying, "I will

MIPS X-Ray
What you seek is seeking you. Rumi

MIPS Clinician Participation Letter
We can't help everyone, but everyone can help someone. Ronald Reagan

The MIPS Architecture
And you? When will you begin that long journey into yourself? Rumi

Idea Transcript


CS 3204 Operating Systems

MIPS Assembly Language

Basic Assembly 1

We will study the MIPS assembly language as an exemplar of the concept. MIPS assembly instructions each consist of a single token specifying the command to be carried out, and zero or more operation arguments:

arg0, arg1, ... argN

The tokens are separated by commas and (optionally) whitespace. Indentation is insignificant to the assembler, but is certainly significant to the human reader. MIPS command tokens are short and mnemonic (in principle). For example: add

lw

sw

jr

The MIPS reference card bound in the front of P&H includes a complete listing of all the MIPS commands you will need to understand and use.

Computer Science Dept Va Tech January 2006

Intro Computer Organization

MIPS Assembly Language

©2006 McQuain & Ribbens

Basic Assembly 2

MIPS command arguments include: - hardware registers - offset and base register - literal constants (immediate arguments) - labels

Registers are specified either as $k, where 0 ≤ k ≤ 31, or using the symbolic names shown earlier. Of course, MIPS assembly also allows comments. Simply, all characters from a ‘#’ character to the end of the line are considered a comment. There are also some special directives, but those can wait...

Computer Science Dept Va Tech January 2006

©William D McQuain, January 2005

Intro Computer Organization

©2006 McQuain & Ribbens

1

CS 3204 Operating Systems

MIPS Hello World

Basic Assembly 3

# PROGRAM: Hello, World! .data out_string:

# Data declaration section .asciiz "\nHello, World!\n"

.text # Assembly language instructions main: # Start of code section li $v0, 4 # system call code for printing string = 4 la $a0, out_string # load address of string to be printed into $a0 syscall # call operating system to perform operation in $v0 # syscall takes its arguments from $a0, $a1, ...

This illustrates the basic structure of an assembly language program. - data segment and text segment - use of label for data object (which is a zero-terminated ASCII string) - use of registers - invocation of a system call

Intro Computer Organization

Computer Science Dept Va Tech January 2006

MIPS Assembly Arithmetic Instructions

©2006 McQuain & Ribbens

Basic Assembly 4

All arithmetic and logical instructions have 3 operands Operand order is fixed (destination first):

, ,

Design Principle: simplicity favors regularity. Example: C code:

a = b + c;

MIPS ‘code’:

add $s3, $s1, $s5

“The natural number of operands for an operation like addition is three…requiring every instruction to have exactly three operands, no more and no less, conforms to the philosophy of keeping the hardware simple” Computer Science Dept Va Tech January 2006

©William D McQuain, January 2005

Intro Computer Organization

©2006 McQuain & Ribbens

2

CS 3204 Operating Systems

Assembly Arithmetic Instructions

Basic Assembly 5

Design Principle: simplicity favors regularity. Of course this complicates some things... C code:

a = b + c + d;

MIPS pseudo-code:

add a, b, c add a, a, d

add addi addiu

Operands must be registers (or immediates), only 32 registers are provided Each register contains 32 bits

Design Principle: smaller is faster.

addu div mult multu sub

Why?

subu ...

Computer Science Dept Va Tech January 2006

Intro Computer Organization

Immediates

©2006 McQuain & Ribbens

Basic Assembly 6

In MIPS assembly, immediates are literal constants. Many instructions allow immediates to be used as parameters. addi li

$t0, $t1, 42 $t0, 42

# note the opcode # actually a pseudo-instruction

Note that immediates cannot be used with all MIPS assembly instructions; refer to your MIPS reference card. Immediates may also be expressed in hexadecimal: 0xFFFFFFFF

Computer Science Dept Va Tech January 2006

©William D McQuain, January 2005

Intro Computer Organization

©2006 McQuain & Ribbens

3

CS 3204 Operating Systems

MIPS Assembly Logical Instructions

Basic Assembly 7

Logical instructions also have 3 operands:

, ,

Examples: and andi or ori nor sll srl QTP:

$s0, $s0, $s0, $s0, $s0, $s0, $s0,

$s1, $s1, $s1, $s1, $s1, $s1, $s1,

$s2 42 $s2 42 $s2 10 10

# bitwise AND # bitwise OR # bitwise NOR (i.e., NOT OR) # logical shift left # logical shift right

MIPS assembly doesn’t include the logical operation not. Why?

How would you achieve the effect of a logical not operation in MIPS assembly? Intro Computer Organization

Computer Science Dept Va Tech January 2006

©2006 McQuain & Ribbens

Assembly Load and Store Instructions

Basic Assembly 8

Transfer data between memory and registers Example: C code:

A[12] = h + A[8];

MIPS code:

lw add sw

$t0, 32($s3) $t0, $s2, $t0 $t0, 48($s3)

# load word # store word

Can refer to registers by name (e.g., $s2, $t2) instead of number Load command specifies destination first: Store command specifies destination last:

opcode , opcode ,

Remember arithmetic operands are registers or immediates, not memory! Can’t write: Computer Science Dept Va Tech January 2006

©William D McQuain, January 2005

add

48($s3), $s2, 32($s3) Intro Computer Organization

©2006 McQuain & Ribbens

4

CS 3204 Operating Systems

Addressing Modes

Basic Assembly 9

In register mode the address is simply the value in a register: lw

$t0, ($s3)

In immediate mode the address is simply an immediate value in the instruction: lw

$t0, 0

In base + register mode the address is the sum of an immediate and the value in a register: lw

$t0, 100($s3)

There are also various label modes: j j j

absval absval + 100 absval + 100($s3)

Intro Computer Organization

Computer Science Dept Va Tech January 2006

An Assembly Language Example

©2006 McQuain & Ribbens

Basic Assembly 10

Can we figure out the code? void swap(int v[], int k) {

}

int temp; temp = v[k] v[k] = v[k+1]; v[k+1] = temp;

Conventions for procedure calls: - arg0 is in register $4 (aka $a0) - arg1 is in register $5 (aka $a1) - … - return address is in register $31 ($ra)

swap: sll

# calculate offset of v[k]

add

$t0, $a0, $t0

# add offset to array base address

lw

$t2, 0($t0)

# load v[k] into register

lw

$t3, 4($t0)

# load v[k+1] into register

sw

$t3, 0($t0)

# store register v[k] to v[k+1]

sw

$t2, 4($t0)

# store register v[k+1] to v[k]

jr

$ra

# return to caller

Computer Science Dept Va Tech January 2006

©William D McQuain, January 2005

# need label to jump to in call $t0, $a1, 2

Intro Computer Organization

©2006 McQuain & Ribbens

5

CS 3204 Operating Systems

So far we’ve learned…

Basic Assembly 11

MIPS - loading words but addressing bytes - arithmetic on registers only

# Instruction

# Meaning

add sub lw sw

# # # #

$s1, $s1, $s1, $s1,

$s2, $s3 $s2, $s3 100($s2) 100($s2)

Computer Science Dept Va Tech January 2006

$s1 = $s2 + $s3 $s1 = $s2 – $s3 $s1 = Memory[$s2+100] Memory[$s2+100] = $s1

Intro Computer Organization

©2006 McQuain & Ribbens

Conditional Branch Instructions

Basic Assembly 12

Decision making instructions - alter the control flow, - i.e., change the "next" instruction to be executed

MIPS conditional branch instructions: bne

$t0, $t1,

beq

$t0, $t1,

# branch on not-equal # PC = & if $t0 != $t1 # branch on equal

Labels are strings of alphanumeric characters, underscores and periods, not beginning with a digit. They are declared by placing them at the beginning of a line, followed by a colon character.

if ( i == j ) h = i + j;

Computer Science Dept Va Tech January 2006

©William D McQuain, January 2005

Miss:

Intro Computer Organization

bne add ....

$s0, $s1, Miss $s3, $s0, $s1

©2006 McQuain & Ribbens

6

CS 3204 Operating Systems

Unconditional Branch Instructions

Basic Assembly 13

MIPS unconditional branch instructions: j jr

Label $ra

# PC = Label # PC = $ra

if ( i != j ) h = i + j; else h = i – j;

Lab1: Lab2:

beq add j sub ...

$s4, $s5, Lab1 $s3, $s4, $s5 Lab2 $s3, $s4, $s5

Can you build a simple for loop?

Computer Science Dept Va Tech January 2006

Intro Computer Organization

©2006 McQuain & Ribbens

Conditional Set Instructions

Basic Assembly 14

MIPS conditional set instructions: slt

$t0, $s0, $s1

slti $t0, $s0,

# # # #

$t0 $t0 $t0 $t0

= = = =

1 0 1 0

if $s0 < $s1 otherwise if $s0 < imm otherwise

There are similar unsigned versions.

if ( i < j ) goto A; else goto B;

Computer Science Dept Va Tech January 2006

©William D McQuain, January 2005

# $s3 == i, $s4 == j slt $t1, $s3, $s4 beq $zero, $t1, B A: # code... j C B: # code... C:

Intro Computer Organization

©2006 McQuain & Ribbens

7

CS 3204 Operating Systems

So far we’ve learned:

Basic Assembly 15

# Instruction

Meaning

add sub

$s1,$s2,$s3 $s1,$s2,$s3

# #

$s1 = $s2 + $s3 $s1 = $s2 – $s3

lw sw

$s1,100($s2) $s1,100($s2)

# #

$s1 = Memory[$s2+100] Memory[$s2+100] = $s1

bne beq

$s4,$s5,L0 $s4,$s5,L1

# #

Next instr. is at L0 if $s4 ≠ $s5 Next instr. is at L1 if $s4 = $s5

j

Label

#

Next instr. is at Label

Computer Science Dept Va Tech January 2006

Intro Computer Organization

Custom Control Flow

©2006 McQuain & Ribbens

Basic Assembly 16

We have: beq, bne, what about Branch-if-less-than? Recall the set-less-than instruction: slt

$t0, $s1, $s2

if ($s1 < $s2) $t0 = 1 else $t0 = 0;

We can use this instruction to build "blt

$s1, $s2, Label"

— can now build general control structures

Note that the assembler needs a register to do this, — there are policy of use conventions for registers

Computer Science Dept Va Tech January 2006

©William D McQuain, January 2005

Intro Computer Organization

©2006 McQuain & Ribbens

8

CS 3204 Operating Systems

Program Termination

Basic Assembly 17

Unlike the high-level languages you are accustomed to, MIPS assembly does not include an instruction, or block syntax, to terminate the program execution. MIPS programs can be terminated by making a system call: ## Exit li $v0, 10 syscall

# load code for exit system call in $v0 # make the system call to exit

Without such code, the system would attempt to continue execution into the memory words that followed the final instructions of the program. That rarely produces graceful results.

Computer Science Dept Va Tech January 2006

Intro Computer Organization

Policy of Use Conventions

©2006 McQuain & Ribbens

Basic Assembly 18

MIPS programmers are expected to conform to the following conventions when using the 29 available 32-bit registers: Name Register number $zero 0 $v0-$v1 2-3 $a0-$a3 4-7 $t0-$t7 8-15 $s0-$s7 16-23 $t8-$t9 24-25 $gp 28 $sp 29 $fp 30 $ra 31

Usage the constant value 0 values for results and expression evaluation arguments temporaries saved more temporaries global pointer stack pointer frame pointer return address

Register 1 ($at) is reserved for the assembler, 26-27 for operating system Computer Science Dept Va Tech January 2006

©William D McQuain, January 2005

Intro Computer Organization

©2006 McQuain & Ribbens

9

CS 3204 Operating Systems

Pseudo-Instructions

Basic Assembly 19

You may have noticed something is odd about a number of the MIPS instructions that have been covered so far. For example: li

$t0, 0xFFFFFFFF

Now, logically there's nothing wrong with wanting to place a 32-bit value into one of the registers. But there's certainly no way the instruction above could be translated into a 32-bit machine instruction, since the immediate value alone would require 32 bits. This is an example of a pseudo-instruction. A MIPS assembler or interpreter like SPIM may be designed to support such extensions that make it easier to write complex programs. In effect, the assembler supports an extended MIPS architecture that is more sophisticated than the actual MIPS architecture of the underlying hardware. Of course, the assembler must be able to translate every pseudo-instruction into a sequence of valid MIPS assembly instructions. Intro Computer Organization

Computer Science Dept Va Tech January 2006

Pseudo-Instruction Examples move

$t1, $t2

$t1, # # # # #

Basic Assembly 20

# $t1

Smile Life

When life gives you a hundred reasons to cry, show life that you have a thousand reasons to smile

Get in touch

© Copyright 2015 - 2024 PDFFOX.COM - All rights reserved.