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 正常終了、
失敗」の表示を確認しなさい
表示されなければ、プログラムのミスを自分で
確認し、修正して、ビルドをやり直す
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 正常終了、
失敗」の表示を確認しなさい
表示されなければ、プログラムのミスを自分で
確認し、修正して、ビルドをやり直す
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
値をセット