No, you can't access one process' address from another process. That's what your OS is "protected" against! Look into "virtual memory"...
In short, the string may exist at 0x08048520 in your C program - that's the "virtual address". It exists at some location in actual physical memory - but that isn't the address.
Your asm program, when it's running, starts at 0x8048080 virtual address (if it were longer, it would encompass 0x8048520) - same virtual address, pretty much, as your C program. It, too, exists at some location in physical memory - but not the same place as your C program, obviously(?).
This "virtual memory" magic is accomplished by "paging"... AOD must have a tutorial on it. In short, the virtual address acts as an index into "page tables" which locate the actual physical address. This mechanism can also make memory "read only"...
As it happens, 0x8048520 is in "read only" memory. "Your" memory, as created by the paging mechanism when the program loads, starts at 0x8048000 - first there's a header, and your program starts at 0x8048080 (plus or minus, depending on the length of the header). If your little asm program had a .data (readable/writeable) section, it would start on the next page - 0x8049xxx, the xxx being the length of your code (plus any data you've put in the code section) plus some alignment padding. Here, you can write - up to 0x8049FFF (or more, in a bigger program). This is the "break", and you'll segfault if you go beyond it. You also get a stack (read-write, of course), starting at 0xC0000000 (in both your C and asm programs!) and working downward - 0xBFFFxxxx when we get it, depending on how many environment variables and command line parameters you've got (they're on the stack). The paging mechanism expands the stack (downward) as needed, so you won't run out of stack space for a long, long, time.
Your C program has apparently put your "const" string in a "section .rdonly" - on the same read-only page as your code, so you wouldn't be able to write to it even from the same process... I notice gcc has changed your "printf" to a "puts" - uppity little rascal, ain't it?
So that's why you're getting the segfault, and why you can't access the stack of another program. Look on the bright side - other programs can't scribble on your memory, either!
Best,
Frank