1 / 22

MIPS Assembly

Learn key MIPS instructions, bitwise logical operations, shifts, and conditional branching in MIPS assembly language. Understand how to handle constants, bitwise operations, and make decisions in programming.

stevenb
Download Presentation

MIPS Assembly

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. MIPS Assembly

  2. Review • A computer has processor, memory, and IO devices. • The processor stores values in registers, and modifies values by sending them to the ALU. • Memory is where the computer stores a large number of values. Every byte can be accessed by specifying a unique address. The address goes from 0 to 0xffffffff in MIPS. In MIPS we mainly work with word which is 4 bytes. • MIPS instructions learned: • add, sub. • lw, sw.

  3. Constant or Immediate Operands • Many times we use a constant in an operation • For example, i++, i--, i += 4, and so on • Since constant operands occur frequently, we should include constants inside arithmetic operations so that they are much faster • MIPS has an add instruction that allows one operand to be a constant • The constant must be in 16 bits, as a signed integer in 2’s complement format addi $s1, $s2, 100 # $s1 = $s2 + 100 CDA3100

  4. Logical Operations • Often we need to operate on bit fields within a word. • Which allow us to pack and unpack bits into words and perform logical operations such as logical and, logical or, and logical negation CDA3100

  5. Bit-wise AND • Apply AND bit by bit • The resulting bit is 1 if both of the input bits are 1 and zero otherwise • and $t2, $t0, $t1 • There is also a version of AND with an immediate • andi $t2, $t1, 12 • The immediate is treated as an unsigned 16-bit number CDA3100

  6. Bit-wise OR • Apply OR bit by bit • The resulting bit is 1 if at least one of the input bits is 1 and zero otherwise • or $t2, $t0, $t1 • There is also a version of OR with an immediate • ori $t2, $t1, 12 • The immediate is treated as an unsigned 16-bit number CDA3100

  7. Bit-wise XOR • Apply XOR bit by bit • The resulting bit is 1 if two bits are different • xor $t2, $t0, $t1 • There is also a version of OR with an immediate • xori $t2, $t1, 12 • The immediate is treated as an unsigned 16-bit number CDA3100

  8. NOR • Since NOT takes one operand and results in one operand, it is not included in MIPS as an instruction • Because in MIPS each arithmetic operation takes exactly three operands • Instead, NOR is included • The resulting bit is 0 if at least one of the input bits is 1 • nor $t2, $t0, $t1 • How to implement NOT using NOR? • Using $zero as one of the input operands • It is included in MIPS as a pseudoinstruction CDA3100

  9. Exercise 1 • After learnt these instructions, how can we load an integer value (like 100) into a register ($t0)?

  10. Exercise 1 • After learnt these instructions, how can we load an integer value (like 100) into a register ($t0)? • addi $t0, $zero, 100 • ori $t0, $zero, 80 • Which should we prefer? • ori. Because it is simpler than add. Simpler means less time, less power consumption.

  11. Shifts • Shift instructions move all the bits in a word to the left or to the right • Shift left logical (sll) move all the bits to the left by the specified number of bits • sll $t2, $t0, 2 • Shift right logical (srl) move all the bits to the right • srl $t2, $t0, 2 • Filling the emptied bits with 0’s CDA3100

  12. Example • Suppose register $s0 ($16) is 9ten • What do we have in $t2 ($10) after CDA3100

  13. Example • Suppose register $s0 ($16) is 9ten • We have in $t2 ($10) after • The value is 144ten = 9ten 24 • In general, shifting left by i bits gives the same result as multiplying by 2i CDA3100

  14. Example • Suppose register $s0 ($16) is 9ten • We have in $t2 ($10) after • The value is NOT 9ten 228 • Note that overflow happens this time CDA3100

  15. Instructions for Making Decisions • A distinctive feature of programs is that they can make different decisions based on the input data CDA3100

  16. Instruction beq (branch if equal) • To support decision making, MIPS has two conditional branch instructions, similar to an “if” statement with a goto • In C, it is equivalent to • Note that L1 is a label and we are comparing values in register1 and register2 • Label is an address of an instruction CDA3100

  17. Instruction bne • Similarly, bne (branch not equal) means go to the statement labeled with L1 if the value in register1 does not equal to the value in regster2 • Equivalent to CDA3100

  18. Instruction j (jump) • MIPS has also an unconditional branch, equivalent to goto in C • Jump to the instruction labeled with L1 CDA3100

  19. Compiling if-then-else • Suppose variables f, g, h, i, and j are in registers $s0 through $s4, how to implement the following in MIPS? CDA3100

  20. Compiling if-then-else • Suppose variables f, g, h, i, and j are in registers $s0 through $s4, how to implement the following in MIPS? CDA3100

  21. Compiling if-then-else • Suppose variables f, g, h, i, and j are in registers $s0 through $s4, how to implement the following in MIPS? CDA3100

  22. MIPS Assembly for if-then-else • Now it is straightforward to translate the C program into MIPS assembly CDA3100

More Related