ぱたへね

はてなダイアリーはrustの色分けができないのでこっちに来た

パタヘネ

The RISC-V Reader: An Open Architecture Atlas

パターソン先生の動画を見て、これは読まねばならぬと思い読んでみました。 https://www.amazon.com/RISC-V-Reader-Open-Architecture-Atlas/dp/0999249118/ Amazon.co.jpでは取り扱ってないけど、.comでは普通に買えます。不当に高いのをつかまないように。…

パタヘネ、ヘネパタの歴代表紙

ようやく私の家にもComputer Architecture : A Quantitative Approach (5TH)が届きました。今までの陰気な表紙と打って変わって、白をバックに青空と雲というさわやかな表紙に変わりました。外に見える雲はクラウドコンピューティングをイメージしているの…

RISCマシーンのデータパス

LispマシーンCADRのデータパスを調べているうちに、他のプロセッサのデータパスも整理したくなったので、まとめてみました。データパス(datapath)とは、プロセッサに限らず、デジタル回路のデータ処理を図にするときに、どこからデータが入ってきて、どこに…

7章 OpenSPARC T1 の Memory Hierarchy

OpenSPARC Internals からOpenSparc T1のメモリ階層をまとめてみました。パタヘネでは、第7章で出てくる話です。図の一番下にSPARCのcoreがあります。一つのT1チップには、8個のcoreが搭載されています。各coreについて、Iキャッシュが16Kバイト、Dキャッシ…

Exercise 2.52 Instruction Set Styles

このCソースに対して等価なアセンブラを書き、4つのアーキテクチャを比較しなさい。 a = b + c; b = a + c; d = a - b; Accumulator Accumulatorの場合は8命令で実行できます。 load AddressB add AddressC # b + c store AddressA add AddressC # a + c sto…

Instruction Set Styles

a = b +c; を、Accumulator、Memory-memory、Stack、Load-storeの命令セットスタイルでどうなるか考えて考えようという問題。a,b,cはメモリ上の変数です。Load-storeの命令スタイルは、教科書にでてくるMIPSのスタイルです。 Accumulator Accumulatorの場合…

SPEC2006

教科書に出てくるSPEC(Standard Performance Evaluation Corporation)について、簡単に調べました。総本山 http://www.specbench.org/CPU関連の最新はSPEC2006になります。 http://www.specbench.org/cpu2006/INT版の一覧はこちらになります。 http://www.sp…

PowerPC

In More DepthにPowerPCの特徴が書いてあったのでまとめました。PowerPCはMIPSに近いアーキテクチャを持っています。一番の違い(The primary difference)は、2つの追加のアドレッシングモードと、いくつかの命令です。 Indexed Addressing と Update Address…

Exercise 2.22 MIPS Coding and ASCII Strings その2

2.22 [20] Write a procedure, bcount, in MIPS assembly language. The bcount procedure takes a single argument, which is a pointer to a string in register $a0, and it returns a count of the total number of b characters in the string in regis…

Exercise 2.21 MIPS Coding and ASCII Strings

[30] Write a program in MIPS assembly language to convert an ASCII decimal string to an integer. Your program should expect register $a0 to hold the address of a null-terminated string containing some combination of the digits 0 through 9.…

Exercise 2.20

null-terminate された文字列"A byte is 8 bits"のバイト数を求めなさい。 16文字+nullなので、合計17バイトになります。コンパイラを使って確認してみましょう char s[] = "A byte is 8 bits"; をsde-gccでコンパイルすると、こうなります。 .file 1 "c.c"…

Exercise 2.19

IrisとJulieの名前を、ASCIIとUnicode(Basic Laten character set)で表現しなさい。 テキストエディタで書いて、各文字コードで保存、バイナリエディタで覗いてみたら簡単にわかります。 ASCII Iris 49 72 69 73 Julie 4A 75 6C 69 65 UTF-8 Iris 49 72 69 7…

Exercise 2.16-2.18 Fibonacci number

フィボナッチ数を、再帰バージョンと末尾再帰バージョンにしたときの比較です。SICPの1.2.2 Tree Recursionと全く同じ問題ですね。 http://mitpress.mit.edu/sicp/full-text/book/book-Z-H-11.html#%_sec_1.2.2 再帰バージョン iint fib(int n){ if (n == 0)…

関数呼び出しまとめ

5つのプロセッサで、関数呼び出しの方法をまとめました。 MIPS sparc sh ARM x86 レジスタ渡し可能な引数 4個まで 6個まで 4個まで 4個まで スタックを使用 戻り先の格納先 register register stack register stack 関数の呼出し jal call jsr bl call 関数…

関数呼び出しsh、ARM、x86編

残りのプロセッサについても、さっとまとめました。 Cソース/アセンブラはここにまとめてあります。 SH SHの場合、引数が4つまではレジスタ渡し、5つ目からスタックを使用します。 関数の呼出はjsr命令を使い、戻るときはrts命令を使います。 他のRISCプロセ…

関数呼び出しsparc編

register window Sparcプロセッサは、register windowと呼ばれる一風変わったアーキテクチャを採用しています。プロセッサ自体は、64〜528個の汎用レジスタを持っており、ソフトウェアからは32個のレジスタにアクセスできます。32個のうち24個は汎用レジスタ…

関数呼び出しMIPS編

MIPSの関数呼び出し規約を、gccを使って確認してみました。教科書によると、$4〜$7($a0〜$a3)が引数、$2〜$3($v0〜$v1)が戻り値として使われます。 元となるソース 違いを確認するために、引数が4個の関数と、引数が5個の関数を呼び出し、gccの出したアセン…

Digital Design and Computer Architecture

パタヘネに関係する本の紹介です。 http://www.elsevier.com/wps/find/bookdescription.cws_home/710749/description#description http://www.amazon.com/Digital-Design-Computer-Architecture-Harris/dp/0123704979 Amazon.comではベタほめですが、私の評…

Exercise 2.13 control flow graph

このプログラムのcontrol flow graphを書きなさい。 for(i=0;i

jump table

jump tableとは何か jump tableとは、アセンブラやCにおいて制御の飛び先(jump先)を配列にして並べた物です。jump tableのイメージ図はこのようになります。Cのswtich文のように、同じような条件で複数の飛び先がある場合を考えます。 int foo(int k){ int f…

Exercise 2.10 C言語のswitch文

Cのswtich文がどのようにアセンブラになるかの話。 これが教科書に載っているCのソースです。 switch (k) { case 0:f = i + j; break; /* k = 0 */ case 1:f = g + h; break; /* k = 1 */ case 2:f = g - h; break; /* k = 2 */ case 3:f = i - j; break; /*…

Exercise 2.8

このCソースがどのようなアセンブラになるかという問題 data = receiver.receivedByte; receiver.ready = 0; receiver.enable = 1;gccの出力から該当箇所を抜き出しました。 data = receiver.receivedByte; receiverの値をメモリからレジスタへ転送、右シフ…

bit field

C のbit fieldの話です。実際にどのようなコードになるかはコンパイラ依存になりますが、Cではビットフィールドが定義できます。教科書の例で行くと、 struct { unsigned int ready: 1; unsigned int enable: 1; unsigned int receivedByte: 8; }receiver;こ…

Exercise 2.7

[10] The following MIPS instruction sequence could be used to implement a new instruction that has two register operands. Give the instruction a name and describe what it does. Note that register $t0 is being used as a temporary. srl $s1, …

Exercise 2.6

Some computers have explict instructions to extract an arbitrary field from a 32-bit register and to place it in the least significant bit of a register. The figure below shows the desired operatin[Figure]Find the shortest sequence of MIPS…

Exercise 2.5

CD-ROMから Consider the following code used to implement the instruction sllv $s0, $s1, $s2 # which uses the least significant 5 bits of the value in register $s2 to specify the amount register $s1 should be shifted left:Add comments to th…

Exercise 2.2-2.4

Exercise 2.2 What binary number does this hexadecimal number represent:0x7FFF_FFFA? What decimal number does it represent? 0x7FFF_FFFAは2進で表すと、0111_1111 1111_1111 1111_1111 1111_1100。十進で表すと、2147483642。 Exercise 2.3 What hexa…

Exercise 2.1

Exercise 2.1 Using the MIPS program in Exercise 2.34 (with bugs intact), determine the instruction format for each instruction and the decimal values of each instruction field. Exercise 2.34のコードをPCspimで読み込んで、コードをダンプしま…

2章 mips シミュレータの準備

Exercise 2.1 をする前準備 exercise 2.34のバグ付きプログラムを使って、各命令についてフォーマットと、10進の値を確認しなさい。まじめにやろうとするとアセンブラが必要なんですが、mipsシミュレータでさくっと確認しましょう。 手順を簡単にまとめまし…

パタヘネを勉強するための自分用ルール

臨機応変に 自分用ルール 主に章末の練習問題と、CDROMを中心に勉強する。練習問題は基本的には解いていきたいけど、初版のやつは「CPUをHDLで書け」とか無茶な練習問題もあったので、ボリューム次第。 プロセッサ周辺は、たとえ少しでもVerilogとかSystemC…