Segmentation fault protection: Difference between revisions

m
Line 24:
 
=={{header|68000 Assembly}}==
The closest thing the 68000 has to a segfault is an "alignment fault." <code>MOVE.W (An),Dn</code> or <code>MOVE.W (An),Dn</code> where <code>An</code> is any address register that contains an odd value will crash the CPU. More specifically, it will trigger one of the CPU's traps, forcing the program counter to jump to an error handler that is looked up from the trap table in low memory (on some machines such as the NEOGEO this just reboots the CPU. Note that byte-length commands are not subject to this aligment rule, which can lead to problems when working with structs that contain mixed data types. The programmer can avoid this very easily by either padding all their data to word length, use of the <code>EVEN</code> assembler directive after a sequence of byte-length data, or carefully arranging structs/unions asso followsthat all byte data is in pairs. An example is below:
 
<lang 68000devpac>
<lang 68000devpac>;as long as you arrange your structs so that byte-length data is in pairs you can avoid alignment problems
myStruct: ;by default your assembler will ensure that labels always point to even memory locations.
myStruct:
dc.b $20
dc.b $40
1,489

edits