Presentation is loading. Please wait.

Presentation is loading. Please wait.

Accessing Memory Chapter 5 Lecture notes for SPARC Architecture, Assembly Language Programming and C, Richard P. Paul by Anu G. Bourgeois.

Similar presentations


Presentation on theme: "Accessing Memory Chapter 5 Lecture notes for SPARC Architecture, Assembly Language Programming and C, Richard P. Paul by Anu G. Bourgeois."— Presentation transcript:

1 Accessing Memory Chapter 5 Lecture notes for SPARC Architecture, Assembly Language Programming and C, Richard P. Paul by Anu G. Bourgeois

2 2 Memory Addresses are 32 bits wide Therefore, 2 32 bytes in memory Each location is numbered consecutively Memory data types –Byte = 1 byteHalfword = 2 bytes –Word = 4 bytesDoubleword = 8 bytes

3 3 Data types C TypeSPARCBitsUnsignedSigned charbyte80, 255-128, 127 shorthalf160, 65,535-32,768, 32,767 int, longword320, 4.294x10 9  2.147 x 10 9 All memory references must be aligned x byte quantities must begin in an address divisible by x

4 Memory Allocation.section “.data” input:.word 0x12345678 limit:.half 0x9a prompt:.asciz “Hello!” Address (decimal) Data (hex) 299 30078 30156 30234 30312 3049a 30500 306‘H’ 307‘e’ 308‘l’ 309‘l’ 310‘o’ 311‘!’ 312 313 4 input limit prompt

5 Memory Allocation.section “.data” input:.word 0x12345678 limit:.half 0x9a prompt:.asciz “Hello!” Address (decimal) Data (hex) 299 30078 30156 30234 30312 3049a 30500 306‘H’ 307‘e’ 308‘l’ 309‘l’ 310‘o’ 311‘!’ 312 313 5 300 – divisible by 4 input takes up 4 byte locations

6 Memory Allocation.section “.data” input:.word 0x12345678 limit:.half 0x9a prompt:.asciz “Hello!” Address (decimal) Data (hex) 299 30078 30156 30234 30312 3049a 30500 306‘H’ 307‘e’ 308‘l’ 309‘l’ 310‘o’ 311‘!’ 312 313 6 304 – divisible by 2 limit takes up 2 byte locations Note: location 305 will have leading zeroes fill in the extra byte not specified in the data section

7 Memory Allocation.section “.data” input:.word 0x12345678 limit:.half 0x9a prompt:.asciz “Hello!” Address (decimal) Data (hex) 299 30078 30156 30234 30312 3049a 30500 306‘H’ 307‘e’ 308‘l’ 309‘l’ 310‘o’ 311‘!’ 312 313 7 306 – divisible by 1 Each element of prompt takes up 1 byte location

8 8 Addressing Variables Load and Store operations are the only instructions that reference memory Both instructions take two operands –One memory, and one register Can access memory using different data types (byte, half word, word, double word)

9 9 Load Instructions MnemonicOperation ldsb Load signed byte, propagate sign left in register ldub Load unsigned byte, clear high 24 bits of register ldsh Load signed halfword, propogate sign left in register lduh Load unsigned halfword, clear high 16 bits of register ld Load word ldd Load double, reg. # even, first 4 bytes into reg. n, next 4 into reg. n + 1

10 10 set input, %o0 ld [%o0], %o1 %o1 = 0x12345678 ldub [%o0 + 7], %o2 %o2 = ‘e’ ldsh [%o0 + 3], %o3 error ldsh [%o0 + 4], %o4 %o4 = 0x9a ldsb [%o0 + 4], %o5 %o5 = 0xffffff9a

11 11 Store Instructions MnemonicOperation stb Store low byte of register, bits 0-7, into memory sth Store low two bytes of register, bits 0-15 into memory st Store register std Store double, reg. # even, first 4 bytes from reg. n, next 4 from reg. n + 1 Why don’t we have all the same options as we did for the load instructions?

12 Address (decimal) Data (hex) 300 301 302 303 304 305 306 307 308 309 310 311 312 313 12 mov 300, %o0 mov 0x12345678, %o1 st %o1, [%o0] sth %o1, [%o0 + 6] sth %o1, [%o0 + 9] stb %o1, [%o0 + 13] 78 56 34 12 78 56 error 78

13 Address (decimal) Data (hex) 300 301 302 303 304 305 306 307 308 309 310 311 312 313 13 mov 0x9abcdef0, %o2 mov 0x87654321, %o3 std %o2, [%o0 + 4] 78 56 34 12 f0 de bc 9a 21 43 65 87

14 Rules to Remember 1.Lower byte Lower address 2.Reference is to the lowest address 3.Memory references must be byte aligned 14

15 Data Section.section “.data” first:.word 0x03, 0x0ef321 second:.byte 0x5c.align 2 third:.half 0x987, 0x7e string:.asciz “done” PointerAddressdata first 40003 40100 40200 40300 40421 405f3 4060e 40700 second4085c 409undef third41087 41109 4127e 41300 string414‘d’ 415‘o’ 416‘n’ 417‘e’ 4180 419

16 Allocating Space.skip is a psedo-op that will provide space without any initialization my_array:.skip 4*100 Provides space for a 100-word unintialized array 16


Download ppt "Accessing Memory Chapter 5 Lecture notes for SPARC Architecture, Assembly Language Programming and C, Richard P. Paul by Anu G. Bourgeois."

Similar presentations


Ads by Google