SlideShare ist ein Scribd-Unternehmen logo
1 von 17
Downloaden Sie, um offline zu lesen
@tnayuki
LTで分かる!
アセンブラ
自己紹介
• @tnayuki
• 趣味: メディアアーティスト
• 最近の作品
• 人力で仮想通貨を採掘する装置
• バーチャルマニ車
• ゲームエンジンの会社で働いています
ECS &
Burst Compiler
リリース(プレビュー)
Burst Inspector
大アセンブラ時代の
はじまりである
今日する話
• Burstが出力したアセンブラを読むのに最低限必
要な知識
• C#コードがどういう機械語としてCPUに実行さ
れているか分かる
• SIMD命令がちゃんと使われているか
• 関数がちゃんとインライン化されているか
今日しない話
• 最近のCPUの機能の話

(キャッシュ/パイプライン/分岐予測/アウトオブオー
ダー実行/etc…)
• ARMアーキテクチャの話
アセンブリ言語の命令の
構成(x64・インテル記法)
mov rax , 1
z
オペコード
(操作内容)
オペランド
(操作対象)
ソースデスティネーショ
ン
オペランドの種類(x64)
• レジスタ
• 例: rax(64bit), eax(32bit), ax(16bit)
• メモリアドレス
• 例: [rax], [rax+4]
• 即値
• 例: 1234
オペコードの種類
基本的なもの(x64)・その1
• mov…移動命令(メモリー→レジスタ、レジスター
→メモリ、即値→レジスター)
• add/sub/mul/imul/div/idiv…算術命令(足し算/引
き算/掛け算/割り算)
• inc/dev…インクリメント/デクリメント
• or/and/xor…論理演算命令(OR/AND/XOR)
オペコードの種類
基本的なもの(x64)・その2
• cmp …比較命令
• push/pop…スタック操作命令
• jmp…ジャンプ命令
• call/ret…サブルーチン呼び出し/戻り
オペコードの種類
その他(x64)
• cmpxchg…俗に言うCAS命令



※.NETのInterlocked.CompareExchangeメソッドはこの命令
に変換される
• f〜…だいたい浮動小数点演算命令
• なんか長いやつ…だいたいSIMD命令
実際のBurst Inspector
の出力を見てみよう
アセンブラ怖くないヨ
君もBurst Inspectorで
CPUの嬌声を聞こう!
もっとアセンブラやCPUについて知りたい方
は
Unity Connectの「Unityお学びグループ」まで
• アセンブラって何?
• CPUって何?
• メモリって何?
• 呼び出し規約ってなに?
• バス幅って何?
• アライメントって何?
• キャッシュって何?
etc…
ご清聴
ありがとうございました

Weitere ähnliche Inhalte

Was ist angesagt?

Fuji sakuraでmbedを!
Fuji sakuraでmbedを!Fuji sakuraでmbedを!
Fuji sakuraでmbedを!
Tetsuya Noguchi
 
Open Design Computer Project - Tsukuba.pm
Open Design Computer Project - Tsukuba.pmOpen Design Computer Project - Tsukuba.pm
Open Design Computer Project - Tsukuba.pm
Hirotaka Kawata
 
x86-64/Linuxに独自メモリ空間を勝手増設
x86-64/Linuxに独自メモリ空間を勝手増設x86-64/Linuxに独自メモリ空間を勝手増設
x86-64/Linuxに独自メモリ空間を勝手増設
Minoru Nakamura
 
x86-64/Linuxに独自メモリ空間を勝手増設
x86-64/Linuxに独自メモリ空間を勝手増設x86-64/Linuxに独自メモリ空間を勝手増設
x86-64/Linuxに独自メモリ空間を勝手増設
Minoru Nakamura
 
バイナリより低レイヤな話 (プロセッサの心を読み解く) - カーネル/VM探検隊@北陸1
バイナリより低レイヤな話 (プロセッサの心を読み解く) - カーネル/VM探検隊@北陸1バイナリより低レイヤな話 (プロセッサの心を読み解く) - カーネル/VM探検隊@北陸1
バイナリより低レイヤな話 (プロセッサの心を読み解く) - カーネル/VM探検隊@北陸1
Hirotaka Kawata
 

Was ist angesagt? (14)

Fuji sakuraでmbedを!
Fuji sakuraでmbedを!Fuji sakuraでmbedを!
Fuji sakuraでmbedを!
 
第2回勉強会資料 柏木
第2回勉強会資料 柏木第2回勉強会資料 柏木
第2回勉強会資料 柏木
 
Movidius Neral Compute Stickを使ってみた
Movidius Neral Compute Stickを使ってみたMovidius Neral Compute Stickを使ってみた
Movidius Neral Compute Stickを使ってみた
 
もっと早く知りたかったプログラミング技法9選
もっと早く知りたかったプログラミング技法9選もっと早く知りたかったプログラミング技法9選
もっと早く知りたかったプログラミング技法9選
 
ダブルシンク難読化シェル芸
ダブルシンク難読化シェル芸ダブルシンク難読化シェル芸
ダブルシンク難読化シェル芸
 
自作コンピューターでなんかする - 第八回 カーネル/VM探検隊&懇親会
自作コンピューターでなんかする - 第八回 カーネル/VM探検隊&懇親会自作コンピューターでなんかする - 第八回 カーネル/VM探検隊&懇親会
自作コンピューターでなんかする - 第八回 カーネル/VM探検隊&懇親会
 
Open Design Computer Project - Tsukuba.pm
Open Design Computer Project - Tsukuba.pmOpen Design Computer Project - Tsukuba.pm
Open Design Computer Project - Tsukuba.pm
 
mrubyのJIT
mrubyのJITmrubyのJIT
mrubyのJIT
 
apasec001-kawai
apasec001-kawaiapasec001-kawai
apasec001-kawai
 
x86-64/Linuxに独自メモリ空間を勝手増設
x86-64/Linuxに独自メモリ空間を勝手増設x86-64/Linuxに独自メモリ空間を勝手増設
x86-64/Linuxに独自メモリ空間を勝手増設
 
x86-64/Linuxに独自メモリ空間を勝手増設
x86-64/Linuxに独自メモリ空間を勝手増設x86-64/Linuxに独自メモリ空間を勝手増設
x86-64/Linuxに独自メモリ空間を勝手増設
 
バイナリより低レイヤな話 (プロセッサの心を読み解く) - カーネル/VM探検隊@北陸1
バイナリより低レイヤな話 (プロセッサの心を読み解く) - カーネル/VM探検隊@北陸1バイナリより低レイヤな話 (プロセッサの心を読み解く) - カーネル/VM探検隊@北陸1
バイナリより低レイヤな話 (プロセッサの心を読み解く) - カーネル/VM探検隊@北陸1
 
タミヤのカムロボを改造中 micro:bit編
タミヤのカムロボを改造中 micro:bit編タミヤのカムロボを改造中 micro:bit編
タミヤのカムロボを改造中 micro:bit編
 
レベルを上げて物理で殴る 16x9
レベルを上げて物理で殴る 16x9レベルを上げて物理で殴る 16x9
レベルを上げて物理で殴る 16x9
 

Ähnlich wie LTで分かる!アセンブラ

seccamp2012 チューター発表
seccamp2012 チューター発表seccamp2012 チューター発表
seccamp2012 チューター発表
Hirotaka Kawata
 
エンジニアなら知っておきたい「仮想マシン」のしくみ v1.1 (hbstudy 17)
エンジニアなら知っておきたい「仮想マシン」のしくみ v1.1 (hbstudy 17)エンジニアなら知っておきたい「仮想マシン」のしくみ v1.1 (hbstudy 17)
エンジニアなら知っておきたい「仮想マシン」のしくみ v1.1 (hbstudy 17)
Takeshi HASEGAWA
 
関東GPGPU勉強会 LLVM meets GPU
関東GPGPU勉強会 LLVM meets GPU関東GPGPU勉強会 LLVM meets GPU
関東GPGPU勉強会 LLVM meets GPU
Takuro Iizuka
 
CLRの基礎 - プログラミング .NET Framework 第3版 読書会
CLRの基礎 - プログラミング .NET Framework 第3版 読書会CLRの基礎 - プログラミング .NET Framework 第3版 読書会
CLRの基礎 - プログラミング .NET Framework 第3版 読書会
Yoshihisa Ozaki
 

Ähnlich wie LTで分かる!アセンブラ (20)

seccamp2012 チューター発表
seccamp2012 チューター発表seccamp2012 チューター発表
seccamp2012 チューター発表
 
Meltdown を正しく理解する
Meltdown を正しく理解するMeltdown を正しく理解する
Meltdown を正しく理解する
 
Craft CMSに最適なサーバはどんな環境?
Craft CMSに最適なサーバはどんな環境?Craft CMSに最適なサーバはどんな環境?
Craft CMSに最適なサーバはどんな環境?
 
エンジニアなら知っておきたい「仮想マシン」のしくみ v1.1 (hbstudy 17)
エンジニアなら知っておきたい「仮想マシン」のしくみ v1.1 (hbstudy 17)エンジニアなら知っておきたい「仮想マシン」のしくみ v1.1 (hbstudy 17)
エンジニアなら知っておきたい「仮想マシン」のしくみ v1.1 (hbstudy 17)
 
きれいな絵を書こうとしていたら、Aiを作れる様になっていた話
きれいな絵を書こうとしていたら、Aiを作れる様になっていた話きれいな絵を書こうとしていたら、Aiを作れる様になっていた話
きれいな絵を書こうとしていたら、Aiを作れる様になっていた話
 
Lispマシン ドキュメント和訳とか、 ちびLispとか
Lispマシン ドキュメント和訳とか、 ちびLispとかLispマシン ドキュメント和訳とか、 ちびLispとか
Lispマシン ドキュメント和訳とか、 ちびLispとか
 
Nand2tetris 11
Nand2tetris 11Nand2tetris 11
Nand2tetris 11
 
関東GPGPU勉強会 LLVM meets GPU
関東GPGPU勉強会 LLVM meets GPU関東GPGPU勉強会 LLVM meets GPU
関東GPGPU勉強会 LLVM meets GPU
 
OSC 2012 Hokkaido でのプレゼン資料
OSC 2012 Hokkaido でのプレゼン資料OSC 2012 Hokkaido でのプレゼン資料
OSC 2012 Hokkaido でのプレゼン資料
 
Online MultiPlay Game Design
Online MultiPlay Game DesignOnline MultiPlay Game Design
Online MultiPlay Game Design
 
【2000行弱!】x86用自作カーネルの紹介
【2000行弱!】x86用自作カーネルの紹介【2000行弱!】x86用自作カーネルの紹介
【2000行弱!】x86用自作カーネルの紹介
 
CLRの基礎 - プログラミング .NET Framework 第3版 読書会
CLRの基礎 - プログラミング .NET Framework 第3版 読書会CLRの基礎 - プログラミング .NET Framework 第3版 読書会
CLRの基礎 - プログラミング .NET Framework 第3版 読書会
 
SpectreとMeltdown:最近のCPUの深い話
SpectreとMeltdown:最近のCPUの深い話SpectreとMeltdown:最近のCPUの深い話
SpectreとMeltdown:最近のCPUの深い話
 
110709 3rd SyoueneIT Workshop ARMServer
110709 3rd SyoueneIT Workshop ARMServer110709 3rd SyoueneIT Workshop ARMServer
110709 3rd SyoueneIT Workshop ARMServer
 
NetBSDのクロスビルドのしくみとインストール済みLive Imageの作成
NetBSDのクロスビルドのしくみとインストール済みLive Imageの作成NetBSDのクロスビルドのしくみとインストール済みLive Imageの作成
NetBSDのクロスビルドのしくみとインストール済みLive Imageの作成
 
いまさら聞けないarmを使ったNEONの基礎と活用事例
いまさら聞けないarmを使ったNEONの基礎と活用事例いまさら聞けないarmを使ったNEONの基礎と活用事例
いまさら聞けないarmを使ったNEONの基礎と活用事例
 
ちょっと古いマシンにLinuxを
ちょっと古いマシンにLinuxをちょっと古いマシンにLinuxを
ちょっと古いマシンにLinuxを
 
TDUCTFの実行基盤
TDUCTFの実行基盤TDUCTFの実行基盤
TDUCTFの実行基盤
 
ASPLOS2017: Building Durable Transactions with Decoupling for Persistent Memory
ASPLOS2017: Building Durable Transactions with Decoupling for Persistent MemoryASPLOS2017: Building Durable Transactions with Decoupling for Persistent Memory
ASPLOS2017: Building Durable Transactions with Decoupling for Persistent Memory
 
シンラ・テクノロジー第2回クラウドゲーム開発者会議
シンラ・テクノロジー第2回クラウドゲーム開発者会議シンラ・テクノロジー第2回クラウドゲーム開発者会議
シンラ・テクノロジー第2回クラウドゲーム開発者会議
 

Mehr von Toru Nayuki (7)

DSPGraphを試してみた話
DSPGraphを試してみた話DSPGraphを試してみた話
DSPGraphを試してみた話
 
Project Tiny + Photon Realtime
Project Tiny +  Photon RealtimeProject Tiny +  Photon Realtime
Project Tiny + Photon Realtime
 
はたらくスレッド
はたらくスレッドはたらくスレッド
はたらくスレッド
 
Unityから制御可能な振動・回転デバイスの比較
Unityから制御可能な振動・回転デバイスの比較Unityから制御可能な振動・回転デバイスの比較
Unityから制御可能な振動・回転デバイスの比較
 
UnityでVJする
UnityでVJするUnityでVJする
UnityでVJする
 
「ずいぶんとダサいライティングを使っているのね」〜UniRxを用いた物理ベースライティング制御〜
「ずいぶんとダサいライティングを使っているのね」〜UniRxを用いた物理ベースライティング制御〜「ずいぶんとダサいライティングを使っているのね」〜UniRxを用いた物理ベースライティング制御〜
「ずいぶんとダサいライティングを使っているのね」〜UniRxを用いた物理ベースライティング制御〜
 
Unity × PHP
Unity × PHPUnity × PHP
Unity × PHP
 

LTで分かる!アセンブラ