このブログは、旧・はてなダイアリー「檜山正幸のキマイラ飼育記 メモ編」(http://d.hatena.ne.jp/m-hiyama-memo/)のデータを移行・保存したものであり、今後(2019年1月以降)更新の予定はありません。

今後の更新は、新しいブログ http://m-hiyama-memo.hatenablog.com/ で行います。

2008-09-27から1日間の記事一覧

圏の組み合わせ幾何

いくつかのヒントを書く。高次セルを忘れる関手Cが高次圏だとして、|C|kはk次までのセルを考えた圏だとする。特に |C|0 = |C| = Obj(C) となる。|C|は忘却関手となり、次に述べるK(A)と随伴になる。このような随伴関係が一般化できないか。完全有向グラフAを…

レジスタの変化

レジスタ 命令 F ADD, SH*, EQ, GT, GE SP POP, PUSH, CALL, RET, OSP (Offset SP) FP CALL, RET IP J*, CALL, RET

どうしても必要な命令

定数生成 メモリからのロード、メモリへのストア レジスタ間転送 算術論理演算 比較演算(条件(condition)の生成) 無条件ジャンプ、条件ジャンプ Jamp and Link(呼び出し用) レジスタやスタックトップをターゲットとしたジャンプ(戻り用) 入出力 定数…

大きな戻り値

構造体は値としてやり取りできる(コンパイラがやってくれる) 呼ぶ側にバッファを準備してもらう。サイズも渡すのが吉。 呼ばれた側にある静的バッファを使う。マルチスレッドで無理がある。 呼ばれた側で動的メモリを確保して返す。free忘れで問題も起きる…

エラーの通知

エラーは起きないと仮定 正常値と異常値を戻り値で 大域変数にエラー情報 エラー変数を出力引数に 戻り値を出力引数に 構造的データを使う 例:num ::= [0-9]* (8桁まで) エラーはBAD_CHARとTOO_LONG。

いろいろなアドレス

int g[] = {1, 2};main(int argc) { int i = 1; int j = 2; char *pc = (char *)g; start: printf("g = %p\n", g); printf("&g[0] = %p\n", &g[0]); printf("&g[1] = %p\n", &g[1]); printf("g + 1 = %p\n", g + 1); printf("g + 2 = %p\n", g + 2); printf(…

トレードオフ

現状では: IP(命令ポインタ)、SP(スタックポインタ)、FP(フレームポインタ)、F(フラグ)を直接見ることもさわることはできない。 関数のプロローグコード、エピローグコードはほとんど不要。FPの保存、スタックのアンワインド(後かたづけ、たたむこ…

Toyアーキテクチャのヒント

単に箇条書きで羅列。 昔はスタックがない機械もあったらしい。まー、自前でも作れるが、メンドーだからスタックはあったほうがいい。 明確なコール/リターン命令がない機械もある。が、メンドーだからあったほうがいい。 コールで、戻り番地(当該命令の次…

低水準データ型

numeric character boolean

足し算/引き算について、知らなかったよ

被加数 + 加数 = 和 被減数 - 減数 = 差 augend + addend = sum minuend - subtrahend = diffrerence 英語ではオシリにendが付くのね(オシリだからそりゃendだろうって?)