MIPS coding.

Slides:



Advertisements
Similar presentations
MIPS Assembly Tutorial
Advertisements

Goal: Write Programs in Assembly
Lecture 5: MIPS Instruction Set
MIPS assembly. Review  Lat lecture, we learnt  addi,  and, andi, or, ori, xor, xori, nor,  beq, j, bne  An array is stored sequentially in the memory.
CS/COE0447 Computer Organization & Assembly Language
CDA 3100 Recitation Week 8. Question 1.data A:.word 21,3,2,9,100,22,6,15,33,90.text.globl main main: la $a0, A li $a1, 17 li $a2, 10 jal funct li $v0,
CPS3340 COMPUTER ARCHITECTURE Fall Semester, /15/2013 Lecture 11: MIPS-Conditional Instructions Instructor: Ashraf Yaseen DEPARTMENT OF MATH & COMPUTER.
MIPS Assembly Language CPSC 321 Computer Architecture Andreas Klappenecker.
Chapter 2 Instructions: Language of the Computer
MIPS Function Continued
1 COMS 361 Computer Organization Title: Instructions Date: 9/28/2004 Lecture Number: 10.
MIPS Assembly Language I Computer Architecture CPSC 321 Andreas Klappenecker.
Feb 18, 2009 Lecture 4-2 instruction set architecture (Part II of [Parhami]) MIPS encoding of instructions Spim simulator more examples of MIPS programming.
Computer Architecture CPSC 321 E. J. Kim. Overview Logical Instructions Shifts.
1 Lecture 2: MIPS Instruction Set Today’s topic:  MIPS instructions Reminder: sign up for the mailing list cs3810 Reminder: set up your CADE accounts.
Lecture 5 Sept 14 Goals: Chapter 2 continued MIPS assembly language instruction formats translating c into MIPS - examples.
CS 300 – Lecture 6 Intro to Computer Architecture / Assembly Language Instructions.
MIPS Instruction Set Advantages
MIPS coding. slt, slti slt $t3, $t1, $t2 – set $t3 to be 1 if $t1 < $t2 ; else clear $t3 to be 0. – “Set Less Than.” slti $t3, $t1, 100 – set $t3 to be.
April 23, 2001Systems Architecture I1 Systems Architecture I (CS ) Lecture 9: Assemblers, Linkers, and Loaders * Jeremy R. Johnson Mon. April 23,
MIPS coding. Review Shifting – Shift Left Logical (sll) – Shift Right Logical (srl) – Moves all of the bits to the left/right and fills in gap with 0’s.
Computer Architecture CSE 3322 Lecture 3 Assignment: 2.4.1, 2.4.4, 2.6.1, , Due 2/3/09 Read 2.8.
MIPS coding. slt, slti slt $t3, $t1, $t2 – set $t3 to be 1 if $t1 < $t2 ; else clear $t3 to be 0. – “Set Less Than.” slti $t3, $t1, 100 – set $t3 to be.
Computer Organization Instructions Language of The Computer (MIPS) 2.
MIPS Coding. Exercise – the bubble sort 7/9/2016week04-3.ppt2.
MIPS Assembly Language Programming
Computer Architecture & Operations I
MIPS Assembly.
MIPS Assembly Language Programming
Computer Architecture Instruction Set Architecture
MIPS Instruction Set Advantages
COMPUTER ARCHITECTURE & OPERATIONS I
MIPS Procedures.
MIPS Coding Continued.
Lecture 4: MIPS Instruction Set
Computer Architecture & Operations I
MIPS instructions.
ECE3055 Computer Architecture and Operating Systems MIPS ISA
RISC Concepts, MIPS ISA Logic Design Tutorial 8.
Computer Architecture & Operations I
CS170 Computer Organization and Architecture I
The University of Adelaide, School of Computer Science
MIPS coding.
MIPS Procedures.
Lecture 4: MIPS Instruction Set
Solutions Chapter 2.
Computer Architecture & Operations I
MIPS Instruction Encoding
ECE232: Hardware Organization and Design
MIPS coding.
MIPS Functions.
MIPS Instruction Encoding
Instruction encoding The ISA defines Format = Encoding
MIPS Functions.
MIPS coding.
MIPS Procedures.
Review.
MIPS Coding.
MIPS function continued
MIPS Functions.
MIPS Coding.
COMS 361 Computer Organization
COMS 361 Computer Organization
Review.
MIPS Coding Continued.
MIPS assembly.
Program Assembly.
MIPS Functions.
MIPS instructions.
Conditional Branching (beq)
Presentation transcript:

MIPS coding

Complete MIPS code .data save: .word 10, 10, 10, 10, 10, 11, 12, .text .globl main main: li $s3, 0 li $s5, 10 la $s6, save Loop: sll $t1, $s3, 2 add $t1, $t1, $s6 lw $t0, 0($t1) bne $t0, $s5, Exit addi $s3, $s3, 1 j Loop Exit: done: li $v0, 10 # these two lines are to tell the simulator to stop syscall

Complete MIPS code It has a data segment and a code (text) segment. The beginning of the data segment in the assembly source code is indicated as .data and followed by several declarations such as A: .word 0,1,2,3,4,5,6,7,8,9 meaning an array of words whose starting address is associated with label ``A.’’

Complete MIPS code The text segment in the source code usually starts with .text .globl main main: where ``main’’ is the label associated with the address of the first instruction of the code. And the code usually ends with li $v0,10 # telling the simulator to stop syscall Comment with `#’

Exercise 1 Suppose we have three arrays, A, B, C, all of size 10. Now we want to set C[i] = min(A[i], B[i]) for all 0<= i <= 9. 4/22/2019 week04-3.ppt

Exercise 1 Suppose we have three arrays, A, B, C, all of size 10. Now we want to set C[i] = min(A[i], B[i]) for all 0<= i <= 9. First, we need a loop to walk through the elements (done before) Second, we need to be able to read the elements (done before) Third, we need to be able to compare two numbers (done before) Fourth, we need to write back to the memory (easy) So, first write the loop. Then, write codes to read the elements. Then, compare with if else. Then, write back. 4/22/2019 week04-3.ppt

add $t5, $t4,$s0 # $t5 will have the address of A[i] .data A: .word 12, 34, 67, 1, 45, 90, 11, 33, 67, 19 B: .word 90, 2, 93, 66, 8, 120, 121,11, 33, 9 C: .word 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 .text .globl main main: la $s0, A la $s1, B la $s2, C li $s3, 10 li $t0, 0 # using $t0 as i LOOP: sll $t4, $t0, 2 # $t4 = i * 4 add $t5, $t4,$s0 # $t5 will have the address of A[i] lw $t1, 0($t5) # $t1 has A[i] add $t6, $t4,$s1 # $t6 will have the address of B[i] lw $t2, 0($t6) # $t2 has B[i] slt $t5, $t1, $t2 # set $t5 to be 1 if A[i] < B[i] beq $t5, $0, L1 # if $t5 == 0, goto L1. in this case, A[i] >= B[i] ori $t8, $t1, 0 # setting $t8 to be A[i] j L2 # always remember to jump in an if else! L1: ori $t8, $t2, 0 # setting $t8 to be B[i] L2: add $t6, $t4, $s2 # now $t6 has the address of C[i] sw $t8, 0($t6) # now C[i] has the minimum of A[i] and B[i] addi $t0, $t0, 1 # i ++ bne $t0, $s3, LOOP # go back if not yet 10 times done: li $v0,10 syscall

SPIM Run codes with SPIM. SPIM is a simulator. Use any editor to write the source file, save it as an .asm file. Run PCSpim, load the source file. F10 to step through the code. Monitor how the registers change. F5 to run the code Can set breakpoints for debugging SPIM can be downloaded at http://pages.cs.wisc.edu/~larus/spim.html Lots of good references online, like https://www.cs.tcd.ie/~waldroj/itral/spim_ref.html

Representing Instructions in Computers 4/22/2019 Representing Instructions in Computers Note that computers only have 0’s and 1’s Before we can load MIPS instructions into memory, they need to be translated into machine instructions, which consist of only 0’s and 1’s In other words, we need to encode or represent instructions The symbolic representation of machine instructions is called assembly language The binary representation of instructions is called machine language A sequence of instructions in binary form is called machine code 4/22/2019 CDA3100 CDA3100

4/22/2019 Example 4/22/2019 CDA3100 CDA3100

MIPS Instruction Encoding Each MIPS instruction is exactly 32 bits R-type (register type) I-type (immediate type) J-type (jump type) op rs rt rd shamt funct op rs rt 16 bit address or constant op 26 bit address 4/22/2019 CDA3100

R-Type Encoding Encoding = 0x00622020 opcode rs rt rd shamt funct 1 31 opcode rs rt rd 26 25 21 20 16 15 11 10 6 5 shamt funct 1 add $4, $3, $2 Encoding = 0x00622020 4/22/2019 CDA3100

R-Type Encoding Encoding = opcode rs rt rd shamt funct 31 26 25 21 20 16 15 11 10 6 5 opcode rs rt rd shamt funct sub $s0, $t0, $t1 rt rs rd 31 26 25 21 20 16 15 11 10 6 5 opcode rs rt rd shamt funct Encoding = 4/22/2019 CDA3100

R-Type Encoding Encoding = 0x01098022 opcode rs rt rd shamt funct 31 26 25 21 20 16 15 11 10 6 5 opcode rs rt rd shamt funct sub $16, $8, $9 rt rs rd 31 26 25 21 20 16 15 11 10 6 5 1 1 1 1 1 1 1 opcode rs rt rd shamt funct 1 1 1 1 1 1 1 Encoding = 0x01098022 4/22/2019 CDA3100

I-type Encoding Encoding = 0x8C450BB8 opcode rs rt Immediate Value 31 opcode rs rt Immediate Value 26 25 21 20 16 15 lw $5, 3000($2) Immediate 1 Encoding = 0x8C450BB8 4/22/2019 CDA3100

I-type Encoding Encoding = opcode rs rt Immediate Value rt Immediate 4/22/2019 I-type Encoding 31 26 25 21 20 16 15 opcode rs rt Immediate Value rt Immediate sw $5, 3000($2) rs 31 26 25 21 20 16 15 opcode rs rt Immediate Value Encoding = 4/22/2019 CDA3100 CDA3100

I-type Encoding Encoding = 0xAC450BB8 opcode rs rt Immediate Value 31 opcode rs rt Immediate Value 26 25 21 20 16 15 sw $5, 3000($2) Immediate 1 Encoding = 0xAC450BB8 4/22/2019 CDA3100

I-type Encoding Encoding = opcode rs rt Immediate Value rt Immediate 4/22/2019 I-type Encoding 31 26 25 21 20 16 15 opcode rs rt Immediate Value rt Immediate addi $s0, $s0, 95 rs 31 26 25 21 20 16 15 opcode rs rt Immediate Value Encoding = 4/22/2019 CDA3100 CDA3100

I-type Encoding Encoding = 0x2210005F opcode rs rt Immediate Value rt 4/22/2019 I-type Encoding 31 26 25 21 20 16 15 opcode rs rt Immediate Value rt Immediate addi $s0, $s0, 95 rs 31 26 25 21 20 16 15 1 1 1 1 1 1 1 1 1 opcode rs rt Immediate Value 1 1 1 1 1 1 1 1 1 Encoding = 0x2210005F 4/22/2019 CDA3100 CDA3100

J-type Encoding Encoding = 0x0810001F opcode Jump Address Jump Address 31 26 25 opcode Jump Address Jump Address j 0x0040007c 0x0040007c: the address of the instruction to jump to. When encoding it, take the bit 2 to bit 27. 31 26 25 1 j 0x0040007c 1 1 1 1 1 1 opcode Jump Address 1 1 1 1 1 1 1 Encoding = 0x0810001F