情報システム基盤学基礎1 コンピュータアーキテクチャ編

Slides:



Advertisements
Similar presentations
1 B10 CPU を作る 1 日目 解説 TA 高田正法
Advertisements

CPU設計と パイプライン.
2006/10/26 山下 諒蔵 佐藤 春旗 前田 俊行 大山 恵弘 佐藤 秀明 住井 英二郎
Ibaraki Univ. Dept of Electrical & Electronic Eng.
榮樂 英樹 LilyVM と仮想化技術 榮樂 英樹
計算機システムⅡ 主記憶装置とALU,レジスタの制御
CPU実験 第1回中間発表 4班 瀬沼、高橋、津田、富山、張本.
情報システム基盤学基礎1 コンピュータアーキテクチャ編 第2回 命令
Ibaraki Univ. Dept of Electrical & Electronic Eng.
坂井 修一 東京大学 大学院 情報理工学系研究科 電子情報学専攻 東京大学 工学部 電気工学科
実行時のメモリ構造(1) Jasminの基礎とフレーム内動作
コンピュータ系実験Ⅲ 「ワンチップマイコンの応用」 第2週目
2012年度 計算機システム演習 第4回 白幡 晃一.
App. A アセンブラ、リンカ、 SPIMシミュレータ
2006年度 計算機システム演習 第4回 2005年5月19日.
第4回目 2006/05/08.
ソフトウェアとのインターフェース.
計算機システムⅡ 命令セットアーキテクチャ
計算機システム ハードウェア編(第3回) ~ ノイマン型コンピュータ ~.
  【事例演習6】  数式インタプリタ      解 説     “インタプリタの基本的な仕組み”.
プログラムはなぜ動くのか.
計算機基礎Ⅱ,Ⅲ (指導書 pp. 76~94) 改訂:佐竹 純二 (作成:岡本 吉央).
高性能コンピューティング論2 第1回 ガイダンス
2016年度 プログラミングⅠ ~ 内部構造と動作の仕組み(1) ~.
基本情報技術概論(第8回) 埼玉大学 理工学研究科 堀山 貴史
「ソフトウェアのしくみ」.
第7回 2006/6/12.
第3回目 2006/05/01.
2012年度 計算機システム演習 第6回 福田 圭祐.
計算機システム 第1回 2006/04/22.
・ディジタル回路とクロック ・プロセッサアーキテクチャ ・例外処理 ・パイプライン ・ハザード
勉強会その1    2016/4/ 分35秒 コンピュータアーキテクチャとは? コンピュータの構成 命令の実行.
コンピュータを知る 1E16M009-1 梅津たくみ 1E16M017-8 小沢あきら 1E16M035-0 柴田かいと
坂井 修一 東京大学 大学院 情報理工学系研究科 電子情報学専攻 東京大学 工学部 電気工学科
勉強会その3    2016/5/1 10 8分35秒 データの表現 演算.
計算機システム 第2回 2011/05/02(月) 「コンピュータ・アーキテクチャへのいざない」
条件分岐と繰り返し.
コンピュータ系実験Ⅲ 「ワンチップマイコンの応用」 第1週目 アセンブリ言語講座
TA 高田正法 B10 CPUを作る 3日目 SPIMの改造 TA 高田正法
第6回 6/4/2011 状態遷移回路とシングルサイクルCPU設計
ディジタル回路の設計と CADによるシステム設計
計算機構成 第3回 データパス:計算をするところ テキスト14‐19、29‐35
情報とコンピュータ 静岡大学工学部 安藤和敏
先週の復習: CPU が働く仕組み コンピュータの構造 pp 制御装置+演算装置+レジスタ 制御装置がなければ電卓と同様
第5回 メモリ管理(2) オーバレイ方式 論理アドレスとプログラムの再配置 静的再配置と動的再配置 仮想記憶とメモリ階層 セグメンテーション
坂井 修一 東京大学 大学院 情報理工学系研究科 電子情報学専攻 東京大学 工学部 電気工学科
Ibaraki Univ. Dept of Electrical & Electronic Eng.
コンピュータアーキテクチャ 第 9 回.
コンピュータアーキテクチャ 第 2 回.
コンピュータアーキテクチャ 第 4 回.
計算機アーキテクチャ1 (計算機構成論(再)) 第一回 計算機の歴史、基本構成、動作原理
2013年度 プログラミングⅠ ~ 内部構造と動作の仕組み(2) ~.
2017年度 プログラミングⅠ ~ 内部構造と動作の仕組み(1) ~.
コンピュータアーキテクチャ 第 3 回.
コンピュータアーキテクチャ 第 2 回.
コンピュータアーキテクチャ 第 5 回.
計算機アーキテクチャ1 (計算機構成論(再)) 第二回 命令の種類と形式
アルゴリズムとデータ構造1 2009年6月15日
コンピュータアーキテクチャ 第 4 回.
第4回 CPUの役割と仕組み2 命令の解析と実行、クロック、レジスタ
プロセッサ設計支援ツールを用いた 独自プロセッサの設計
コンピュータアーキテクチャ 第 3 回.
コンピュータアーキテクチャ 第 5 回.
言語プロセッサ 第12日目 平成20年1月9日.
オブジェクト指向言語論 第二回 知能情報学部 新田直也.
アルゴリズムとデータ構造 2010年6月17日
2014年度 プログラミングⅠ ~ 内部構造と動作の仕組み(1) ~.
Ibaraki Univ. Dept of Electrical & Electronic Eng.
6.5 最終コード生成 (1)コードの形式 ①絶対2進コード(AB : absolute binary) 命令後のオペランドが絶対番地指定。
情報システム基盤学基礎1 コンピュータアーキテクチャ編
Presentation transcript:

情報システム基盤学基礎1 コンピュータアーキテクチャ編 第2回 命令 高性能コンピューティング学講座 八巻 隼人 yamaki@hpc.is.uec.ac.jp 10 8分35秒

ソフトウェア

プログラムとは 身近な例 Word Excel iTunesなど コンピュータに行わせたい処理を記述したもの

プログラムの作り方 プログラム(プログラミング)言語 機械語 よく耳にするC言語とかJavaとか 高水準言語(高級言語)と呼ばれる  プログラムの作り方 プログラム(プログラミング)言語 よく耳にするC言語とかJavaとか 高水準言語(高級言語)と呼ばれる 人が理解しやすい命令シーケンス プロセッサは理解できない プロセッサの理解できる形に変換する必要がある 機械語 プロセッサの理解できる命令シーケンス 0と1による2進数の数値列 正しくは,アセンブリ言語を経て機械語に変換される

プログラム言語からCPU実行までの流れ プログラム言語→アセンブリ言語→機械語 高水準言語 メモリ 命令の 読み出し 命令の実行 コンパイラ 100101001010100 000001011011100 111001111010011 命令の実行 コンパイラ Compiler 命令の 書き込み コンパイル 低水準言語 アセンブラ assembler アセンブル

命令とデータの格納 プログラム内蔵方式 ノイマン型アーキテクチャ ハーバード型アーキテクチャ  命令とデータの格納 プログラム内蔵方式 ノイマン型アーキテクチャ ハーバード型アーキテクチャ メモリ メモリ lw $4, 0($1) 共用バス lw $4, 0($1) 命令バス lw $5, 4($1) lw $5, 4($1) add $2, $4, $5 add $2, $4, $5 命令 データ メモリ データバス Data 1 Data 1 Data 2 Data 2 命令とデータを同一メモリに格納 作りが単純 命令とデータのアクセス競合により フォンノイマンボトルネックが顕著 命令とデータを別々のメモリに格納 作りは複雑 遅延(latency)の隠ぺいが可能 現在はノイマン型にハーバードを取り入れたハイブリッド型

メモリとプロセッサの関係 アドレスとプログラムカウンタ データとアドレス 命令のアドレス プログラムカウンタ(PC)  メモリとプロセッサの関係 アドレスとプログラムカウンタ データとアドレス データ: 物 (ex. 電通大) アドレス: 場所 (ex. 調布市調布ヶ丘1-5-1) 命令のアドレス プログラム内蔵方式では 命令もメモリに格納 命令にもアドレスが存在 プログラムカウンタ(PC) プロセッサ内にある小さなメモリ 実行する命令のアドレスを示す プロセッサはPCにしたがって命令をメモリから取得 アドレス メモリ プロセッサ add $t1, $s1, $s2 add $t1, $s1, $s2 PC 8 4 4 add $t2, $s3, $s4 add $t2, $s3, $s4 8 sub $s0, $t2, $t3 sub $s0, $t2, $t3 64 100 68 10 72 500

なぜアセンブリ言語を経るのか? プログラム言語からCPU実行までの流れ プログラム言語→アセンブリ言語→機械語 高水準言語 メモリ 命令の 読み出し 100101001010100 000001011011100 111001111010011 命令の実行 コンパイラ Compiler 命令の 書き込み コンパイル 低水準言語 アセンブラ assembler なぜアセンブリ言語を経るのか? アセンブル

CPUと命令セットアーキテクチャ 命令セットアーキテクチャ CPUによって命令の形が違う 実行できる命令も異なる(機械語も異なる) 複雑な命令の採用→性能向上,ハードウェアの複雑化 単純な命令の採用→性能低下,ハードウェアの簡易化 さまざまな命令セットアーキテクチャが存在 例: x86, MIPS, ARM, POWER, SPARC, など

命令の実行

命令セットアーキテクチャの例 MIPS命令セットアーキテクチャ 主に組み込みシステムで使われていた 特徴:単純で理解しやすい  命令セットアーキテクチャの例 MIPS命令セットアーキテクチャ 主に組み込みシステムで使われていた 例: ルータやプリンタ,NINTENDO64, PS, PS2 など 特徴:単純で理解しやすい 命令長を 32 ビットに統一 32 本の汎用レジスタと32 本の浮動小数点レジスタ レジスタの幅は 32 ビット(のちに 64 ビット)

命令の実行 レジスタ 命令の実行 基本的に命令はレジスタを介して実行される プロセッサ内にある高速&小容量の記憶装置  命令の実行 レジスタ プロセッサ内にある高速&小容量の記憶装置 同時に格納できるデータは高々 64個程 一時的なデータ置き場として使用 命令の実行 メモリ上のデータの値をレジスタにコピー レジスタの値を使って演算を繰り返す 結果が入ったレジスタの値をメモリに書き戻す 基本的に命令はレジスタを介して実行される メモリへのアクセスは低速なため メモリ プロセッサ PC レジスタ lw $s1, 0($t0) lw $s2, 4($t0) lw $s3, 8($t0) lw $s4, 16($t0) add $t1, $s1, $s2 add $t2, $s3, $s4 sub $s0, $t1, $t2 sw $s0, 16($t0) ① ② ③ レジスタ

命令とプログラム 命令の基本構造 オペコード オペランド 処理の種類 例: add, sub, lw ,swなど 処理の対象  命令とプログラム 命令の基本構造 オペコード 処理の種類 例: add, sub, lw ,swなど オペランド 処理の対象 例: $s0, 0($t0), 100 など オペランドの数は オペコードによって異なる オペコード オペランド lw $s1, 0($t0) lw $s2, 4($t0) lw $s3, 8($t0) lw $s4, 16($t0) add $t1, $s1, $s2 add $t2, $s3, $s4 sub $s0, $t1, $t2 sw $s0, 16($t0)

フィールドと命令形式 アセンブリ言語と機械語の対応例 命令形式 アセンブリ言語: add $t1, $s1, $s2 機械語: フィールドの構成の違いによる命令の分類 MIPS の場合は 3 種類の命令形式が存在  → R形式,I形式,J形式 フィールド 32ビット 000000 10001 10010 01001 00000 100000 6ビット 5ビット 5ビット 5ビット 5ビット 6ビット (add) ($s1) ($s2) ($t1) (未使用) (add)

MIPS の命令形式 R 形式 I 形式 J 形式 op rs rt rd shamt funct op rs rt 6ビット 5ビット 5ビット 5ビット 5ビット 6ビット op rs rt constant or address 6ビット 5ビット 5ビット 16ビット op address 6ビット 26ビット op: オペコード rs: 第1オペランド rt: 第2オペランド rd: 第3オペランド shamt: シフト量 funct: 機能コード constant: 定数 address: アドレス

MIPS 命令の種類 算術演算命令 論理演算命令 データ転送命令 分岐命令

算術演算命令 四則演算などの算術演算を行う命令 命令形式は R 形式または I 形式 オペランドはレジスタまたは定数(即値) 例: add, sub, mult, div, addi など 命令形式は R 形式または I 形式 オペランドはレジスタまたは定数(即値) MIPS の算術演算ではメモリアドレスを指定できない 命令形式 アセンブリ言語 意味 機械語 000000 10001 10010 01001 00000 100000 add $t1, $s1, $s2 $t1 = $s1 + $s2 $s1 $s2 $t1 add R 000000 10000 10011 01001 00000 100010 sub $t1, $s0, $s3 $t1 = $s0 - $s3 $s0 $s3 $t1 sub 001000 10000 01001 0000000001000010 I addi $t1, $s0, 66 $t1 = $s0 + 66 addi $s0 $t1 66

論理演算命令 論理演算を行う命令 命令形式は R 形式または定数 オペランドはレジスタまたは定数 例: and, or, andi, sll など 命令形式は R 形式または定数 オペランドはレジスタまたは定数 メモリアドレスの指定不可 命令形式 アセンブリ言語 意味 機械語 000000 10001 10010 01001 00000 100100 and $t1, $s1, $s2 $t1 = $s1 & $s2 $s1 $s2 $t1 and R 000000 00000 10000 01001 00100 000000 sll $t1, $s0, 4 $t1 = $s0 << 4 $s0 $t1 4 sll 001100 10000 01001 0000000000001010 I andi $t1, $s0, 10 $t1 = $s0 & 10 andi $s0 $t1 10

メモリ  レジスタ間のデータ転送を行う命令 例: lw, sw など 命令形式は I 形式 オペランドはレジスタまたはアドレス データ転送命令 メモリ  レジスタ間のデータ転送を行う命令 例: lw, sw など 命令形式は I 形式 オペランドはレジスタまたはアドレス 命令形式 アセンブリ言語 意味 機械語 100011 10010 01000 0000000000000100 lw $s2, 4($t0) $s2=M[$t0+4] lw $s2 $t0 4 I 101011 10000 01000 0000000000010000 sw $s0, 16($t0) M[$t0+16]=$s0 sw $s0 $t0 16 ※ M[X]: メモリアドレス X に対応するメモリ上のデータ

分岐命令 次に実行する命令を変更する命令※ 命令形式は R 形式,I 形式,J 形式 オペランドはレジスタ,アドレス,定数 ※ 通常はメモリ上の並びの   次の命令が実行される 次に実行する命令を変更する命令※ 無条件に変更する命令: j, jr など(goto 文,switch 文に相当) 条件に応じて変更する命令: slt + beq, bne など(if 文に相当) 命令形式は R 形式,I 形式,J 形式 オペランドはレジスタ,アドレス,定数 命令形式 アセンブリ言語 意味 機械語 000010 00000000000000100111000100 J j 10000 go to 10000 j 2500※ 000000 00000 01001 00000 00000 001000 R jr $t1 go to $t1 $t1 jr if ($s2 < $s3) $s1 = 1; else $s1 = 0; 000000 10010 10011 10001 00000 101010 R slt $s1, $s2, $s3 $s2 $s3 $s1 slt if ($s1 == $s2) go to 100; 000100 10001 10010 0000000000011001 I beq $s1, $s2, 100 beq $s1 $s2 25※ ※ 2ビット左シフトしたものをアドレスとして使用するため

MIPS のアドレシングモード アドレシングモード MIPS のアドレシングモード オペランドの解釈方法 命令によって異なる 即値アドレシング 命令中に指定された定数をオペランドとする (例: addi $t1, $s0, 66) レジスタアドレシング レジスタをオペランドとする (例: sub $t1, $s0, $s3) ベース相対アドレシング 命令中の定数とレジスタの和によってオペランドのアドレスを表す (例: lw $s2, 4($t0)) PC相対アドレシング 命令中の定数と PC の和によってメモリアドレスを表す (例: beq $s1, $s2, 100) 疑似直接アドレシング 命令中の 26 ビットと PC の上位ビットを連結したものを分岐アドレスとする (例: j 10000)

プログラムの実行例(分岐を含まない場合) $s2 = M [1024 + 4] アドレス メモリ プロセッサ $s1 = M [1024 + 0] lw $s1, 0($t0) lw $s1, 0($t0) 実行中 の命令 PC 4 4 lw $s2, 4($t0) lw $s2, 4($t0) 8 lw $s3, 8($t0) lw $s3, 8($t0) レジスタ 12 lw $s4, 16($t0) lw $s4, 12($t0) 16 add $t1, $s1, $s2 add $t1, $s1, $s2 20 8 ($t0) add $t2, $s3, $s4 add $t2, $s3, $s4 1024 24 9 ($t1) sub $s0, $t1, $t2 sub $s0, $t1, $t2 28 10 ($t2) sw $s0, 16($t0) sw $s0, 20($t0) 16 ($s0) 17 ($s1) 1024 100 100 18 ($s2) 1028 10 10 19 ($s3) 1032 42 42 20 ($s4) 1036 3 3 1040

プログラムの実行例(分岐を含まない場合) $t1 = $s1 + $s2 $s0 = $t1 - $t2 $t2 = $s3 + $s4 アドレス メモリ プロセッサ lw $s1, 0($t0) lw $s1, 0($t0) 実行中 の命令 PC 16 20 12 24 lw $s4, 16($t0) 4 lw $s2, 4($t0) lw $s2, 4($t0) 8 lw $s3, 8($t0) lw $s3, 8($t0) レジスタ 12 lw $s4, 12($t0) lw $s4, 16($t0) 16 add $t1, $s1, $s2 add $t1, $s1, $s2 20 8 ($t0) add $t2, $s3, $s4 add $t2, $s3, $s4 1024 24 9 ($t1) sub $s0, $t1, $t2 sub $s0, $t1, $t2 110 28 10 ($t2) sw $s0, 20($t0) sw $s0, 16($t0) 45 16 ($s0) 65 17 ($s1) 100 1024 100 100 18 ($s2) 10 1028 10 10 19 ($s3) 42 1032 42 42 20 ($s4) 3 1036 3 3 1040

プログラムの実行例(分岐を含まない場合) M [1024+16] = $s0 アドレス メモリ プロセッサ lw $s1, 0($t0) lw $s1, 0($t0) 実行中 の命令 PC 24 28 sub $s0, $t1, $t2 4 lw $s2, 4($t0) lw $s2, 4($t0) 8 lw $s3, 8($t0) lw $s3, 8($t0) レジスタ 12 lw $s4, 12($t0) lw $s4, 16($t0) 16 add $t1, $s1, $s2 add $t1, $s1, $s2 20 8 ($t0) add $t2, $s3, $s4 add $t2, $s3, $s4 1024 24 9 ($t1) sub $s0, $t1, $t2 sub $s0, $t1, $t2 110 28 10 ($t2) sw $s0, 16($t0) sw $s0, 16 ($t0) 45 16 ($s0) 65 65 17 ($s1) 100 1024 100 100 18 ($s2) 10 1028 10 10 19 ($s3) 42 1032 42 42 20 ($s4) 3 1036 3 3 1040

プログラムの実行例(分岐を含む場合) $s2 = $s2 + 1 アドレス メモリ プロセッサ 実行中 の命令 PC 12 4 8 4 8 if ($s1 == $s2) go to 20; $s2 = $s2 + 1 アドレス メモリ プロセッサ lw $s1, 0($t0) lw $s1, 0($t0) 実行中 の命令 PC 12 4 8 lw $s2, 4($t0) 4 lw $s2, 4($t0) lw $s2, 4($t0) 8 beq $s1, $s2, 20 beq $s1, $s2, 20 レジスタ 12 addi $s2, $s2, 1 addi $s2, $s2, 1 16 j 8 j 8 20 8 ($t0) 1024 9 ($t1) 10 ($t2) 16 ($s0) 17 ($s1) 2 1024 2 2 18 ($s2) 1 1028 19 ($s3) 20 ($s4)

プログラムの実行例(分岐を含む場合) go to 8 プロセッサ アドレス メモリ 実行中 の命令 PC 8 12 16 4 8 レジスタ if ($s1 == $s2) go to 20; アドレス メモリ lw $s1, 0($t0) lw $s1, 0($t0) 実行中 の命令 PC 8 12 16 addi $s2, $s2, 1 4 lw $s2, 4($t0) lw $s2, 4($t0) 8 beq $s1, $s2, 20 beq $s1, $s2, 20 レジスタ 12 addi $s2, $s2, 1 addi $s2, $s2, 1 16 j 8 j 8 20 8 ($t0) 1024 9 ($t1) 10 ($t2) 16 ($s0) 17 ($s1) 2 1024 2 2 18 ($s2) 1 1028 19 ($s3) 20 ($s4)

プログラムの実行例(分岐を含む場合) アドレス メモリ プロセッサ 実行中 の命令 PC 8 4 16 20 4 8 レジスタ 12 16 if ($s1 == $s2) go to 20; アドレス メモリ プロセッサ lw $s1, 0($t0) lw $s1, 0($t0) 実行中 の命令 PC 8 4 16 20 j 8 4 lw $s2, 4($t0) lw $s2, 4($t0) 8 beq $s1, $s2, 20 beq $s1, $s2, 20 レジスタ 12 addi $s1, $s1, 1 addi $s2, $s2, 1 16 j 8 j 8 20 8 ($t0) 1024 9 ($t1) 10 ($t2) 16 ($s0) 17 ($s1) 2 1024 2 2 18 ($s2) 2 1028 19 ($s3) 20 ($s4)

メモリ領域 プログラムとメモリ領域の関係 → メモリアクセスを高速化 システムソフトウェアがメモリを割り当てる 予約済み システムソフトウェアがメモリを割り当てる メモリをセグメント(領域)に分けて管理 テキスト(プログラム)領域: 命令を格納 静的データ領域: 静的データを格納 ヒープ領域: 動的データを格納 スタック領域: 関数呼び出し時にレジスタや         戻りアドレスを格納 頻繁にアクセスするアドレスをレジスタに保持 例:静的データセグメントの末尾($gp),   スタックの先頭($sp)など → メモリアクセスを高速化 PC テキスト (プログラム) 静的データ $gp ヒープ $sp スタック

MIPS のレジスタ規約 名前 レジスタ番号 用途 関数呼び出し時に退避するか $zero 定数 0 が常に格納されているレジスタ 定数 0 が常に格納されているレジスタ 該当しない $v0-$v1 2-3 結果および式の評価のための値 しない $a0-$a3 4-7 引数 $t0-$t7 8-15 一時 $s0-$s7 16-23 退避 する $t8-$t9 24-25 予備の一時 $gp 28 グローバルポインタ $sp 29 スタックポインタ $fp 30 フレームポインタ‡ $ra 31 戻りアドレス † 26-27番の汎用レジスタは OS のカーネルが使用するために予約されている ‡ フレームポインタ: スタック内の最も最近のフレーム領域の末尾を指すポインタ.   フレーム領域とは1回の関数呼び出しによって退避されたデータを格納した領域.

整列化制約とエンディアン 整列化制約 エンディアン 32 ビット(1ワード)のデータ(命令)を 4 の倍数のアドレスに配置 例: 0, 4, 8, …, 1024, 1028, … データへのアクセスを容易にするため エンディアン ワード内のデータの並び順 ビッグエンディアン: 最上位バイトが最小アドレスの位置 リトルエンディアン: 最上位バイトが最大アドレスの位置 命令セットアーキテクチャによって異なる ビッグエンディアン: MIPS, SPARC など リトルエンディアン: x86, ARM など メモリ 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 1 2 3 メモリ 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 1 2 3 lw $s1, 0($t0) lw $s2, 4($t0) lw $s3, 8($t0) lw $s4, 16($t0) add $t1, $s1, $s2 add $t2, $s3, $s4 sub $s0, $t1, $t2 sw $s0, 20($t0) sw $s0, 16($t0) 整列化 ビッグエンディアン 2048 0A 0B 2049 2050 0C 0D 2051 0A0B0C0D 0D 2048 0C 2049 0B 2050 0A 2051 リトルエンディアン

x86, i386 x86-64 (x64) その他の命令セットアーキテクチャ Intel 8086, Intel 80186, Intel 80286, Intel 80386… Intelの命令セット.PC やサーバ用途の大多数のプロセッサが採用 x86は16bitから始まり32bit拡張(これがi386)、64bit拡張(IA-64…普及せず) 主な特徴 命令長が命令によって異なる 汎用レジスタが少ない(8本) 1命令で複雑な処理が可能 例: メモリから読み込んだ値にレジスタの値を加算し,    結果をメモリに格納 x86-64 (x64) x64はAMD社の開発した、x86の命令セットを64bitに拡張したもの 64bitの命令セットアーキテクチャはこっちがメジャー