Vladimir wrote:
But, the DS directive works differently in the vasm assembler: it fills the given memory area with zeros. It turns out that these locations are initialized with zeros. I've never used EASy68K and I don't understand what uninitialized memory locations in a.out file should look like? After all, these uninitialized locations should still occupy some part of the output file size?
In most assemblers 
DS itself never initialises storage; the zero-filled areas you're getting are due to your output file format.
Consider the following, assembled with Macro Assembler AS:
Code:
    cpu   68000
    org   $400
    dc.b  $11, $12
    org   $404
    dc.b  $21, $22
    ds.b  2
    dc.b  $31, $32
This will produce an output file ending in 
.p, and if you run AS's 
plist it, you'll get:
Code:
PLIST/C V1.42 Beta [Bld 243]
(C) 1992,2023 Alfred Arnold
Code-Type   Segment    Start-Address  Length (Bytes) End-Address
----------------------------------------------------------------
680x0         CODE      00000400          0002       00000401
680x0         CODE      00000404          0002       00000405
680x0         CODE      00000408          0002       00000409
creator : AS 1.42 Beta [Bld 243]/i386-unknown-win32
altogether 6 bytes CODE
As you can see, the 
.p output format supports multiple sections of memory, each with a start address and length, and here each section is correctly two bytes of data, with nothing in the "empty" areas between them, whether those are due to 
DS or 
ORG directives.
However, if you create a "raw" binary file from this using p2bin, it prints
Code:
P2BIN/C V1.42 Beta [Bld 243]
(C) 1992,2023 Alfred Arnold
Deduced address range: 0x00000400-0x00000409
prog.p==>>prog.bin  (6 Bytes)
and a hex dump of the file looks like this:
Code:
00000000: 11 12 ff ff 21 22 ff ff 31 32
Here you'll note that we've lost the start address, and it had to find something to fill in the unallocated spaces since the output of a raw binary file must be contiguous. So it filled those areas in with $FF. ($FF is the default fill value, since most PROM burners will treat that as "uninitialised data" and not bother burning large sections of the PROM that would just be $FF anyway if not burned, but you can change the fill value with the 
-l option to p2bin.)