Re: A89: dumb question


[Prev][Next][Index][Thread]

Re: A89: dumb question




 > thanks for clearing things up...
 >  ...more questions:  how do you know that foo is at an even location to begin 
 > with?  how do you know that (whatev) would not be an even address and that 
 > clr.whatev would not work?
 > 
 > does the compiler fix this?

There are directives to force a certain alignment for the next object.
For example, you want to create a byte object foo and a longword
object bar and you want bar to be aligned on a dividable-by-four
address, you would do something like this:

foo ds.b   1  ; This reserves a sigle byte storage
    align  4  ; Forces alignment to a multiple of 4
bar ds.l   1  ; Reserves a long, that is, 4 bytes of storage
baz ds.w   1  ; Reserves a 2-byte word

If we assume, that 'foo; happens to be at address 0x1000, your memory 
image will be like this:

foo -> 0x1000 
       0x1001 - 0x1003 are wasted
bar -> 0x1004 - 0x1007
baz -> 0x1008 - 0x1009

The actual directives depend on the assembler (not compiler) you
use; you have to consult with its manual. Often they have an 'even' 
directive, which is equivalent to align 2.

Regards,

Zoltan


References: