メモリアドレス
プログラム内蔵方式のコンピュータ内の各メモリロケーションは、「何らかの」二進数または十進数を保持する。保持された値をどう解釈するか(データ型のデータとしてあるいは命令として)、およびどのように使用するかは、それを取り出して操作する命令によって決定される。
初期のプログラマの中には、メモリを節約する方法として、命令とデータを1つのワードの中に組み合わせた者もいた。Manchester Mark Iは、40ビットワードの中にデータを格納するスペースを持っていた。プロセッサはワードの途中でデータセクションを無視した。それはしばしば追加のデータストレージとして利用されていた。
コンピュータウイルスのような自己複製プログラムは、時にはデータとして、時には命令として扱われる。自己書き換えコードは、今日では一般には非推奨とされている。これは、テストやメンテナンスが困難であり、コンピュータの状態(英語版)に関するコンパイラやプロセッサの前提によって間違った結果をもたらす可能性があるためである。現在でも細心の注意を払って意図的に使用されることはある。
32ビットバス(Intel 80386など)では2(= 4,294,967,296)個のメモリロケーション、4 GiBのアドレス空間をアドレス指定することができる。 18ビットアドレスバスを備えた36ビットワードアドレス可能マシンでは、1,179,648バイト(= 1,152 KB = 1.125 MiB = 9,437,184ビット)に相当する2(= 262,144)個のメモリロケーションが指定可能であり、8086よりわずかに多い。
古いコンピュータの一部(十進数コンピュータ(英語版))は、十進数の数字でアドレス指定可能だった。例えば、IBM 1620の磁気コア・メモリの各アドレスは、パリティビット、フラグビット、および4つの数値ビットからなる単一の6ビット二進化十進数を識別した。1620は5桁の十進アドレスを使用していたため、理論上の最高可能アドレスは99,999だった。実際には、CPUは20,000のメモリロケーションをサポートし、オプションの外部メモリユニットを2つまで追加することができ、それぞれ20,000アドレスをサポートしたので、合計60,000(00000–59999)になった。
初期のx86コンピュータは、メモリセグメントとそのセグメント内のオフセットという2つの数字の組み合わせに基づく、セグメント方式のアドレスを使用していた。一部のセグメントは、命令、スタックセグメント、または通常のデータセグメント専用のコードセグメントとして暗黙的に扱われていた。用途は異なっていたが、セグメントにはこれを反映した異なるメモリ保護がなかった。フラットメモリモデルでは、全てのセグメント(セグメントレジスタ)は一般に0に設定され、オフセットのみが可変である。