First of all EVEN is exactly the same as ALIGN 2. The ALIGN directive 'aligns' the Location Pointer to the next integer multible of the operand given. This means that the next data item, instruction etc is arranged so that it lies on an even memory boundry. Masm (Or tasm) fill in space to get this boundry:
00401000 00 BYTE 0h 00401001 00000000000000 ALIGN 8 00401008 0101 WORD 0101h
This technique improves processor performace in reading/writing the memory location due to reasons right down basic hardware on any CPU. This is because the processor can only access memory on mutibles of 4 (I think this is correct for pentiums, im not sure if it still applys because extra catches etc). This means to access a dword at the memory address 00401001 it would have to read the address 00401000 and 00401004 and combine the results to get the dword result. As I said before I dont know if this still applys to newer CPUs. There are many people more knowledgable than me on this topic.
00401000 00 BYTE 0h 00401001 01 BYTE 1h 00401001 000000000000 ALIGN 8 00401008 0101 WORD 0101h
You are correct George, the DOS usage of EVEN means ALIGN 2. DOS was 16 bit and it could be either BYTE aligned or WORD aligned which is by 2 BYTES. 32 bit code has some advantages when data is aligned but the later processors are not particularly sensitive to CODE alignment. DATA is a different matter, misaligned DATA can seriously slow down access at the data which in turn slows a speed critical algorithm by a substantial amount. One of the good things about using OLE string memory is that it is 16 BYTE aligned so its access is very fast. Regards, firstname.lastname@example.org