C言語– tag –
-
C言語で作る小さなシステム
【低レイヤ入門】C言語で自作VMに入力系SYSCALLを追加して、1文字echoを動かす | UNIX Cafe
前回は、小さな自作VMを、少しだけ「本物のVM」らしい形に近づけました。 これまでは、実行対象の命令列を notes/vm.c 内に直接記述していました。単一の命令動作を確認する段階ではこの手法が有用でしたが、命令列を変更するたびにVM自体のソースコードを... -
C言語で作る小さなシステム
【低レイヤ入門】C言語で自作VMに外部バイナリローダーを追加して hello.bin を実行する | UNIX Cafe
前回は、小さな自作VMにADD、SUB、CMP、JUMP、JZ、JNZ、CALLI、RETといった命令を追加しました。 これにより、VMはただ上から順番に命令を処理するだけでなく、CMP の結果に応じた条件分岐(ジャンプ)や、CALLI と RET によるサブルーチン呼び出しができ... -
C言語で作る小さなシステム
【低レイヤ入門】ドリフの散髪屋コントで見切るマルチタスクと仮想メモリの正体 | UNIX Cafe
OSやCPUの資料を読んでいると、最初に引っかかる不思議な部分があります。 タスク1も、タスク2も、タスク3も、みんな平然と同じようなアドレスを使って動いていることです。たとえば、どのプログラムも「自分のプログラムの先頭は 0x00000 です」という顔... -
C言語で作る小さなシステム
【低レイヤ入門】C言語で自作VMに計算・比較・分岐・CALL/RETを追加する | UNIX Cafe
前回は、小さな自作VMにSTDI、INC、DEC、MOV、PUSH、POPを追加しました。 値をメモリへ書く、レジスタ同士でコピーする、スタックへ退避する、というところまで進みました。 ただし、この段階のVMは、まだ基本的には上から順番に命令を実行するだけです。 ... -
C言語で作る小さなシステム
【低レイヤ入門】C言語で仮想マシン自作:アセンブリからVM実装への「目線の切り替え」を学ぶ | UNIX Cafe
先日から自作OSを作り始めました。 最終的には、自作CPUの上に自作OSを載せ、その上で自作シェルを動かし、最後には自作エディターまで開けるようにしたいです。 ただし、いきなりOS全体を作るのは大きすぎます。そこでまずは、小さなVMをCで手書きしなが... -
C言語で作る小さなシステム
C言語で始めるLC-3仮想マシン自作入門(第12回:最終章!.gitignoreやライセンスを整えてGitHubで正しく公開する方法) | UNIX Cafe
自作LC-3 VMをGitHubで公開できる形に整える 前回は、第10回までに作った観察機能を使って、小さいLC-3プログラムの動きを読みました。 --traceで命令の流れを見て、--profileで命令ごとの実行回数を数え、--breakや--dump-memoryでループ中の状態やメモリ... -
C言語で作る小さなシステム
C言語で始めるLC-3仮想マシン自作入門(第11回:16進数とアセンブリが繋がる瞬間!自作デバッガから覗く「コンピューターの秘密」)| UNIX Cafe
小さいLC-3プログラムをデバッグする 前回は、VMに--dump-registersと--dump-memoryを追加し、プログラム終了後のレジスタとメモリを確認できるようにしました。 第6回以降では、VMの中を観察するための機能を少しずつ増やしてきました。命令の流れを見る-... -
C言語で作る小さなシステム
C言語で始めるLC-3仮想マシン自作入門(第10回:–dump 機能実装!実行後のCPUとメモリの生データを総まとめ)| UNIX Cafe
レジスタとメモリをダンプして状態を見る 前回は、VMに--break x3002オプションを追加し、指定番地に到達したときだけ止められるようにしました。 ブレークポイントで止まれるようになると、見たい場所まで一気に進められます。ただ、この時点では、止まっ... -
C言語で作る小さなシステム
C言語で始めるLC-3仮想マシン自作入門(第9回:PC(プログラムカウンタ)を先読み!自作デバッガへの本格ステップ)| UNIX Cafe
ブレークポイントで指定番地で止める 前回は、VMに--stepオプションを追加し、1命令実行するたびに停止してEnterで次へ進められるようにしました。 --stepは、Hello Worldのような短いLC-3プログラムを1命令ずつ確認するには便利です。一方で、少し命令数... -
C言語で作る小さなシステム
C言語で始めるLC-3仮想マシン自作入門(第8回:–step オプションで時間を止める!1コマずつの実行制御)| UNIX Cafe
ステップ実行で1命令ずつ進める 前回は、VMに--profileオプションを追加し、実行した命令数の合計とopcodeごとの実行回数を数えられるようにしました。 プロファイル機能では、プログラム全体でどの命令が多く実行されたかを見られます。一方で、「次の命...
