vc-5. インラインアセンブラ
(Visual Studio C++ の機能と操作演習,
全5回)
1
金子邦彦
https://www.kkaneko.jp/pro/vc/index.html
Visual Studio C++でのインラインアセンブラの使用方
法、アセンブリ言語による算術演算命令の記述とデバッ
ガによる動作確認
【学習内容の構成】
1. インラインアセンブラ:C++プログラム内にアセン
ブリ言語のコードを埋め込む機能
2. デバッガ操作:ブレークポイント設定、変数値の確
認、逆アセンブル結果の表示
3. 算術演算命令:mov(代入)、add(加算)、sub
(減算)、imul(乗算)の実行と結果確認
• 前提:Visual Studio 2015の基本操作、Win32コンソー
ルアプリケーションのプロジェクト作成
• 意義:高級言語とアセンブリ言語の対応関係の理解、
低レベルでのプログラム動作の把握
2
5-1 インラインアセンブラ
3
インラインアセンブラ
• インラインアセンブラとは、
• 他の言語の中に、アセンブリ言語のプログラムを
埋め込むこと
4
アセンブリ言語
のプログラム
の埋め込み
• Visual Studio 2015 を起動しなさい
• Visual Studio 2015 で、Win32 コンソールアプリ
ケーション用プロジェクトを新規作成しなさい
5
プロジェクトの「名前」は何でもよい
パソコン演習
• Visual Studio 2015 のエディタを使って、ソース
ファイルを編集しなさい
6
5 行追加
• ビルドしなさい.ビルドのあと「1 正常終了、
0 失敗」の表示を確認しなさい
→ 表示されなければ、プログラムのミスを自分で
確認し、修正して、ビルドをやり直す
7
• Visual Studio 2015 で「printf」の行に、ブレーク
ポイントを設定しなさい
8
① 「 printf」の行を
マウスでクリック
② 「デバッグ」→「ブ
レークポイントの設定/
解除」
③ ブレークポイントが
設定されるので確認.
赤丸がブレークポイン
トの印
• Visual Studio 2015 で、デバッガーを起動しなさい.
• 「printf」の行で、実行が中断することを確認しな
さい
あとで使うので、中断したままにしておくこと
9
「デバッグ」
→ 「デバッグの開始」
「printf」の行で実行が
中断している
• 「printf」の行で、実行が中断した状態で、変数の
値を表示させなさい.手順は次の通り.
10
①「デバッグ」
→ 「ウインドウ」
→ 「ローカル」
② 変数名と値の対応表が
表示される
• 「printf」の行で、実行が中断した状態で、逆アセ
ンブルを行いなさい.
11
① 「デバッグ」→ 「ウイン
ドウ」→「逆アセンブル」
② 逆アセンブルの結果が
表示される
• 1次のことを確認しなさい(Visual Studioでの操作
ではない).
12
mov a, 100
は
move dword ptr [a],64h
に変化
※ どちらも同じ意味
・Visual C++ の変数「a」
は「dword ptr [a]」と翻訳され、
・10進数の「100」は16進数の
「64」に翻訳されている
• 最後に、プログラム実行の再開の操作を行いなさ
い。これで、デバッガーが終了する。
13
「デバッグ」
→ 「続行」
5-2 算術演算命令の例
14
算術演算の例
15
アセンブリ言語のプログラム
a に 100 をセット
a に 200 を足しこむ
• Visual Studio 2015 を起動しなさい
• Visual Studio 2015 で、Win32 コンソールアプリ
ケーション用プロジェクトを新規作成しなさい
16
プロジェクトの「名前」は何でもよい
パソコン演習
• Visual Studio 2015 のエディタを使って、ソース
ファイルを編集しなさい
17
6行追加
• ビルドしなさい.ビルドのあと「1 正常終了、
0 失敗」の表示を確認しなさい
→ 表示されなければ、プログラムのミスを自分で
確認し、修正して、ビルドをやり直す
18
• Visual Studio 2015 で「printf」の行に、ブレーク
ポイントを設定しなさい
19
① 「 printf」の行を
マウスでクリック
② 「デバッグ」→
「ブレークポイントの
設定/解除」
③ ブレークポイント
が設定されるので確認.
赤丸がブレークポイン
トの印
• Visual Studio 2015 で、デバッガーを起動しなさい.
• 「printf」の行で、実行が中断することを確認しな
さい
あとで使うので、中断したままにしておくこと
20
「デバッグ」
→ 「デバッグの開始」
「printf」の行で実行が
中断している
• 「printf」の行で、実行が中断した状態で、変数の
値を表示させなさい.手順は次の通り.
21
①「デバッグ」
→ 「ウインドウ」
→ 「ローカル」
② 変数名と値の対応表が
表示される
• 最後に、プログラム実行の再開の操作を行いなさ
い。これで、デバッガーが終了する。
22
「デバッグ」
→ 「続行」
• 次のように書き替えて、同じ手順を繰り返しなさ
い.
• そして,変数 a の値を確認しなさい
23
add 加算
• 次のように書き替えて、同じ手順を繰り返しなさ
い.
• そして,変数 a の値を確認しなさい
24
sub 減算
• 書き替えて、同じ手順を繰り返しなさい.
• そして,変数 a の値を確認しなさい
25
imul 乗算
次ページに解説
26
アセンブリ言語の
プログラム
① a に 30 をセット
② a × 20 の結果を、
レジスタ eax にセット
③ a にレジスタ eax の
値をセット