2025-08-01から1ヶ月間の記事一覧
簡単なプログラムは実行できるようになりました。 実行例(加算) 以下のような C++ のプログラムを考えます。 int add(int x, int y) { return x + y; } これをコンパイルすると以下のようなアセンブリ言語のコードが得られます。 _Z3addii: move.l 4(%sp),%d…
前回作成した コンソール風ウィンドウ(入力・出力) ソースコード入力ウィンドウ 描画ウィンドウ をもつシステムを使って、このシステム上で 68000 アセンブリ言語のインタープリターを動作させます。インタープリターは以下のような仕様とします。 デバッガ…
「関数のグラフ」コマンド版(コンソール風入出力・描画機能あり) (4) グラフが表示できるようになりました。構文解析中に発生したエラーが無視されていたので、エラーを返すようにしました。これは C# 版、TypeScript 版でもそうなっているので変更する必要…
「関数のグラフ」コマンド版(コンソール風入出力・描画機能あり) (3) 前回の問題は1か所ポインターに変更したら直りました。グラフが何もない状態の表示ができるようになりました。使い方は以下のようになります。 使い方 関数計算機能 exit で終了します。 …
「関数のグラフ」コマンド版(コンソール風入出力・描画機能あり) (2) できるだけポインターを使わないようにしたところ、以下のようなエラーが発生しました。クラスの定義が循環しているところはポインターを使う必要があると思われます。それがどこかで失敗…
「関数のグラフ」コマンド版(コンソール風入出力・描画機能あり) 「80sBASIC(1) - 非専門的シンギュラリティー研究所」では「Windows のデスクトップアプリケーションにコンソール風の入出力と描画機能を追加したシステム」上で BASIC インタープリターを動…
「関数電卓コマンド版(7) - 非専門的シンギュラリティー研究所」で Windows のデスクトップアプリケーションにコンソール風の入出力とグラフィックス機能を追加して「関数のグラフ」と同様の機能にしようとしたのですが C# から C++ への変換が失敗したと思…
GCC の調査(2) double の sin double sin_double_cpp(double x) { return sin(x); } から作られるアセンブリ言語のコードは以下のようになります。 _Z14sin_double_cppd: link.w %fp,#0 move.l 12(%fp),-(%sp) move.l 8(%fp),-(%sp) jsr sin addq.l #8,%sp u…
GCC の調査(1) GCC が出力するアセンブリ言語のコードの中で呼ばれる関数について調べていきます。 long のかけ算 long multiply_long_cpp(long x, long y) { return x * y; } から作られるアセンブリ言語のコードは以下のようになります。 _Z17multiply_lon…
executeInstruction 関数の処理(7) シフト系命令 シフト系命令には以下のようなものがあります。 lsl, lsr, asl, asr 「lsl src, dst」、「asl src, dst」は dst を src ビット左シフトしたものを dst に設定します。「lsl dst」、「asl dst」は dst を 1 ビ…
executeInstruction 関数の処理(6) 乗除算命令 乗除算命令には以下のようなものがあります。 mulu, muls 「mulu src, dst」は dst と src の符号なしの積を dst に設定します。「muls src, dst」は dst と src の符号ありの積を dst に設定します。フラグは …
「関数電卓コマンド版(7) - 非専門的シンギュラリティー研究所」で Windows のデスクトップアプリケーション版にコンソール風の入出力とグラフィックス機能を追加していますが、ここでもそれを導入します。ここでは描画処理を行う関数を作成しているので、そ…
「関数電卓」のコマンド版(Windows のデスクトップアプリケーション版)にグラフ描画機能を追加して「関数のグラフ」と同等のことができるようにしました。まだ変数の計算で「読み取りアクセス違反」が発生するので動作はできていません。描画領域を追加した…
「関数電卓」のコマンド版(Windows のデスクトップアプリケーション版)を作成しました。「関数電卓コマンド版(1) - 非専門的シンギュラリティー研究所」で書いたように計算の部分は「関数電卓」を C++ に変換したものを使っています。GUI の部分は以下のよう…
「関数電卓コマンド版(1) - 非専門的シンギュラリティー研究所」で「関数電卓」のコマンド版を作ると書いていたのですが、「関数電卓コマンド版(4) - 非専門的シンギュラリティー研究所」で乗算・除算をインラインアセンブラで記述したものを作成したところ…
executeInstruction 関数の処理(4) 算術演算系の命令には以下のようなものがあります。 add, adda, addq, addx 「add src, dst」は dst と src の和を dst に設定します。addx は繰り上がりの処理をします。adda は詳細が書かれていなかったので add と同様…
executeInstruction 関数の処理(3) lea 「lea src, dst」は src のアドレスを dst に設定します。書かれていなかったのでわかりませんが、フラグは変化しないとします。 else if (instruction.is_lea_instruction()) { // LEA命令の処理 if (operands.size()…
executeInstruction 関数の処理(2) movem の動作は 68000 の資料を調べればわかると思うのですがどんな資料があるのかまだわかっていません。ChatGPT で調べてもよくわからない答えが返ってくるので検索しても見つからないかもしれません。executeInstructio…
executeInstruction 関数の処理 Visual Studio で補完されたプログラムと ChatGPT で作ってもらったプログラムを元に改造しました。まだ動くようにはなっていません。executeInstruction 関数の move 系命令の処理は以下のようになります。『X68000ベスト・…