2015-01-01から1年間の記事一覧

アセンブラ完成

コンピュータシステムの理論と実装8章のシンボルも処理できるアセンブラ 完成しました。 前のプログラムから追加した部分の説明を書いておきます。プログラムを読み込んだら、最初にラベルの処理をします。 (define (assem-label1 lis n result) (cond ((nu…

プログラミングの基礎:8.1〜8.3

8.1 レコードの必要性 レコードとは名前のついたデータの集まりである 8.2 レコードの構文 レコードの構文 { 名前1 = 値1 ; 名前2 = 値2; ・・・ }レコードの中で使う名前をフィールドと呼ぶ。レコードの例 { name = "asai" ; tensuu = 70; seiseki = "B" }…

コードリーディング:1.1.4進化

他人が書いたプログラムに新しい機能を追加する場合、最初にすべきことは 類似した機能が書かれている部分を探し出して、それを追加したい機能の テンプレートにすることである。

プログラミングの基礎:7.3 構造データに対するデザインレシピ

構造を持つデータを扱うときにはデザインレシピの4項目に 新しい項目「テンプレート」を「本体」の前に加える。入力が構造データの場合は、その中身を取り出すmatch文を作る入力データの型が定まるとそこから必然的に決まってくる関数本体の形 のことをテン…

プログラミングの基礎:7.2パターンマッチ

複数のデータからできているデータの中身を取り出すには パターンマッチを使う。 match 式 with パターン -> 式例 match (3, 5) with (a, b) -> a + b (a, b)が値の組を表すパターンで、ここにでてくるaとbをパターン変数と呼ぶ。 上の例では(3, 5)が(a, b)…

プログラミングの基礎:7.1 組の構文

組とはいくつかのデータを並べてひとつのデータにしたものである。 以下のように表現する (3.14, 2.71) 組の型は要素の型を*でつないだものになる。 例えば上の(3.14, 2.71)の型は float * float になる。組は違う型の要素をならべてもかまわない。 (3,true)…

プログラミングの基礎:問題5.4〜5.6解答

(* 問題5.4 *) (* 目的: 2次方程式の係数a,b,cが与えられたら判別式の値を返す *) (* hanbetsushiki : float -> float -> float -> float *) let hanbetsushiki a b c = b ** 2.0 -. 4.0 *. a *. c (* テスト *) let test1 = hanbetsushiki 1.0 5.0 4.0 = 9.…

プログラミングの基礎:問題5.2解答

(* 目的 :受け取った時間xが午前か午後かを計算する *) (* jikan : int -> string *) let jikan x = if x >= 12 then "午後" else "午前" (* テスト *) let test1 = jikan 0 = "午前" let test2 = jikan 12 = "午後" let test3 = jikan 13 = "午後"

読書メモ:読書術

タイトル:読書術 著者: 加藤周一 英語で書かれた専門書より英語で書かれた文学書のほうが難しい。

コンピュータシステムの理論と実装:シンボルフリー版のアセンブラ完成

シンボルフリー版のアセンブラ完成しました。 簡単にプログラムの説明を書いておきます。 A=1 M=Dと書かれたファイルがあるとする。 このファイルをread-asmで読み込むと ("A=1" "M=1")のようなリストが返されます。 その次に1個ずつ要素を、string->list関…

プログラミングの基礎:問題4.7解答

(* 目的:鶴の数xと亀の数yに応じて足の数の合計を計算する *) (* tsurukame_no_ashi : int -> int -> int *) let tsurukame_no_ashi x y = tsuru_no_ashi x + kame_no_ashi y (* テスト *) let test1 = tsurukame_no_ashi 1 1 = 6 let test2 = tsurukame_no_…

プログラミングの基礎:問題4.6解答

(* 目的:鶴の数xに応じて足の本数を計算する *) (* tsuru_no_ashi : int -> int *) let tsuru_no_ashi x = x * 2 (* テスト *) let test1 = tsuru_no_ashi 1 = 2 let test2 = tsuru_no_ashi 10 = 20 let test3 = tsuru_no_ashi 20 = 40 (* 目的:亀の数xに応…

読書メモ:食の世界地図

タイトル:食の世界地図 著者:21世紀研究会編

読書メモ:色彩の世界地図

タイトル:色彩の世界地図 著者: 21世紀研究会編 今のサンタクロースのイメージは、コカコーラの広告からだったのか

プログラミングの基礎:問題4.2〜4.4

問題4.2 let jikoshokai name = "I am " ^ name 問題4.3 let hyojun_taiju m = m ** 2.0 *. 22.0 問題4.4 let bmi m kg = kg /. (m ** 2.0)

読書メモ:グーグル検索だけでお金持ちになる方法

タイトル:グーグル検索だけでお金持ちになる方法 著者:午堂登紀雄積極的に検索してお金持ちになろう

プログラミングの基礎:問題4.1

問題4.1解答 let baito_kyuyo y h = (y * 100 + 850) * h

読書メモ:マグネシウム文明論

タイトル:マグネシウム文明論 著者:矢部孝/山路達也 発売日2010年か。いまどうなってるんだろ?

読書メモ:理解する技術

タイトル:理解する技術 著者:藤沢晃治野菜を粉末状にして食べることなんかほとんどないやろ

読書メモ:わかったつもり 読解力がつかないほんとうの原因

タイトル:わかったつもり 読解力がつかないほんとうの原因 著者:西林克彦ネコかわいい

読書メモ:「知」の強化書

タイトル:「知」の強化書 著者名:本郷陽二この本で世界樹の迷宮に出てくるアリアドネの糸の元ネタがわかった。

4章入出力操作プログラム

@SCREEN D=A @R1 M=D @8192 D=A @R1 M=M+D (press) @KBD D=M @white D;JEQ @SCREEN D=A @R0 //カウンタ M=D (bloop) @R0 D=M @R1 D=D-M @press D;JGE //スクリーンに書き込み @R0 A=M M=-1 //加算処理 @R0 M=M+1 @bloop 0;JMP (white) //初期化 //@R0 //M=0 …

4章乗算プログラム

@R2 M=0 (LOOP) @R1 D=M @END D;JLE @R0 D=M @R2 M=D+M @R1 M=M-1 @LOOP 0;JMP (END)4章のプロジェクトで書いた乗算するプログラムです

数学読本を読んでます

去年の12月ぐらいから、松坂 和夫先生の数学読本を読んでます。 内容は高校+αの範囲を初歩から丁寧に解説されています。微積分をはやめにやりたかったので何章かとばしてますが、 今は、5巻目を読んでいるところです。この本、問題もついているのですが答…

4章機械語

4章のプロジェクトで、機械語のプログラム書いているときに気づいたのですが、 D=D+2のように直接2以上の数値は使えないんですね。2以上の数値で計算するには @2 D=D+Aのように@命令でAレジスタに指定した数値を格納してから、 Aレジスタを使って、2以上の…

2章ALU

HDLではif文が使えないので if nx then x = !x みたいなのはどうすればいいのか悩んだんですが、 単純にx = !xをあらかじめ計算しておいて、その後nxで 分岐させるというやり方で実装しました。 例えば上の例だと、 Not16(in=x,out=x2);//あらかじめ計算 Mux…

5章CPU

コンピュータシステムの理論と実装の5章のCPUの実装の部分で苦戦して、 完成するの1ヶ月ぐらいかかりました。 せっかくなんでコードを載せておこうと思います。 CHIP CPU { IN inM[16], // M value input (M = contents of RAM[A]) instruction[16], // In…

「コンピュータシステムの理論と実装」を読んでいます

最近、「コンピュータシステムの理論と実装」という本を読んでいます。 NAND回路からはじめて、CPUを作ってその後、アセンブラ、バーチャルマシン、 コンパイラ、OSを順に実装していくという内容の本です。今、6章まで読んでいて、アセンブラを作っていると…