FrontPage

Instruction Set Architectures(命令セットアーキテクチャ)

Overview

Instruction Set Architectures(命令セットアーキテクチャ)

最も重要な抽象化の一つであり、ハードウェアと最低水準のソフトウェアとの間のインターフェース。
2進数の機械語によるプログラムを正しく実行させる機構を提供し、そのために必要なすべての要素(命令、レジスタ、メモリアクセス、入出力など)を含む。


  • Abstruction(抽象化)
    コンピュータの設計におけるアイディアの一つが抽象化。
    層別して設計を行うことにより、上位レベルにおいて下位レベルの詳細を隠し、モデルを単純化する。
  • Instruction(命令)
    実行する操作の種類を指定するオペコード(opecode)と操作される対象を指定するオペランド(operand)から成る。
    • Arithmetic/Logical instruction(算術・論理演算命令)
       MIPSの命令の例:add,sub,and,or,nor,sll(shift left logical)など
    • Data transfer instruction(データ転送命令)
       MIPSの命令の例:lw(load word),sw(store word)など
    • Conditional branch instruction(条件分岐命令)
       MIPSの命令の例:beq(branch on equal),slt(set on less than)など
  • MIPSの命令の形式の例
    ・MIPSは命令の長さは32bit
    • R(Register/direct)形式:算術命令の形式
      op(オペコード/6bit)rs(第一のソース・オペランドのレジスタ/5bit)rt(第二のソース・オペランドのレジスタ/5bit)rd(デスティネーション・オペランドのレジスタ/5bit)shamt(シフト量/5bit)funct(機能/6bit)
      例えば
      add $t0, $s1, $s2#レジスタ$s1の内容 + レジスタ$s2の内容 → レジスタ$t0
      ならば
      oprsrtrdshamtfunct
      00000010001100100100000000100000
        最初と最後のフィールドが加算を意味する
        2番目のフィールドは加算の第1オペランドのレジスタの番号(17=$s1)を表す
        3番目のフィールドは加算の第2オペランドのレジスタの番号(18 = $s2)を表す
        4番目のフィールドは和を受け取るレジスタの番号(8 = $t0)を表す
        5番目のフィールドはこの命令では使用しないので値が0に設定されている
  • I(Immediate)形式:データ転送命令の形式
    op(オペコード/6bit)rs(ソース・オペランドのレジスタ/5bit)rt(デスティネーション・オペランドのレジスタ/5bit)adress(オフセット/16bit)
    例えば
    lw $t0,1200($t1)#メモリ上の($t1 + 1200)番地 → レジスタ$t0(読み込み)
    ならば
    oprsrtaddress
    10001101001010000000 0100 1011 0000
      最初のフィールド(op)はlw(load word)を意味する
      第二のフィールド(rs)はベース・レジスタ(9 = $t1)が読み込まれる
      第三のフィールド(rt)はデスティネーション・レジスタ(8 = $ t0)が読み込まれる
      最後のフィールドはオフセットを表す(1200)

Instruction Set Design Issues

  • Where are operands stored?
     accumulator, registers, memory, stack
  • How many explicit operands are there?
     0, 1, 2, or 3
  • How is the operand location specified?
     register, immediate ,indirect,...
  • What type and size of operands are supported?
     byte, int, float, double, string, vector...
  • What operations are supported?
     add, sub, mul, move, compare...

Classifying ISAs

https://i.ibb.co/d4YL9fY/q-LCCQt-MZHP457-Z41560928415.jpg

Accumulator Architecture(before 1960)

 have an implicit operand, the accumulator.
 have an explicit operand, which is memory address.

load A
add B#acc+mem[B] → acc
store C#store the result back into memory form accumulator
  • Pros
    • Very low hardware equirements
    • Easy to design
    • short instructions
  • Con
    • メモリへのポインタができない

Stack Architecture(1960s to 1970s)

 have no explicit operands, since operation on the stack is implicit.

push A#push into the stack
push B
add#top of stack+next of stack → top of stack
pop C#push out of the stack
  • Pros
    • Short instructions
    • Compiler is easy to write
  • Cons
    • Code is inefficient(複数の命令発行ができない)

General Purpose Register Architecture

Register-Register(Load/Store) Architecture(1960s to present, e.g.MIPS,ARM)

 (also called RISC(Reduces Instruction Set Computer))
 have three operands, where all operands are registers.

load R1, A#mem[A] → R1
load R2, B#mem[B] → R2
add R3, R1, R2#R1 + R2 → R3
store C, R3#R3 → mem[C]
  • Pros
    • Simple fixed-length instructions
  • Cons
    • Higher instruction count

Register-Memory Architecture(1970s to present, e.g. Intel 80x86)

 have two operands, where one is a register and the other is a memory address.

load R1, A#mem[A] → R1
add R1, B#R1 + mem[B] → R1
store C, R1#R1 → mem[C]
  • Pros
    • Small instruction count
  • Cons
    • Result destroys an operand
    • Instruction length varies(memory-memoryよりは簡単)

Memory-Memory Architecture(1970s to 1980s, e.g.VAX-11,PDP-11)

 (also called CISC(Complex Instruction Set Computer))
 have two or three operands, where all operands are memory addresses.

add A, B#mem[A] + mem[B] → mem[A]
add C, A, B#mem[A] + mem[B] → mem[C]
  • Pros
    • No register wastage
    • Lowest instruction count (0番地と1番地の中身を足して2番地にしまう操作がたった一つの操作で済む。)
  • Cons
    • Large variation in instruction length
    • Huge memory traffic

CISC vs. RISC

CISC

一つ一つの命令の機能を高めることで、機械語の機能をなるべく高級言語に近づける、という思想で作られたため、機能の高い命令を実行することで命令数を減らせるという利点がある一方で、複雑な命令の実装が難しく、周波数を上げにくいという欠点があった。

RISC

機能が低いが単純で、固定長の命令を、高い周波数で実行する、という全く反対の概念のISA設計をUCBのPatterson, StanfordのHennessyらが提案。 CISC対RISC論争が展開されたが、80年代後半に決着が着いた。 RISCの単純な命令の方が実装が簡単で、複雑な命令も簡単な命令を組み合わせることで実現可能。

References

  1. David A. Patterson and John L. Hennessy(2013). COMPUTER ORGANIZATION AND DESIGN FIFTH EDITION. Morgan Kaufmann
  2. Irfan Ali(2019). Instruction Set Architecture. https://www.slideshare.net/Haris456/instruction-set-architecture
  3. 天野英晴(2018). マイクロプロセッサ特論 第5回 RISCの命令セットアーキテクチャ. http://www.am.ics.keio.ac.jp/chuo_aki/isa.pdf
  4. Alok N. Choudhary(2005). Computer Architecture Lecture 3 - Instruction Set Architecture. http://www.ece.northwestern.edu/~kcoloma/ece361/lectures/Lec03-isa.pdf

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2019-06-20 (木) 01:13:48 (852d)