DeMでは実在の多くのCPUと同じようにアドレスを1種類だけ持ち、その最上位桁でメモリの種類分けを行います。全桁数は4桁で、0から9999まで1万通りの「場所」を指定できます。
1つの「場所」に入るデータは2桁分です。実在の2進数ベースのCPUではこれを「バイト」という単位で呼んでいます。DeMでも「バイト」と呼ぶことにしました*1。以降、「2桁」と「バイト」が混在して読みにくくなるかもしれませんがどうかご勘弁を。
最 上位桁=0はプログラム領域=プログラムメモリです。0~999番地で1000バイトあります。ここにはプログラムと変化しないデータ(定数)を格納しま す。この領域の特徴は、不揮発性メモリを使っているため電源を切っても消えないこと、そして、プログラム自身がこの領域を書き換えることができないことで す。
最上位桁=1はデータ領域です。プログラム自身が実行中に書き換えることができます。1000~1499番地で500バイトあります。 1500番地以降は「禁止領域」となっていますが実際は1000番地からの内容が繰り返されるだけです。このような領域を「イメージ」とか「ゴースト」 (日本語では「虚像」ですね)と呼びます。
最上位桁=2はスタック領域です。仕様はデータ領域と同様です。実体は2000~2099番地の100バイトしかありませんので、それ以降は100番地ごとイメージが見えることになります。
最上位桁=3はI/O領域です。プログラムからは原則入出力専用の命令でアクセスします。入出力がメモリの延長線上に扱われている方式を”Memory mapped I/O”などと言ったりします。
*1 DeMは10進ベースなのでほかの名称を考えたのですが、「バイト」という単位が非常に普及していて、なおかつDeMの内部でも10進2桁=1バイトで 扱っているためこの方が違和感なく受け入れられるのではないかと考え、そのまま「バイト」いう呼称になりました。本当に悩みました。