1 / 16

Accessing Memory Chapter 5

Accessing Memory Chapter 5. Lecture notes for SPARC Architecture, Assembly Language Programming and C, Richard P. Paul by Anu G. Bourgeois. Memory. Addresses are 32 bits wide Therefore, 2 32 bytes in memory Each location is numbered consecutively Memory data types

bernad
Download Presentation

Accessing Memory Chapter 5

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


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

  2. Memory • Addresses are 32 bits wide • Therefore, 232 bytes in memory • Each location is numbered consecutively • Memory data types • Byte = 1 byte Halfword = 2 bytes • Word = 4 bytes Doubleword = 8 bytes

  3. Data types • All memory references must be aligned • x byte quantities must begin in an address divisible by x

  4. Memory Allocation input .section “.data” input: .word 0x12345678 limit: .half 0x9a prompt: .asciz “Hello!” limit prompt

  5. Memory Allocation .section “.data” input: .word 0x12345678 limit: .half 0x9a prompt: .asciz “Hello!” 300 – divisible by 4 input takes up 4 byte locations

  6. Memory Allocation .section “.data” input: .word0x12345678 limit: .half 0x9a prompt: .asciz “Hello!” 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: .word0x12345678 limit: .half 0x9a prompt: .asciz “Hello!” 306 – divisible by 1 Each element of prompt takes up 1 byte location

  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. Load Instructions

  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. Store Instructions Why don’t we have all the same options as we did for the load instructions?

  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. 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 • Lower byte Lower address • Reference is to the lowest address • Memory references must be byte aligned

  15. Data Section .section “.data” first: .word 0x03, 0x0ef321 second: .byte 0x5c .align 2 third: .half 0x987, 0x7e string: .asciz “done”

  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

More Related