2つの古典的マイクロプロセッサ

前講までに辿った計算機ハードウェアの技術史——そろばん、機械式計算機、真空管、トランジスタ、 そして集積回路——は、「初期のマイクロプロセッサ」という到達点で幕を閉じた。 では、その中身はどうなっているのか。 ここからは、実際に歴史を変えた2つのチップ、1974年のIntel 8080とMotorola 6800を通して、 マイクロプロセッサの内側を覗いていく。ただし回路図を1本の配線まで追いかけるのではない。 外に出ている信号線と、そのチップが受け付ける命令の一覧——この2つを調べるだけで、 プロセッサが何をする機械なのかは十分に見えてくる。 全6セクション・演習28問。回答はブラウザに保存されるので、途中でやめても続きから再開できる。

進捗 0 / 28 問(正解 0 問)

1. マイクロプロセッサとは何か — ブラックボックスとして理解する

そろばんから機械式計算機、真空管、トランジスタ、集積回路へと続いた技術史の到達点が、1971年のIntel 4004——中央処理装置(CPU)の全部品を1枚のシリコンチップに集めた最初のマイクロプロセッサだった。ここから先は、その中身を実際に歴史を変えた2つのチップ、1974年のIntel 8080とMotorola 6800を通して覗いていく。ただし本章がとるのは、内部の回路図を1本の配線までたどる方法ではない。チップの外に出ている信号線と、そのチップが受け付ける命令の一覧を調べる——マイクロプロセッサをブラックボックスとして扱う方法である。回路そのものの作り方は、ここまでの講ですでに見てきたからだ。

マイクロプロセッサとは、コンピュータの中央処理装置(CPU)の全部品を、1つのシリコン チップの上に集めたものである。それ以前は複数のチップに分かれていた機能が、1枚に まとまった。最初のマイクロプロセッサは1971年のIntel 4004で、集積されたトランジスタは 約2,300個だった。それから数十年、最新のプロセッサのトランジスタ数は1,000万個に迫るところまで 増えたが、基本の仕組みは変わっていない——スイッチとゲートの組み合わせで動く 電子回路であることに変わりはなく、桁違いに上がったのは集積度の方である。

1974年、インテルが8080を、モトローラが6800を送り出した。同じ年にはテキサス·インスツルメンツの 4ビットのTMS1000や、ナショナル·セミコンダクターのPACE(最初の16ビットのマイクロプロセッサ)も 登場している。それでも歴史的に最も重要なのは、この8080と6800の2つである。

なお「シングルチップマイクロプロセッサ」という呼び方は、少し不正確でもある。プロセッサは コンピュータの一部にすぎず、実際に動くコンピュータを組み立てるには、 RAM・入力装置・出力装置、そしてそれらをつなぐためのチップが別に必要になる。プロセッサだけでは コンピュータにはならない——この点は後の講で全体を組み立てるときに、あらためて効いてくる。

本章がとるのは、内部の回路図をたどる方法ではない。マイクロプロセッサをブラック ボックスと見なし、外部との入出力信号と命令セット全体を調べることで、その働きを把握する という方法である。回路そのものの作り方は、ここまでの講でさんざん見てきた。ここから知りたいのは、 「この箱は外から何を受け取り、どんな命令に応じるのか」の方だ。

演習 1理解

マイクロプロセッサとは何か、最も正確な説明はどれか

演習 2理解

この章がマイクロプロセッサの働きを理解するためにとるアプローチはどれか

演習 3理解

1974年に登場したIntel 8080とMotorola 6800について正しい説明はどれか

演習 4理解

Intel 4004(約2,300個のトランジスタ)から、より新しいマイクロプロセッサ(1,000万個に迫るトランジスタ)への変化について、正しい説明はどれか

このセクション: 0 / 4 問正解

2. 外部とのやりとり — バスとクロックと命令フェッチ

ブラックボックスの理解は、まず外に出ている線を数えることから始まる。8080も6800も40本のピンを持つICで、そのうち16本がアドレス信号、8本がデータ信号、残りが電源・クロック・制御信号である。アドレス信号の本数は、アドレスできるメモリ量を2のべき乗で決めてしまう。データ信号は読み取りのときは入力、書き込みのときは出力として働く双方向の信号である。そしてリセット直後、プロセッサはアドレス0000hのバイトを読み込むところから動き出す——これが命令フェッチであり、フェッチ→デコード→実行というサイクルの出発点になる。

8080も6800も、40本のピンを持つICである。8080は動作に3系統の電源(5V・−5V・12V)とグラウンドを 必要とした——当時ならではの複雑さで、1976年のIntel 8085ではこれが単純化される。一方の6800は 最初からVcc(+5V)の1系統だけで済んだ。8080はさらに、2つの同期したクロック入力を専用の クロック生成チップから受け取り、追加の制御信号はシステムコントローラチップが受け持つ、という 構成になっていた。

40本のピンのうち、最も本数を占めるのがアドレス信号である。ここに本章の核心の 1つがある——アドレス信号がN本あれば、2のN乗通りのアドレスを指定できる。 8080のアドレス信号はA0からA15までの16本で、2の16乗=65,536個のメモリ位置を指定できた。 アドレス線の本数とアドレス可能なメモリ量は、こうして2のべき乗でぴたりと対応する。

次にデータ信号がD0からD7までの8本。この8本は、メモリからバイトを読み取るときは プロセッサへの入力として、メモリにバイトを書き込むときはプロセッサからの 出力として働く。同じピンが状況に応じて向きを変える双方向信号で ある。残りのピンは電源・クロックと、RESETや書き込み指示のような制御信号に使われる。

リセット信号を受けたプロセッサが最初にすること——それはアドレス0000hのバイトを読み込むこと である。これが命令フェッチだ。プログラムカウンタが指すアドレスから命令のバイトを 読み込み(フェッチ)、それが何の命令かを解読し(デコード)、実際に動かす(実行)。プロセッサは電源が 入っている間、この3段階をひたすら繰り返している。

ここでもう1つ、後の章と違う特徴がある。8080の命令は1バイト・2バイト・3バイトの 可変長である。全命令が同じ長さに揃っていれば回路は単純になるが、レジスタ間で値を 移すだけの単純な命令にまで余計なバイトを使うことになる。可変長にすれば、よく使う短い命令は 1バイトで済み、プログラム全体が小さくなる。命令の実行にかかるクロック周期の数も命令ごとに 違い、8080では4〜18周期の幅がある。

命令サイクル — フェッチ・デコード・実行プロセッサはこの3段階を、電源が入っている間ひたすら繰り返す1. FETCH(取り出す)2. DECODE(解読する)3. EXECUTE(実行する)プログラムカウンタ (PC)次に実行する命令のアドレスメモリこの1バイト命令レジスタ (IR)読み込んだ命令のバイトPCが指すアドレスの1バイトをプロセッサに読み込む命令レジスタの中身(8ビット)01dddsss行き先出所命令デコーダどのレジスタを、どう動かすか1つのビットパターンの中に命令の種類と対象が畳み込まれている累算器 (A)レジスタ/メモリALU(算術論理演算器)算術演算も論理演算もここが担う結果累算器 (A) へフラグPSW へ値だけでなく「結果についての情報」もフラグとして残るプログラムカウンタが進み、次の命令のフェッチへ戻るこの図は3段階の構造だけを示す止め絵であり、特定のプログラムを実行するものではない

上の図で追った命令サイクルを、今度は自分の手で回してみよう。「1ステップ実行」を押すたびに フェッチ→デコード→実行が1段階ずつ進み、プログラムカウンタ(PC)が命令の長さのぶんだけ動いて、 累算器の値が5から0へ数え下がっていく様子を観察できる。累算器・フラグ・条件ジャンプの詳しい説明は この後のセクションで順に扱うので、まずは「3回押すと1命令が完了する」というリズムをつかんでほしい。

さわって確認CPUシミュレータ — フェッチ→デコード→実行を1ステップずつ回す
待機中
PC0000hプログラムカウンタ
A0累算器
命令フェッチ結果
Zeroフラグ
ループ 1 周目
フェッチ命令を読み込む
デコード命令を解読する
実行実際に動かす

PC=0000h の命令「MVI A,5」(2バイト)をメモリから読み込む

番地ラベル命令バイト数
0000hMVI A,52
0002hloop:STA 2000h3
0005hDCR A1
0006hJNZ loop3
0009hSTA 2000h3
000ChHLT1
メモリ 2000h 番地(STAの書き込み先)(未書き込み)

「1ステップ実行」を押すたびに、プロセッサはフェッチ(命令を読み込む)→デコード(命令を解読する)→ 実行(実際に動かす)の3段階を1つずつ進めます。MVIが累算器Aに即値5をロードし、STAがその値を メモリの2000h番地へ書き込み、DCRがAを1減らします。結果がまだ0でなければZeroフラグはセットされず、 JNZ(条件ジャンプ)がプログラムカウンタをloopの番地へ書き戻すので、同じ区間が繰り返されます。 Aが0になるとジャンプは行われず、最後のSTAが0を書き込んでHLTで停止します。 番地の進み方にも注目してください——命令は1〜3バイトの可変長なので、 PCは命令の長さのぶんだけ進みます

演習 5計算

あるマイクロプロセッサのアドレス信号が12本だとすると、アドレスできる最大のメモリ量はどれか

演習 6理解

マイクロプロセッサのデータ信号(データバス)が、入力としても出力としても働く理由はどれか

演習 7理解

「命令フェッチ」とは何か

演習 8計算

クロック周波数4MHzで動くマイクロプロセッサの、クロック1周期(1サイクル)の長さはどれか

演習 9理解

マイクロプロセッサの命令が1バイト・2バイト・3バイトという可変長になっている利点はどれか

このセクション: 0 / 5 問正解

3. レジスタとアキュムレータ

プロセッサの中には、バイトを一時的に置いておける小さな入れ物がいくつかある。8080ではその中心が累算器(アキュムレータ、記号A)で、多くの算術演算・論理演算はこの累算器を舞台にして行われる。加えてB・C・D・E・H・Lという6個のレジスタがあり、HとLは組にして16ビットのレジスタペアHLとして扱える。レジスタは理論的には必須の部品ではない——原理的には累算器1個でも計算機は組み立てられる。それでもレジスタが用意されているのは、複数の値をプロセッサ内に置いたままにでき、メモリとの往復を減らせるという実用上の理由からである。

メモリからバイトを読み込む命令、メモリへバイトを書き込む命令——8080ではLDA・STAがそれにあたる。 どちらも読み書きの相手はプロセッサの中の累算器(アキュムレータ、記号A)である。 累算器は、算術演算・論理演算の結果が入る、最も中心的な役割を持つレジスタだ。

8080には累算器のほかに、B・C・D・E・H・Lという6個のレジスタがある。中でも H(高位)とLは組にして扱うことができ、これをレジスタペアHLと呼ぶ。8ビット2個を つないだ16ビット——ちょうどメモリアドレス1つ分の幅になるので、多くの場合はアドレスの保持に 使われる。BCペア・DEペアもアドレスを保持でき、16ビット値を一括でロードする命令や、 レジスタペアを16ビット単位のまま増減する命令も用意されている。

ここで押さえておきたいのは、レジスタは理論的には必須の部品ではないということだ。 原理的には、累算器1個とメモリさえあれば計算はできる。それでもレジスタが用意されているのは、 実用上の理由による——複数の値を同時にプロセッサ内に置いたままにできるので、その都度メモリに 読み書きしなくて済む。メモリへのアクセス回数が減れば、それだけプログラムの実行は速くなる。

8ビットのレジスタ1個が取りうる値は2の8乗=256通り。第4講 「ビットの正体」で見た 「可能性の数を数える」という考え方が、そのまま当てはまる。この256という数は、次のセクションで オプコードのビットパターンを数えるときにも、まったく同じ形で再登場する。

演習 10理解

8080の「累算器(アキュムレータ)」の役割として正しいものはどれか

演習 11理解

アキュムレータの他に複数の汎用レジスタ(B・C・D・E・H・L)を持つ利点はどれか

演習 12計算

8ビットのレジスタ1個が取りうる、異なる値のパターン数はどれか

演習 13理解

2つの8ビットレジスタ(例えばHとL)を組にして16ビットの「レジスタペア」として扱う目的はどれか

演習 14理解

個々のレジスタは、理論的には必ずしも必要ではないが実用上都合が良いとされる理由はどれか

このセクション: 0 / 5 問正解

4. オプコードのビットパターンと命令デコード

命令はメモリの中では単なる1バイトの数値——オプコードとして置かれている。8ビットのオプコードが表せるビットパターンは理論上256通りで、8080はそのうち大半を命令に割り当てている。中でもMOV命令は「01dddsss」という1つの形の中に、行き先を表す3ビットと出所を表す3ビットを埋め込むことで、多数のオプコードをまとめて引き受けている。この3ビットが指すのはB・C・D・E・H・L・レジスタペアHLが指すメモリ・累算器の8通りである。命令に16ビットアドレスを直接書く直接アドレス指定、データそのものを書く即値アドレス指定、レジスタペアが保持するアドレスを経由するレジスタ間接アドレス指定——3つの方式の違いも、このビットパターンの読み方とあわせて押さえる。

メモリの中では、命令もただの数値である。1バイトのオプコードが「何をするか」を 表す。8ビットで表せるビットパターンは理論上256通りで、8080はそのうち大半を命令に割り当てて 使っている(すべてが定義済みというわけではなく、未定義のまま残るパターンも一部ある)。

その中で目立つのがMOV命令だ。レジスタ間で値を移すこの命令だけで、実に63個の オプコードを持つ。とはいえ63通りを個別に暗記する必要はない。ビットパターンが 「01dddsss」という形に整理されているからである——先頭の2ビットが命令の種類を 表し、続く3ビット(ddd)が行き先、末尾の3ビット(sss)が出所を 指定する。3ビットは2の3乗=8通り。その8通りが、B・C・D・E・H・L・レジスタペアHLが指すメモリ・ 累算器に、それぞれ対応している。

すると1つ、行き場のない組み合わせが生まれる。行き先も出所も「HLが指すメモリ」を指定した場合だ。 レジスタ間の移動としては意味を持たない。8080の設計者はこの空いた位置に、まったく別の重要な 命令——HLT(停止)を割り当てた。意味のない組み合わせを別の命令の置き場所として 再利用する、設計上の工夫である。

メモリの指し方には3つの方式がある。

  • 直接アドレス指定——命令の後ろに16ビットのアドレスをそのまま書く(LDA・STA)
  • 即値アドレス指定——命令の後ろにデータそのものを書く(MVI)
  • レジスタ間接アドレス指定——レジスタペアが保持しているアドレスを経由してメモリにアクセスする

3つ目の「レジスタ間接アドレス指定」は、後で出てくる6800の インデックスレジスタとは別の概念なので、混同しないようにしたい。8080には インデックスレジスタは存在せず、HLなどのレジスタペアが保持するアドレスを経由する方式をとる。 6800の方は専用の16ビットのインデックスレジスタを持ち、そこを起点にオフセットを足してアドレスを 作るという、別の仕組みを備えている。

オプコードのビット分解 — 1バイトに畳み込まれた「行き先」と「出所」8ビットの中に、命令の種類とその対象がまとめて書き込まれているbit70bit61bit5dbit4dbit3dbit2sbit1sbit0s命令の種類MOVを表す固定パターンddd = 行き先destination(どこへ移すか)sss = 出所source(どこから移すか)3ビットコードが指すもの(8通り=2の3乗)3ビット指すもの000レジスタ B001レジスタ C010レジスタ D011レジスタ E100レジスタ H101レジスタ L110レジスタペアHLが指すメモリの内容111累算器 A(アキュムレータ)7通りがレジスタ、残り1通り(110)がレジスタペアHLの指すメモリ位置に割り当てられている行き先も出所も110になる組み合わせは移動として意味を持たないため、その位置にはHLT(停止)命令が置かれている
演習 15計算

3ビットのコードで区別できる対象の最大数はどれか

演習 16理解

MOV命令のビットパターン「01dddsss」で、dddとsssが表しているものはどれか

演習 17理解

8080の「直接アドレス指定」「即値アドレス指定」「レジスタ間接アドレス指定」の組み合わせとして正しいものはどれか

演習 18理解

「レジスタ間で移動先も移動元もメモリ経由のアドレス」に対応するはずのビットパターンの位置には、実際には何が割り当てられているか

このセクション: 0 / 4 問正解

5. フラグとALU — 算術・論理・比較

足し算・引き算と、AND・OR・XORのビットごとの論理演算は、どちらも同じ1つの回路ユニット——算術論理演算器(ALU)が実行する。演算の結果は値だけでは終わらない。結果が負だったか、0だったか、繰り上げが生じたか——そうした「結果についての情報」がフラグとしてプログラム状態語(PSW)に記録される。8080が持つフラグはSign・Zero・Parity・Auxiliary Carry・Carryの5種。引き算をしながら結果を捨ててフラグだけを残すCMP(比較)命令、累算器の8ビットを回り込ませる回転命令、レジスタやメモリを直接1増減するINR・DCRといった、実務的な命令もここで揃う。

算術命令はADD(加算)・ADC(キャリー付き加算)・SUB(減算)・SBB(ボロー付き減算)。これらの命令では、 累算器が一方のオペランドであり、同時に結果の行き先でもある。論理演算のAND・OR・XORは、 2つのバイトをビットごとに突き合わせる演算だ。そして重要なのは、 算術演算も論理演算も、同じ1つの回路——算術論理演算器(ALU)が実行しているという ことである。ここまでの講で別々に組み立ててきた論理ゲートと加算器が、1つのユニットに集約されて いるとイメージすればよい。

演算が終わったあと、値のほかにもう1つ残るものがある。フラグ——結果についての 情報だ。8080ではプログラム状態語(PSW)という8ビットのレジスタに、次の5種類が保存される。

  • Sign——結果が負(最上位ビットが1)のときにセットされる
  • Zero——結果が0のときにセットされる
  • Parity——結果のビットのうち1の個数が偶数のときにセットされる
  • Auxiliary Carry——10進(BCD)への調整命令のために使われる
  • Carry——繰り上げ・借りを検出する。減算では加算のときと意味が逆になる点に注意

フラグだけが欲しい、という場面のために用意されているのがCMP(比較)命令である。 やっていることはSUBと同じ引き算だが、結果を累算器に書き戻さない。知りたいのは引き算の答えでは なく、その過程で立つフラグ——等しいか、どちらが大きいか——の方だからだ。同様に、8個の算術・ 論理演算にはそれぞれ即値バイト版(命令の中に相手の数値を直接書く形)も用意されている。

実務的に効いてくる命令も揃っている。INR(増分)・DCR(減分)は、指定したレジスタや メモリの内容を、累算器を経由せずに直接1だけ増減する専用命令である。1を引くのに 「−1の2の補数を足す」という遠回りをせずに済む。累算器のビットを反転する命令や、10進(BCD)への 調整を行う高度な命令もある。

回転命令(RLC・RRC・RAL・RAR)は、累算器の8ビットを1ビット分ぐるりと回す命令だ。 RLC(左回転)は最上位ビットを最下位ビットとCarryフラグへ、RRC(右回転)は最下位ビットを最上位 ビットとCarryフラグへ送りながら回す。ここは誤解しやすいところで、 回転(ROTATE)は単純なシフトではない。左回転が2倍に相当するのは最上位ビットが 0のときに限られ、右回転が2分の1に相当するのは最下位ビットが0のときに限られる。それ以外では 桁が反対側へ回り込むので、単純な倍・半分にはならない。

演習 19理解

8080が持つ「算術論理演算器(ALU)」について正しい説明はどれか

演習 20理解

8080のフラグのうち、「演算結果が0だったかどうか」を示すフラグはどれか

演習 21理解

CMP(比較)命令がSUB(引き算)命令によく似ているが、結果を累算器に保存しない理由はどれか

演習 22計算

8ビットレジスタの値00000101(10進数で5。最上位ビットbit7は0)をRLC(左回転)命令で1ビット左に回転させる。回転命令は最上位ビットを最下位ビットへ戻す点で単純な「左シフト」とは異なるが、この例ではbit7が0のため、結果は10進数でいくつになるか

演習 23理解

レジスタやメモリの値に1を足す・1を引く専用の命令(INR・DCR)が用意されている理由はどれか

このセクション: 0 / 5 問正解

6. スタックとサブルーチン、そして違うチップ・違う流儀

プログラムカウンタに別の値をロードすれば、実行の順序を変えられる——これがジャンプである。そしてフラグの状態に応じてジャンプするかどうかを選べる条件ジャンプこそが、単純な足し算機を汎用のデジタルコンピュータへと変えた決定的な仕掛けだった。CALL命令はジャンプの前に戻り先アドレスを後入れ先出し(LIFO)のスタックへ積み、RET命令がそれを取り出す。こうしてコードの断片を何度でも呼び出せるサブルーチンが成立する。最後に、同じ時期に別会社の別チームが独立に設計した8080と6800を並べ、レジスタ構成もフラグもオプコードも、そして複数バイトの並べ方(エンディアン)まで違うという事実で章を締めくくる。

プロセッサが読み書きするメモリはRAM(ランダムアクセスメモリ)——どの位置にも直接アクセスできる 記憶装置である。そのRAMの一部を、少し変わった使い方で確保するのがスタックだ。 スタックは後入れ先出し(LIFO)、つまり最後に積んだものが最初に取り出される 保存方法で、積むのがPUSH、取り出すのがPOPである。

8080のPUSH・POPは16ビットのレジスタペア単位で働き、スタック領域のどこを使っているかは スタックポインタという専用の16ビットレジスタが覚えている。PUSHを1回行うたびに スタックポインタは2だけ減る。積みすぎればスタックオーバーフロー、取り出しすぎれば スタックアンダーフローという故障になる。

では、そのスタックは何のためにあるのか。答えはサブルーチンである。 プログラムの実行順序を決めているのはプログラムカウンタで、ジャンプ命令は そこに別のアドレスをロードすることで実行位置を移す。CALL(コール)命令は、 ジャンプする前に「戻ってくるべきアドレス」をスタックに積む点が決定的に違う。だから RET(リターン)命令でスタックから取り出して元の場所に戻れる。頻繁に使うコードの 断片を1か所に書いて何度でも呼び出せる——これがサブルーチンの正体だ。条件付きのCALL・RETも 用意されている。

そして本章がはっきりと指摘するのが、条件ジャンプの意味である。Zero・Carry・ Parity・Signの各フラグの状態に応じてジャンプするかどうかを選べる——この仕掛けがあることで、 プログラムは「同じ手順の繰り返し」から抜け出せる。 単純な足し算機を汎用のデジタルコンピュータへと変えた決定的な転換点は、この条件ジャンプ だった。

外の世界とのやりとりも見ておく。8080は65,536個の通常のメモリアドレスとは別に、 256個のI/Oポートを持ち、専用の命令で周辺機器を読み書きする。周辺機器の側から プロセッサの注意を引く仕組みが割り込みで、許可・禁止の命令や、割り込み処理の 入口として使われる固定アドレスへの呼び出し命令が用意されている。何もしないNOP(無操作)命令が あるのも、こうした命令セットの隅々まで整えられた設計の一部である。

最後に6800と並べてみる。6800は8080と多くの面で似た機能を持つが、細部の流儀がことごとく違う。

  • 電源はVcc(+5V)の1系統だけで、8080より単純
  • I/Oポートという概念を持たず、すべての入出力がメモリアドレス空間の一部として扱われる
  • 汎用レジスタB〜Lの代わりに、対等な2つの累算器A・Bと、16ビットのインデックスレジスタを持つ
  • 8080にはないOverflowフラグを持つ一方、Parityフラグは持たない

そしてオプコードが完全に異なる。別会社の別のエンジニアグループが独立に設計した 以上、当然のことではある。一方のマシンコードを他方が実行することはできない。違いは複数バイトの 値をメモリに並べる順序にまで及ぶ——8080は下位バイトを先に置くリトルエンディアン、 6800は上位バイトを先に置くビッグエンディアンである。この用語は、卵をどちらの端 から割るかで争う『ガリヴァー旅行記』の一節に由来する。

この2つのチップの子孫が、その後の世界を分けた。8080はAltair 8800という初期のホーム コンピュータに使われ、Intel 8085・Zilog Z-80(TRS-80に採用)へと続く。Apple IIが採用したMOS 6502は6800の系譜にある。1978年のIntel 8086とその派生の8088はIBM PCに採用され、x86ファミリーへ 広がった。モトローラの68000は1984年のMacintoshに使われ、1994年以降はRISCアーキテクチャの PowerPCへ移る。ムーアの法則が言うとおりトランジスタ数が増え続けた分は、データ幅の拡大や 浮動小数点などの新しい命令、そしてパイプライン・キャッシュといった高速化の技法に注ぎ込まれて いる。もっとも、マイクロプロセッサはシステムの一部にすぎない。全体を組み立てる前に、 次はもう1つ学んでおくことがある——オプコードと数値以外のもの、つまり文字をコード化する方法だ。

演習 24理解

スタック(後入れ先出し、LIFO)という保存方法の性質として正しいものはどれか

演習 25計算

16ビットのスタックポインタが初期値9000hだとする。16ビットの値を1回PUSHするたびにスタックポインタが2ずつ減るとすると、2回PUSHした後のスタックポインタの値はどれか

演習 26理解

JMP(ジャンプ)命令とCALL(コール)命令の決定的な違いはどれか

演習 27理解

条件ジャンプ命令の存在が持つ意味として、本章が指摘していることはどれか

演習 28計算

16ビットの値1234h(下位バイト34h・上位バイト12h)を「リトルエンディアン」の並び順でメモリに保存するとき、正しい並び方はどれか

このセクション: 0 / 5 問正解