Lecture 8. MIPS Instructions #2 – Memory Access (Load/Store) Instructions Prof. Taeweon Suh Computer Science Education Korea University 2010 R&E Computer.

Slides:



Advertisements
Similar presentations
Lecture 13: 10/8/2002CS170 Fall CS170 Computer Organization and Architecture I Ayman Abdel-Hamid Department of Computer Science Old Dominion University.
Advertisements

CS/COE0447 Computer Organization & Assembly Language
1 Lecture 3: Instruction Set Architecture ISA types, register usage, memory addressing, endian and alignment, quantitative evaluation.
INSTRUCTION SET ARCHITECTURES
CML CML CS 230: Computer Organization and Assembly Language Aviral Shrivastava Department of Computer Science and Engineering School of Computing and Informatics.
10/9: Lecture Topics Starting a Program Exercise 3.2 from H+P Review of Assembly Language RISC vs. CISC.
ELEN 468 Advanced Logic Design
CS3350B Computer Architecture Winter 2015 Lecture 4
COMP3221: Microprocessors and Embedded Systems Lecture 2: Instruction Set Architecture (ISA) Lecturer: Hui Wu Session.
331 W02.1Spring 05 Announcements  HW1 is due on this Friday  Appendix A (on CD) is very helpful to HW1.
Instruction Representation II (1) Fall 2007 Lecture 10: Instruction Representation II.
S. Barua – CPSC 440 CHAPTER 2 INSTRUCTIONS: LANGUAGE OF THE COMPUTER Goals – To get familiar with.
RISC Concepts, MIPS ISA and the Mini–MIPS project
ECE 4436ECE 5367 ISA I. ECE 4436ECE 5367 CPU = Seconds= Instructions x Cycles x Seconds Time Program Program Instruction Cycle CPU = Seconds= Instructions.
COMPUTER ARCHITECTURE & OPERATIONS I Instructor: Hao Ji.
CS 300 – Lecture 6 Intro to Computer Architecture / Assembly Language Instructions.
Lecture 1. Number Systems Prof. Taeweon Suh Computer Science Education Korea University ECM585 Special Topics in Computer Design.
ECM534 Advanced Computer Architecture
Instruction Set Architecture
Lecture 4. Miscellaneous Addressing Mode, Memory Map, Pointer, and ASCII Prof. Taeweon Suh Computer Science Education Korea University ECM534 Advanced.
Lecture Objectives: 1)Define the terms least significant bit and most significant bit. 2)Explain how unsigned integer numbers are represented in memory.
CS224 Fall 2011 Chap 2a Computer Organization CS224 Fall 2011 Chapter 2 a With thanks to M.J. Irwin, D. Patterson, and J. Hennessy for some lecture slide.
Lecture 7. Instructions and High-Level to Machine Code Prof. Taeweon Suh Computer Science Education Korea University 2010 R&E Computer System Education.
CSE378 Instr. encoding.1 Instruction encoding The ISA defines –The format of an instruction (syntax) –The meaning of the instruction (semantics) Format.
Lecture 9. MIPS Processor Design – Instruction Fetch Prof. Taeweon Suh Computer Science Education Korea University 2010 R&E Computer System Education &
Registers and MAL Lecture 12. The MAL Architecture MAL is a load/store architecture. MAL supports only those addressing modes supported by the MIPS RISC.
Lecture 8. MIPS Instructions #3 – Branch Instructions #1 Prof. Taeweon Suh Computer Science Education Korea University 2010 R&E Computer System Education.
CSCI 136 Lab 1: 135 Review.
1 Computer Architecture COSC 3430 Lecture 3: Instructions.
Lecture 4. MIPS Instructions #2 Memory Access (Load/Store) Instructions Prof. Taeweon Suh Computer Science Education Korea University ECM534 Advanced Computer.
Computer Organization and Architecture Instructions: Language of the Machine Hennessy Patterson 2/E chapter 3. Notes are available with photocopier 24.
CWRU EECS 3221 Language of the Machine EECS 322 Computer Architecture Instructor: Francis G. Wolff Case Western Reserve University.
Computer Organization 1 Instruction Fetch and Execute.
Assembly language: arithmetic and load/store instructions Ellen Spertus MCS 111 September 17, 2002.
Chapter 2 — Instructions: Language of the Computer — 1 Memory Operands Main memory used for composite data – Arrays, structures, dynamic data To apply.
DR. SIMING LIU SPRING 2016 COMPUTER SCIENCE AND ENGINEERING UNIVERSITY OF NEVADA, RENO Session 7, 8 Instruction Set Architecture.
Arrays in MIPS Assembly Computer Organization and Assembly Language: Module 6.
Address alignment When a word (4-bytes) is loaded or stored the memory address must be a multiple of four. This is called an alignment restriction. Addresses.
Memory Access Instructions Load and Store Addressing Modes Memory Addressing. Base addressing mode. Load byte and store byte: lb, lbu, sb Address alignment.
MIPS Arithmetic is 32 bits
Computer Architecture & Operations I
Computer Architecture & Operations I
MIPS Assembly.
Memory Access Instructions
Lecture 6: Assembly Programs
Morgan Kaufmann Publishers
Instructions: Language of the Computer
COMP211 Computer Logic Design Lecture 1. Number Systems
ELEN 468 Advanced Logic Design
RISC Concepts, MIPS ISA Logic Design Tutorial 8.
Lecture 4: MIPS Instruction Set
CSCI206 - Computer Organization & Programming
The University of Adelaide, School of Computer Science
MIPS Instruction Encoding
ECE232: Hardware Organization and Design
MIPS Instruction Encoding
Chapter 2 Instructions: Language of the Computer
Instruction encoding The ISA defines Format = Encoding
Computer Instructions
Computer Architecture
Lecture 06 Programming language.
Instruction encoding The ISA defines Format = Encoding
UCSD ECE 111 Prof. Farinaz Koushanfar Fall 2018
Instruction encoding The ISA defines Format = Encoding
Introduction to Microprocessor Programming
COMS 361 Computer Organization
Instruction encoding The ISA defines Format = Encoding
CS352H Computer Systems Architecture
Presentation transcript:

Lecture 8. MIPS Instructions #2 – Memory Access (Load/Store) Instructions Prof. Taeweon Suh Computer Science Education Korea University 2010 R&E Computer System Education & Research

Korea Univ Why Should CPU Access Memory? 2 Memory (DDR) CPU North Bridge South Bridge Main Memory (DDR) FSB (Front-Side Bus) DMI (Direct Media I/F) CPU Hello World Binary (machine code) C compiler (machine code) “Hello World” Source code in C Address Bus Data Bus Initially, everything (your code and data) is stored in main memory CPU should access (read/write) main memory to execute your program So, 2 purposes  Instruction read: CPU reads instructions from memory  Data read/write: CPU reads data from memory and writes data to memory

Korea Univ Instruction Access (Read) How does CPU access (read) instructions from main memory?  MIPS has a 32-bit register called PC (program counter) inside the CPU PC is initialized with a predefined address at reset Then, PC gets changed as each instruction is executed  Every CPU has a register that keeps track of the current instruction address in execution Many CPUs use the same term (PC) One exception is x86, where the term IP (instruction pointer) is used to track the current instruction address. 3

Korea Univ Instruction Access & Execution Illustration 4 Memory CPU addv0,3 swv0,8(s8) liv0,9 swv0,4(s8) lwv1,8(s8) lwv0,4(s8) nop adduv0,v1,v0 swv0,0(s8) Address Bus Data Bus 0x0020 0x001C 0x0018 0x0014 0x0010 0x000C 0x0008 0x0004 0x0000 Byte address PC 0x0000 swv0,0(s8) 0x0000 0x0004 adduv0,v1,v0 0x00040x0008 nop

Korea Univ Data Read/Write As mentioned, everything (your code and data) is stored in main memory  You define data to be used in your code Example: int a, b, c;  You sometimes define complex data structures such as arrays and structs Example: int dummy [100];  These data can contain many more data elements than registers can accommodate in CPU CPU keeps only a small amount of data in registers on the fly Thus, MIPS (and all other CPUs) must provide instructions that transfer data between memory and registers  Such instructions are called data transfer instructions  To access data in memory, the instruction must supply the memory address 5

Korea Univ Address Bus 0x0000 Data Transfer Illustration 6 CPU (MIPS) $zero $at $v0 $v1 $fp $ra … 32 bits Registers R3 + Memory Data Bus add v0,v1,v0 lw v1, 8(s8) lw v0, 4(s8) 0x x PC 0x0000 0x0004 0x0018 0x0014 0x0008 0x0004 0x0000 lw v0, 4(s8) lw v1, 8(s8) add v0,v1,v0 0x0014 0x x x0004 0x0018 0x0008 0x x x

Korea Univ Word Word is a term for the natural unit of data used by a particular computer design  A word is simply a fixed-sized group of bits that are handled together by the machine The number of bits in a word is an important characteristic of a computer architecture  The size of a word is reflected in many aspects of a computer's structure and operation  The majority of the registers in the computer are usually word-sized Modern computers usually have a word size of 32, or 64 bits  The word size of MIPS is 32 bits (4 Bytes) 7

Korea Univ Memory Address Byte-address 8 Word-address Byte address in hex 0x0000 0x0001 0x0002 0x0003 Main Memory (64KB) Byte 0x0004 0x0005 0x0006 0x0007 0x0008 0x0009 0x000A 0x000B 0x000C …… 0x0000 Main Memory (64KB) Word (4 Bytes) 0x0004 0x0008 0x000C …… Byte address in hex Word (4 Bytes) Word (4 Bytes) Word address in hex 0x0000 0x0001 0x0002 0x0003

Korea Univ MIPS Memory Access Instruction - lw lw instruction reads a word (32-bit) from memory and loads into a register Instruction format (I format) lw rt, address Example: lw $t0, 24($s3) # load (read) word from memory # $t0 <= [$s3 + 24] 9 opcodersrtimmediate MIPS architect defines the opcode NameRegister Number $zero0 $at1 $v0 - $v12-3 $a0 - $a34-7 $t0 - $t78-15 $s0 - $s $t8 - $t $gp28 $sp29 $fp30 $ra binary hexadecimal0x8E

Korea Univ MIPS Memory Access Instruction – lw (Cont) lw $t0, 24($s3) #load (read) word from memory # $t0 <= [$s3 + 24] 10 Byte address in hex 0x x x x x7fff ffff $s3 0x Main Memory (2GB) // 24 = 0x // $s3 = 0x Assume that $s3 has 0x $s = 0x ac 0x120040ac $t0 0x120040ad 0x120040ae 0x120040af = 0x120040ac CPU Address Bus Data Bus 0x120040ac 0xAABBCCDD

Korea Univ MIPS Memory Access Instruction – lw (Cont) Instruction format (I format) The memory address (32 bit address) is formed by adding the contents of the base address register to the offset value  The immediate specified in an instruction is a 16-bit 2’s complement number in the range [-32768, 32767] 11 opcodersrtimmediate base + ? base Main Memory

Korea Univ MIPS Memory Access Instruction - sw sw instruction stores (writes) a word (32-bit) from register to main memory Instruction format (I format) sw rt, address Example: sw $t2, 8($s3) # store(write) word to memory # [$s3 + 8] <= $t2 12 opcodersrtimmediate MIPS architect defines the opcode NameRegister Number $zero0 $at1 $v0 - $v12-3 $a0 - $a34-7 $t0 - $t78-15 $s0 - $s $t8 - $t $gp28 $sp29 $fp30 $ra binary hexadecimal0xAE6A

Korea Univ Test-run MIPS Assembler Check out the class web for instructions on how to build MIPS cross-compiler on Linux Test-generate binary from the MIPS assembly program with assembler 13 add$t0, $s1, $s2 # $t0 <= $s1 + $s2 sub$t2, $s3, $s4 # $t2 <= $s3 - $s4 lw$t0, 24($s3) #load (read) word from memory # $t0 <= [$s3 + 24] sw $t2, 8($s3) # store(write) word to memory # [$s3 + 8] <= $t2 0x x x8E xAE6A 0008 MIPS CPU Memory (DDR) Address Bus Data Bus 0x x x8E xAE6A 0008

Korea Univ Loading and Storing Bytes 14 Since bytes (8 bits) are so useful, most architectures provide capability of addressing and accessing individual bytes in memory  Alignment restriction - the memory address of a word must be on natural word boundaries (a multiple of 4 in MIPS-32) Let’s go over byte-addressable instructions  lb, sb

Korea Univ MIPS Memory Access Instruction - lb lb instruction reads a byte (8-bit) from memory and loads into a register Instruction format (I format) lb rt, address Example: lb $t0, 1($s3) # load (read) byte from memory # $t0 <= [$s3 + 1] 15 opcodersrtimmediate NameRegister Number $zero0 $at1 $v0 - $v12-3 $a0 - $a34-7 $t0 - $t78-15 $s0 - $s $t8 - $t $gp28 $sp29 $fp30 $ra binary hexadecimal0x

Korea Univ Where to Loaded and How? 16 lb $t0, 1($s3) # load (read) byte from memory # $t0 <= [$s3 + 1] Byte is loaded into the LSB (Least Significant Byte) of the register $t0 and sign-extended 1 Byte MSBLSB bit bit (4 bytes) bit 0 register $t0 Sign-extended If you don’t want to have it sign-extended, use the lbu (Load byte unsigned) instruction lbu $t0, 1($s3) # load (read) byte from memory # $t0 <= [$s3 + 1] opcodersrtimmediate361981

Korea Univ MIPS Memory Access Instruction - sb sb instruction writes a byte (8-bit) to memory from a register Instruction format (I format) sb rt, address Example: sb $t0, -7($s3) # store (write) byte to memory # $t0 <= [$s3 + (-7)] 17 opcodersrtimmediate NameRegister Number $zero0 $at1 $v0 - $v12-3 $a0 - $a34-7 $t0 - $t78-15 $s0 - $s $t8 - $t $gp28 $sp29 $fp30 $ra binary hexadecimal0xA268 FFF

Korea Univ Where to Stored and from Where? sb takes the byte from LSB of a register and write it to a byte in memory  It does not change the other bits in a word in memory (not sign-extension!) 18

Korea Univ Endianness Byte addressable memories are organized in a big-endian or little- endian fashion  In both formats, The most significant byte (MSB) is on the left The least significant byte (LSB) is on the right Endian  In big-endian machines, bytes are numbered starting with byte 0 at MSB Examples: IBM 360/370, Motorola 68k, MIPS, Sparc, HP PA  In little-endian machines, bytes are numbered starting with byte 0 at LSB Examples: Intel x86, DEC Vax, DEC Alpha (Windows NT) The choice of Endianness is completely arbitrary, but leads to hassles when sharing data between big-endian and little-endian computers Why so messy?  Blame early computer designers!!! 19 byte 3 byte 2 byte 1 byte 0 little endian byte 0 byte 1 byte 2 byte 3 big endian MSBLSB Word (4 bytes)

Korea Univ Endianness Example Suppose that $s0 initially contains 0x After running the following program on a big-endian machine, what value does $s0 contain? sw $s0, 0($0) # [0 + $0] <= $s0 lb $s0, 1($0) # $s0 <= [1 + $0] 20 0x890x670x450x23 How about in a little-endian machine? MSBLSB byte 0 byte 1 byte 2 byte 3 big endian Memory 0x890x670x450x23 MSBLSB Byte 3 byte 2 byte 1 byte 0 Little endian Memory

Korea Univ Confused? See this… 21 Byte address in hex 0x0000 0x0001 0x0002 0x0003 Main Memory (64KB) Byte 0x0004 0x0005 0x0006 0x0007 0x0008 0x0009 0x000A 0x000B 0x000C …… Suppose that $s0 initially contains 0x sw $s0, 0($0) # [0 + $0] <= $s0 big endian Little endian 0x23 0x45 0x67 0x89 0x67 0x45 0x23 After sw instruction,

Korea Univ How to load a 32-bit constant? 22 How to load a 32-bit constant into a register? Use lw instruction Use 2 instructions ( lui, ori ) lui: "load upper immediate" instruction ori: Then must get the lower order bits right Example: lui $t0, 0x5678 ori $t0, $t0, 0x1234 0x x5678 $t0 0x12340x5678 $t0