DOC PREVIEW
UW CSE 378 - Encoding

This preview shows page 1-2-19-20 out of 20 pages.

Save
View full document
View full document
Premium Document
Do you want full access? Go Premium and unlock all 20 pages.
Access to all documents
Download any document
Ad free experience
View full document
Premium Document
Do you want full access? Go Premium and unlock all 20 pages.
Access to all documents
Download any document
Ad free experience
View full document
Premium Document
Do you want full access? Go Premium and unlock all 20 pages.
Access to all documents
Download any document
Ad free experience
View full document
Premium Document
Do you want full access? Go Premium and unlock all 20 pages.
Access to all documents
Download any document
Ad free experience
Premium Document
Do you want full access? Go Premium and unlock all 20 pages.
Access to all documents
Download any document
Ad free experience

Unformatted text preview:

10/05/2005CSE378 Instr. encoding.1Instruction encoding•The ISA defines–The format of an instruction (syntax)–The meaning of the instruction (semantics)•Format = Encoding –Each instruction format has various fields–Opcode field gives the semantics (Add, Load etc …)–Operand fields (rs,rt,rd,immed) say where to find inputs (registers, constants) and where to store the output10/05/2005CSE378 Instr. encoding.2MIPS Instruction encoding•MIPS = RISC hence–Few (3+) instruction formats•R in RISC also stands for “Regular”–All instructions of the same length (32-bits = 4 bytes)–Formats are consistent with each other•Opcode always at the same place (6 most significant bits)•rd and rs always at the same place •immed always at the same place etc.10/05/2005CSE378 Instr. encoding.3I-type (Immediate) Instruction Format•An instruction with the immediate format has the SPIM formOpcode Operands CommentAddi $4,$7,78 #$4 = $7 + 78•Encoding of the 32 bits–Opcode is 6 bits–Each register “name” is 5 bits since there are 32 registers–That leaves 16 bits for the immediate constantopcode rs rt immediate6 5 5 1610/05/2005CSE378 Instr. encoding.4I-type Instruction Example Addi $a0,$12,33 # $a0 is also $4 = $12 +33 # Addi has opcode 08In binary: 0010 0001 1000 0100 0000 0000 0010 0001In hex: 21840021opcode rs rt immediate6 5 5 168 12 4 3310/05/2005CSE378 Instr. encoding.5Sign extension•Internally the ALU (adder) deals with 32-bit numbers•What happens to the 16-bit constant?–Extended to 32 bits•If the Opcode says “unsigned” (e.g., Addiu)–Fill upper 16 bits with 0’s•If the Opcode says “signed” (e.g., Addi)–Fill upper 16 bits with the msb of the 16 bit constant•i.e. fill with 0’s if the number is positive•i.e. fill with 1’s if the number is negative10/05/2005CSE378 Instr. encoding.6R-type (register) format•Arithmetic, Logical, and Compare instructions require encoding 3 registers.•Opcode (6 bits) + 3 registers (5x3 =15 bits) => 32 -21 = 11 “free” bits•Use 6 of these bits to expand the Opcode •Use 5 for the “shift” amount in shift instructionsOpc rs rt rd shft func10/05/2005CSE378 Instr. encoding.7R-type (Register) Instruction Format•Arithmetic, Logical, and Compare instructions require encoding 3 registers.•Opcode (6 bits) + 3 registers (5x3 =15 bits) => 32 -21 = 11 “free” bits•Use 6 of these bits to expand the Opcode•Use 5 for the “shift” amount in shift instructionsopcode rs rt rd shft funct6 5 5 5 5 610/05/2005CSE378 Instr. encoding.8R-type exampleSub $7,$8,$9Opc =0 & funct = 34rs rt rd 0 8 9 7 0 34Unused bits10/05/2005CSE378 Instr. encoding.9Load and Store instructions•MIPS = RISC = Load-Store architecture–Load: brings data from memory to a register–Store: brings data back to memory from a register•Each load-store instruction must specify–The unit of info to be transferred (byte, word etc. ) through the Opcode–The address in memory•A memory address is a 32-bit byte address•An instruction has only 32 bits so ….10/05/2005CSE378 Instr. encoding.10Addressing in Load/Store instructions•The address will be the sum–of a base register (register rs)–a 16-bit offset (or displacement) which will be in the immed field and is added (as a signed number) to the contents of the base register•Thus, one can address any byte within ± 32KB of the address pointed to by the contents of the base register.10/05/2005CSE378 Instr. encoding.11Examples of load-store instructions•Load word from memory: LW rt,rs,offset #rt = Memory[rs+offset]•Store word to memory: SW rt,rs,offset #Memory[rs+offset]=rt•For bytes (or half-words) only the lower byte (or half-word) of a register is addressable–For load you need to specify if data is sign-extended or notLB rt,rs,offset #rt =sign-ext( Memory[rs+offset])LBU rt,rs,offset #rt =zero-ext( Memory[rs+offset])SB rt,rs,offset #Memory[rs+offset]= least signif. #byte of rt10/05/2005CSE378 Instr. encoding.12Load-Store format•Need for –Opcode (6 bits)–Register destination (for Load) and source (for Store) : rt–Base register: rs–Offset (immed field)•Example LW $14,8($sp) #$14 loaded from top of #stack + 8 35 29 14 810/05/2005CSE378 Instr. encoding.13Loading small constants in a register•If the constant is small (i.e., can be encoded in 16 bits) use the immediate format with LI (Load Immediate) LI $14,8 #$14 = 8•But, there is no opcode for LI!•LI is a pseudoinstruction–The assembler creates it to help you–SPIM will recognize it and transform it into Addi (with sign-extension) or Ori (zero extended) Addi $14,$0,8 #$14 = $0+810/05/2005CSE378 Instr. encoding.14Loading large constants in a register•If the constant does not fit in 16 bits (e.g., an address)•Use a two-step process–LUI (load upper immediate) to load the upper 16 bits; it will zero out automatically the lower 16 bits–Use ORI for the lower 16 bits (but not LI, why?)•Example: Load constant 0x1B234567 in register $t0 LUI $t0,0x1B23 #note the use of hex constants ORI $t0,$t0,0x456710/05/2005CSE378 Instr. encoding.15How to address memory in assembly language•Problem: how do I put the base address in the right register and how do I compute the offset?•Method 1 (recommended). Let the assembler do it!! !! .data #define data sectionxyz: .word 1 #reserve room for 1 word at address xyz …….. #more data .text #define program section ….. # some lines of code lw $5, xyz # load contents of word at add. xyz in $5 •In fact the assembler generates: LW $5, offset ($gp) #$gp is register 2810/05/2005CSE378 Instr. encoding.16Generating addresses•Method 2. Use the pseudo-instruction LA (Load address) LA $6,xyz #$6 contains


View Full Document

UW CSE 378 - Encoding

Documents in this Course
Load more
Download Encoding
Our administrator received your request to download this document. We will send you the file to your email shortly.
Loading Unlocking...
Login

Join to view Encoding 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 Encoding 2 2 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?