Presentation is loading. Please wait.

Presentation is loading. Please wait.

Character Data and 32-bit Constants (Lecture #20) ECE 445 – Computer Organization The slides included herein were taken from the materials accompanying.

Similar presentations


Presentation on theme: "Character Data and 32-bit Constants (Lecture #20) ECE 445 – Computer Organization The slides included herein were taken from the materials accompanying."— Presentation transcript:

1 Character Data and 32-bit Constants (Lecture #20) ECE 445 – Computer Organization The slides included herein were taken from the materials accompanying Computer Organization and Design, 4 th Edition, by Patterson and Hennessey, and were used with permission from Morgan Kaufmann Publishers.

2 Fall 2010ECE 445 - Computer Organization2 Material to be covered... Chapter 2: Sections 9 – 10

3 Fall 2010ECE 445 - Computer Organization3 Character Data Byte-encoded character sets  ASCII: 128 characters 95 graphic, 33 control  Latin-1: 256 characters ASCII, +96 more graphic characters Unicode: 32-bit character set  Used in Java, C++ wide characters, …  Most of the world’s alphabets, plus symbols  UTF-8, UTF-16: variable-length encodings §2.9 Communicating with People

4 Fall 2010ECE 445 - Computer Organization4 Bytes and Half-words Most computers today use 8-bit bytes to represent characters.  ASCII represents 128 characters (using 7 bits) In addition, there exists 16- and 32-bit representations for characters.  UTF-16 (16-bit Unicode) can be used to represent a much larger character set. The MIPS Architecture includes instructions to move bytes (8 bits) and half-words (16 bits).

5 Fall 2010ECE 445 - Computer Organization5 Byte/Halfword Operations Could use bitwise operations MIPS byte/halfword load/store  String processing is a common case lb rt, offset(rs) lh rt, offset(rs)  Sign extend to 32 bits in rt lbu rt, offset(rs) lhu rt, offset(rs)  Zero extend to 32 bits in rt sb rt, offset(rs) sh rt, offset(rs)  Store just rightmost byte/halfword

6 Fall 2010ECE 445 - Computer Organization6 Bytes and Half-words The byte and half-word instructions are: lb rt, offset(rs)Load Byte lh rt, offset(rs)Load Half-word lbu rt, offset(rs)Load Byte Unsigned lhu rt, offset(rs)Load Half-word Unsigned sb rt, offset(rs)Store Byte sh rt, offset(rs) Store Half-word Sign extends to 32-bits in rt Zero extends to 32-bits in rt Stores rightmost byte or half-word

7 Fall 2010ECE 445 - Computer Organization7 Bytes and Half-words String processing is a common application for which byte and half-word operations are used.

8 Fall 2010ECE 445 - Computer Organization8 String Copy Example C code:  Null-terminated string void strcpy (char x[], char y[]) { int i; i = 0; while ((x[i]=y[i])!='\0') i += 1; }  address of x → $a0, address of y → $a1  Value of i → $s0

9 Fall 2010ECE 445 - Computer Organization9 String Copy Example MIPS code: strcpy: addi $sp, $sp, -4 # adjust stack for 1 item sw $s0, 0($sp) # save $s0 add $s0, $zero, $zero # i = 0 L1: add $t1, $s0, $a1 # addr of y[i] in $t1 lbu $t2, 0($t1) # $t2 = y[i] add $t3, $s0, $a0 # addr of x[i] in $t3 sb $t2, 0($t3) # x[i] = y[i] beq $t2, $zero, L2 # exit loop if y[i] == 0 addi $s0, $s0, 1 # i = i + 1 j L1 # next iteration of loop L2: lw $s0, 0($sp) # restore saved $s0 addi $sp, $sp, 4 # pop 1 item from stack jr $ra # and return

10 Fall 2010ECE 445 - Computer Organization10 The String Copy Function MIPS code: strcpy: addi $sp, $sp, -4 # adjust stack for 1 item sw $s0, 0($sp) # save $s0 add $s0, $zero, $zero # i = 0 L1: add $t1, $s0, $a1 # addr of y[i] in $t1 lbu $t2, 0($t1) # $t2 = y[i] add $t3, $s0, $a0 # addr of x[i] in $t3 sb $t2, 0($t3) # x[i] = y[i] beq $t2, $zero, L2 # exit loop if y[i] == 0 addi $s0, $s0, 1 # i = i + 1 j L1 # next iteration of loop L2: lw $s0, 0($sp) # restore saved $s0 addi $sp, $sp, 4 # pop 1 item from stack jr $ra # and return Push $s0 onto the stack

11 Fall 2010ECE 445 - Computer Organization11 The String Copy Function MIPS code: strcpy: addi $sp, $sp, -4 # adjust stack for 1 item sw $s0, 0($sp) # save $s0 add $s0, $zero, $zero # i = 0 L1: add $t1, $s0, $a1 # addr of y[i] in $t1 lbu $t2, 0($t1) # $t2 = y[i] add $t3, $s0, $a0 # addr of x[i] in $t3 sb $t2, 0($t3) # x[i] = y[i] beq $t2, $zero, L2 # exit loop if y[i] == 0 addi $s0, $s0, 1 # i = i + 1 j L1 # next iteration of loop L2: lw $s0, 0($sp) # restore saved $s0 addi $sp, $sp, 4 # pop 1 item from stack jr $ra # and return Initialize $s0

12 Fall 2010ECE 445 - Computer Organization12 The String Copy Function MIPS code: strcpy: addi $sp, $sp, -4 # adjust stack for 1 item sw $s0, 0($sp) # save $s0 add $s0, $zero, $zero # i = 0 L1: add $t1, $s0, $a1 # addr of y[i] in $t1 lbu $t2, 0($t1) # $t2 = y[i] add $t3, $s0, $a0 # addr of x[i] in $t3 sb $t2, 0($t3) # x[i] = y[i] beq $t2, $zero, L2 # exit loop if y[i] == 0 addi $s0, $s0, 1 # i = i + 1 j L1 # next iteration of loop L2: lw $s0, 0($sp) # restore saved $s0 addi $sp, $sp, 4 # pop 1 item from stack jr $ra # and return Assigns the address of the i th element of y to $t1

13 Fall 2010ECE 445 - Computer Organization13 The String Copy Function MIPS code: strcpy: addi $sp, $sp, -4 # adjust stack for 1 item sw $s0, 0($sp) # save $s0 add $s0, $zero, $zero # i = 0 L1: add $t1, $s0, $a1 # addr of y[i] in $t1 lbu $t2, 0($t1) # $t2 = y[i] add $t3, $s0, $a0 # addr of x[i] in $t3 sb $t2, 0($t3) # x[i] = y[i] beq $t2, $zero, L2 # exit loop if y[i] == 0 addi $s0, $s0, 1 # i = i + 1 j L1 # next iteration of loop L2: lw $s0, 0($sp) # restore saved $s0 addi $sp, $sp, 4 # pop 1 item from stack jr $ra # and return Loads the character in the i th element of y into $t2

14 Fall 2010ECE 445 - Computer Organization14 The String Copy Function MIPS code: strcpy: addi $sp, $sp, -4 # adjust stack for 1 item sw $s0, 0($sp) # save $s0 add $s0, $zero, $zero # i = 0 L1: add $t1, $s0, $a1 # addr of y[i] in $t1 lbu $t2, 0($t1) # $t2 = y[i] add $t3, $s0, $a0 # addr of x[i] in $t3 sb $t2, 0($t3) # x[i] = y[i] beq $t2, $zero, L2 # exit loop if y[i] == 0 addi $s0, $s0, 1 # i = i + 1 j L1 # next iteration of loop L2: lw $s0, 0($sp) # restore saved $s0 addi $sp, $sp, 4 # pop 1 item from stack jr $ra # and return Assigns the address of the i th element of x to $t3

15 Fall 2010ECE 445 - Computer Organization15 The String Copy Function MIPS code: strcpy: addi $sp, $sp, -4 # adjust stack for 1 item sw $s0, 0($sp) # save $s0 add $s0, $zero, $zero # i = 0 L1: add $t1, $s0, $a1 # addr of y[i] in $t1 lbu $t2, 0($t1) # $t2 = y[i] add $t3, $s0, $a0 # addr of x[i] in $t3 sb $t2, 0($t3) # x[i] = y[i] beq $t2, $zero, L2 # exit loop if y[i] == 0 addi $s0, $s0, 1 # i = i + 1 j L1 # next iteration of loop L2: lw $s0, 0($sp) # restore saved $s0 addi $sp, $sp, 4 # pop 1 item from stack jr $ra # and return Copies the character in the i th element of y into the i th element of x.

16 Fall 2010ECE 445 - Computer Organization16 The String Copy Function MIPS code: strcpy: addi $sp, $sp, -4 # adjust stack for 1 item sw $s0, 0($sp) # save $s0 add $s0, $zero, $zero # i = 0 L1: add $t1, $s0, $a1 # addr of y[i] in $t1 lbu $t2, 0($t1) # $t2 = y[i] add $t3, $s0, $a0 # addr of x[i] in $t3 sb $t2, 0($t3) # x[i] = y[i] beq $t2, $zero, L2 # exit loop if y[i] == 0 addi $s0, $s0, 1 # i = i + 1 j L1 # next iteration of loop L2: lw $s0, 0($sp) # restore saved $s0 addi $sp, $sp, 4 # pop 1 item from stack jr $ra # and return Exit loop if the character is 0 (i.e. the NULL character)

17 Fall 2010ECE 445 - Computer Organization17 The String Copy Function MIPS code: strcpy: addi $sp, $sp, -4 # adjust stack for 1 item sw $s0, 0($sp) # save $s0 add $s0, $zero, $zero # i = 0 L1: add $t1, $s0, $a1 # addr of y[i] in $t1 lbu $t2, 0($t1) # $t2 = y[i] add $t3, $s0, $a0 # addr of x[i] in $t3 sb $t2, 0($t3) # x[i] = y[i] beq $t2, $zero, L2 # exit loop if y[i] == 0 addi $s0, $s0, 1 # i = i + 1 j L1 # next iteration of loop L2: lw $s0, 0($sp) # restore saved $s0 addi $sp, $sp, 4 # pop 1 item from stack jr $ra # and return If the character is not 0, increment the loop count (i), and...

18 Fall 2010ECE 445 - Computer Organization18 The String Copy Function MIPS code: strcpy: addi $sp, $sp, -4 # adjust stack for 1 item sw $s0, 0($sp) # save $s0 add $s0, $zero, $zero # i = 0 L1: add $t1, $s0, $a1 # addr of y[i] in $t1 lbu $t2, 0($t1) # $t2 = y[i] add $t3, $s0, $a0 # addr of x[i] in $t3 sb $t2, 0($t3) # x[i] = y[i] beq $t2, $zero, L2 # exit loop if y[i] == 0 addi $s0, $s0, 1 # i = i + 1 j L1 # next iteration of loop L2: lw $s0, 0($sp) # restore saved $s0 addi $sp, $sp, 4 # pop 1 item from stack jr $ra # and return … jump to the beginning of the loop.

19 Fall 2010ECE 445 - Computer Organization19 The String Copy Function MIPS code: strcpy: addi $sp, $sp, -4 # adjust stack for 1 item sw $s0, 0($sp) # save $s0 add $s0, $zero, $zero # i = 0 L1: add $t1, $s0, $a1 # addr of y[i] in $t1 lbu $t2, 0($t1) # $t2 = y[i] add $t3, $s0, $a0 # addr of x[i] in $t3 sb $t2, 0($t3) # x[i] = y[i] beq $t2, $zero, L2 # exit loop if y[i] == 0 addi $s0, $s0, 1 # i = i + 1 j L1 # next iteration of loop L2: lw $s0, 0($sp) # restore saved $s0 addi $sp, $sp, 4 # pop 1 item from stack jr $ra # and return After exiting the loop, pop $s0 off of the stack and...

20 Fall 2010ECE 445 - Computer Organization20 The String Copy Function MIPS code: strcpy: addi $sp, $sp, -4 # adjust stack for 1 item sw $s0, 0($sp) # save $s0 add $s0, $zero, $zero # i = 0 L1: add $t1, $s0, $a1 # addr of y[i] in $t1 lbu $t2, 0($t1) # $t2 = y[i] add $t3, $s0, $a0 # addr of x[i] in $t3 sb $t2, 0($t3) # x[i] = y[i] beq $t2, $zero, L2 # exit loop if y[i] == 0 addi $s0, $s0, 1 # i = i + 1 j L1 # next iteration of loop L2: lw $s0, 0($sp) # restore saved $s0 addi $sp, $sp, 4 # pop 1 item from stack jr $ra # and return … return to the calling procedure.

21 Fall 2010ECE 445 - Computer Organization21 0000 0000 0111 1101 0000 0000 0000 0000 32-bit Constants Most constants are small  16-bit immediate is sufficient For the occasional 32-bit constant lui rt, constant  Copies 16-bit constant to left 16 bits of rt  Clears right 16 bits of rt to 0 lhi $s0, 61 0000 0000 0111 1101 0000 1001 0000 0000 ori $s0, $s0, 2304 §2.10 MIPS Addressing for 32-Bit Immediates and Addresses

22 Fall 2010ECE 445 - Computer Organization22 32-bit Immediate Operands Most constant values are small  As such, 16-bit Immediate values are sufficient However, there are occasions for which larger constant values are required  In such cases, 32-bit Immediate values are used Given that the immediate field in an I-Format instruction is only 16 bits wide, how do we load a 32-bit constant into a register?

23 Fall 2010ECE 445 - Computer Organization23 32-bit Immediate Operands To load a 32-bit immediate value into a register:  First, load the upper 2 bytes of the register Using the Load Upper Immediate (lui) instruction  Then, load the lower 2 bytes of the register Using the Or Immediate (ori) instruction

24 Fall 2010ECE 445 - Computer Organization24 32-bit Immediate Operands For example, load the following 32-bit constant into register $s0: 0000 0000 0011 1101 0000 1001 0000 0000 612304 0000 0000 0011 1101 0000 0000 0000 0000 lui $s0, 61 0000 0000 0011 1101 0000 1001 0000 0000 ori $s0, $s0, 2304 Loads the upper 16 bits of register $s0 Clears the lower 16 bits of register $s0 Adds the lower 16 bits to register $s0

25 Fall 2010ECE 445 - Computer Organization25 Questions?


Download ppt "Character Data and 32-bit Constants (Lecture #20) ECE 445 – Computer Organization The slides included herein were taken from the materials accompanying."

Similar presentations


Ads by Google