Unformatted text preview:

MIPS Assembly Language Guide MIPS is an example of a Reduced Instruction Set Computer RISC which was designed for easy instruction pipelining MIPS has a Load Store architecture since all instructions other than the load and store instructions must use register operands MIPS has 32 32 bit general purpose registers 0 1 2 31 but some of these have special uses see MIPS Register Conventions table Common MIPS Instructions and psuedo instructions Type of Instruction Memory Access Load and Store Move Load Address Arithmetic Instruction reg operands only Arithmetic with Immediates last operand must be an integer Conditional Branch Unconditional Branch MIPS Assembly Language lw 4 Mem sw 4 Mem lw 4 16 3 sw 4 16 3 move 4 2 li 4 100 la 5 mem add 4 2 3 mul 10 12 8 sub 4 2 3 addi 4 2 100 mul 4 2 100 bgt 4 2 LABEL bge blt ble beq bne j LABEL Register Transfer Language Description 4 Mem Mem 4 4 Mem at address in 3 16 Mem at address in 3 16 4 4 2 4 100 4 load address of mem 4 2 3 10 12 8 32 bit product 4 2 3 4 2 100 4 2 100 32 bit product Branch to LABEL if 4 2 Always Branch to LABEL A simple MIPS assembly language program to sum the elements in an array A is given below data array word 5 10 20 25 30 40 60 length word 7 sum word 0 Algorithm being implemented to sum sum 0 for i 0 to length 1 do sum sum array i end for an array use 8 for sum use 9 for i use 10 for length 1 use 11 for base addr of array text globl main main li la 8 0 11 array load immediate 0 in reg 8 sum load base addr of array into 11 for lw 10 length addi 10 10 1 li 9 0 for compare bgt 9 10 end for mul 12 9 4 add 12 11 12 lw 12 0 12 add 8 8 12 addi 9 9 1 j for compare end for sw load length in reg 10 10 length 1 initialize i in 9 to 0 drop out of loop when i length 1 mult i by 4 to get offset within array add base addr of array to 12 to get addr of array i load value of array i from memory into 12 update sum increment i 8 sum li v0 10 syscall system code for exit MIPS Guide Page 2 of 10 MIPS Logical Instructions 4 4 4 4 4 4 4 4 and 4 5 6 andi 4 5 0x5f or 4 5 6 ori 4 5 0x5f xor 4 5 6 xori 4 5 0x5f nor 4 5 6 not 4 5 5 bit wise AND 6 5 bit wise AND 5f16 5 bit wise OR 6 5 bit wise OR 5f16 5 bit wise Exclusive OR 6 5 bit wise Exclusive OR 5f16 5 bit wise NOR 6 NOT 5 inverts all the bits MIPS Shift and Rotate Instructions sll 4 5 3 sllv 4 5 6 srl 4 5 3 srlv 4 5 6 sra 4 5 3 srav 4 5 6 rol 4 5 3 rol 4 5 6 ror 4 5 3 ror 4 5 6 4 shift left 5 by 3 positions Shift in zeros only least significant 5 bits of immediate value are used to shift Similar to sll but least significant 5 bits of 6 determine the amount to shift 4 shift right 5 by 3 positions Shift in zeros Similar to srl but least significant 5 bits of 6 determine the amount to shift 4 shift right 5 by 3 positions Sign extend shift in sign bit Similar to sra but least significant 5 bits of 6 determine the amount to shift 4 rotate left 5 by 3 positions Similar to above but least significant 5 bits of 6 determine the amount to rotate 4 rotate right 5 by 3 positions Similar to above but least significant 5 bits of 6 determine the amount to rotate Common usages for shift rotate and logical instructions include 1 To calculate the address of element array i we calculate base address of array i 4 for an array of words Since multiplication is a slow operation we can shift the value left two bit positions For example la 3 array sll 10 2 2 add 10 3 10 lw 4 0 10 load base address of array into 3 logical shift i s value in 2 by 2 to multiply its value by 4 finish calculation of the address of element array i load the value of array i into 4 2 Sometimes you want to manipulate individual bits in a string of bits For example you can represent a set of letters using a bit string Each bit in the bit string is associated with a letter bit position 0 with A bit position 1 with B bit position 25 with Z Bit string bits are set to 1 to indicate that their corresponding letters are in the set For example the set A B D Y would be represented as unused Z Y X E D C B A A B D Y is 000000 0 1 0 0 1 0 1 1 bit position 25 24 23 4 3 2 1 0 To determine if a specific ASCII character say C 6710 is in the set you would need to build a mask containing a single 1 in bit position 2 The sequence of instructions li 3 1 followed by sll 3 3 2 would build the needed mask in 3 If the bit string set of letters is in register 5 then we can check for the character C using the mask in 3 and the instruction and 6 5 3 If the bit string set in 5 contained a C then 6 will be non zero otherwise 6 will be zero MIPS Guide Page 3 of 10 main maxNum 3 maxPower 4 CalculatePowers maxNum maxPower end main High level Language Programmer s View CalculatePowers In integer numLimit integer Power In integer n integer e integer powerLimit integer result integer num pow if e 0 then result 1 for num 1 to numLimit do else if e 1 then for pow 1 to powerLimit do result n else print num raised to pow power is result Power n e 1 n Power num pow end if end for pow return result end for num end Power Compiler uses registers to avoid accessing the run time stack in memory as much as possible Registers can be used for local variables parameters return address function return value HLL View of Run time Stack AL code for subprogram caller code using some registers call subprogram return addr numLimit 3 powerLimit 4 num 3 pow 3 maxPower maxNum 4 3 wants used registers to be unchanged CalculatePowers Call Frame Main s Call Frame When a subprogram is called some of the register values might need to be saved spilled …


View Full Document

UNI CS 1410 - MIPS Assembly Language Guide

Loading Unlocking...
Login

Join to view MIPS Assembly Language Guide and access 3M+ class-specific study document.

or
We will never post anything without your permission.
Don't have an account?
Sign Up

Join to view MIPS Assembly Language Guide and access 3M+ class-specific study document.

or

By creating an account you agree to our Privacy Policy and Terms Of Use

Already a member?