679 Views
December 23, 21
スライド概要
コンピュータ・アーキテクチャ演習
URL: https://www.kkaneko.jp/cc/ca/index.html
金子邦彦(かねこくにひこ) 福山大学・工学部・教授 ホームページ: https://www.kkaneko.jp/index.html 金子邦彦 YouTube チャンネル: https://youtube.com/user/kunihikokaneko
ca-13. サブルーチン (コンピュータ・アーキテクチャ演習) URL: https://www.kkaneko.jp/cc/ca/index.html 金子邦彦 1
アウトライン 13-1 サブルーチン 13-2 サブルーチン呼び出しと復帰 13-3 演習 2
13-1 サブルーチン 3
演習 • Visual Studio を起動しなさい • Visual Studio で,Win32 コンソールアプリケー ション用プロジェクトを新規作成しなさい プロジェクトの「名前」は何でもよい 4
• Visual Studioのエディタを使って,ソースファイ ルを編集しなさい 5
• ビルドしなさい.ビルドのあと「1 0 失敗」の表示を確認しなさい 正常終了, → 表示されなければ,プログラムのミスを自分で 確認し,修正して,ビルドをやり直す 6
• Visual Studioで「return a * 1.08;」の行に,ブレー クポイントを設定しなさい ① 「 return a * 1.08;」 の行をマウスでクリック ② 「デバッグ」→「ブレー クポイントの設定/解除」 ③ ブレークポイントが 設定されるので確認. 赤丸がブレークポイント の印 7
• Visual Studioで,デバッガーを起動しなさい. 「デバッグ」 → 「デバッグ開始」 • 「return a * 1.08;」の行で,実行が中断することを 確認しなさい • あとで使うので,中断したままにしておくこと 「return a * 1.08;」の 行で実行が 中断している 8
• 「return a * 1.08;」の行で,実行が中断した状態で, 変数の値を表示させなさい.手順は次の通り. ② 変数名と値の対応表が 表示される ①「デバッグ」 → 「ウインドウ」 → 「ローカル」 変数 a の値 120 9
• ステップオーバーの操作を1回ずつ行いなさい. 「デバッグ」 → 「ステップオーバー」 (あるいは F10 キー) みどころ, 黄色の矢印が動く. あるときは foo 関数の中. あるときは main 関数の中 10
• 最後に,プログラム実行の再開の操作を行いなさ い.これで,デバッガーが終了する. 「デバッグ」 → 「続行」 11
サブルーチン呼び出しのための call 命令 Visual Studio の C++ プログラム アセンブリ言語の call 命令 「call foo ・・・」 でサブルーチンの先頭へジャンプ 12
コンピュータでのスタックの作り方 事前に,メモリ内に スタック専用エリアを確保 (システムスタックエリア) メモリ 13
コンピュータでのスタックの作り方 最初は空 メモリ 14
コンピュータでのスタックの作り方 ①,②,③の順で プッシュすると・・・ 一番最後にプッシュ した③が一番上 ③ ② ① データが入る メモリ 15
13-2 サブルーチン呼び出しと 復帰 16
サブルーチンとは サブルーチンを 使うように, プログラムを書き換え 類似の処理を1か所 にまとめたもの サブルーチン サブルーチンなし サブルーチンあり 17
サブルーチン呼び出しと復帰 サブルーチンの 先頭へジャンプ (サブルーチン呼び出し) サブルーチンの 先頭へジャンプ (サブルーチン呼び出し) 元のところ(戻りアドレス)へ ジャンプ(復帰) サブルーチン 元のところ(戻りアドレス)へ ジャンプ(復帰) 18
サブルーチン呼び出しと復帰 • プログラムの中から, • サブルーチンの先頭にジャンプ(サブルーチン呼 び出し)して, • あとで戻ってくる(復帰) 19
サブルーチン呼び出しと復帰 復帰 復帰のための ジャンプ 呼び出しのための ジャンプ 呼び出し 呼び出し 20
演習 • Visual Studio を起動しなさい • Visual Studio で,Win32 コンソールアプリケー ション用プロジェクトを新規作成しなさい プロジェクトの「名前」は何でもよい 21
• Visual Studio のエディタを使って,ソースファイ ルを編集しなさい 22
• ビルドしなさい.ビルドのあと「1 0 失敗」の表示を確認しなさい 正常終了, → 表示されなければ,プログラムのミスを自分で 確認し,修正して,ビルドをやり直す 23
• Visual Studio で「return a * 1.08;」の行に,ブ レークポイントを設定しなさい ① 「 return a * 1.08;」の行をマウス でクリック ② 「デバッグ」→ 「ブレークポイントの 設定/解除」 ③ ブレークポイント が設定されるので確認. 赤丸がブレークポイン トの印 24
• Visual Studio で,デバッガーを起動しなさい. 「デバッグ」 → 「デバッグの開始」 • 「return a * 1.08;」の行で,実行が中断することを 確認しなさい • あとで使うので,中断したままにしておくこと 「return a * 1.08;」の 行で実行が 中断している 25
• 「return a * 1.08;」の行で,実行が中断した状態で, 変数の値を表示させなさい.手順は次の通り. ② 変数名と値の対応表が 表示される ①「デバッグ」 → 「ウインドウ」 → 「ローカル」 変数 a の値 120 26
• ステップオーバーの操作を1回ずつ行いなさい. 「デバッグ」 → 「ステップオーバー」 (あるいは F10 キー) みどころ, 黄色の矢印が動く. あるときは foo 関数の中. あるときは main 関数の中 27
• 最後に,プログラム実行の再開の操作を行いなさ い.これで,デバッガーが終了する. 「デバッグ」 → 「続行」 28
サブルーチン呼び出しのための call 命令 Visual Studio の C++ プログラム アセンブリ言語の call 命令 「call foo ・・・」 でサブルーチンの先頭へジャンプ 29
• 次のように書き替えて,同じ手順を繰り返しなさ い. • 30
13-3 サブルーチン呼び出しに 関する演習 31
演習 • Visual Studio を起動しなさい • Visual Studio で,Win32 コンソールアプリケー ション用プロジェクトを新規作成しなさい プロジェクトの「名前」は何でもよい 32
• Visual Studio のエディタを使って, ソースファイルを編集しなさい 33
• ビルドしなさい.ビルドのあと「1 0 失敗」の表示を確認しなさい 正常終了, → 表示されなければ,プログラムのミスを自分で 確認し,修正して,ビルドをやり直す 34
• Visual Studio で「return a * 1.08;」の行に,ブ レークポイントを設定しなさい ① 「 return a * 1.08;」の行をマウス でクリック ② 「デバッグ」→ 「ブレークポイントの 設定/解除」 ③ ブレークポイント が設定されるので確認. 赤丸がブレークポイン トの印 35
• Visual Studio で,デバッガーを起動しなさい. 「デバッグ」 → 「デバッグの開始」 • 「return a * 1.08;」の行で,実行が中断することを 確認しなさい • あとで使うので,中断したままにしておくこと 「return a * 1.08;」の 行で実行が 中断している 36
• 「return a * 1.08;」の行で,実行が中断した状態で, 変数の値を表示させなさい.手順は次の通り. ② 変数名と値の対応表が 表示される ①「デバッグ」 → 「ウインドウ」 → 「ローカル」 変数 a の値 12 37
関数 foo の中では,変数 a だけが使える (変数 x, p は使えない) 関数 bar の中では,変数 x だけが使える (変数 a, p は使えない) 38
• ステップオーバーの操作を1回ずつ行いなさい. 「デバッグ」 → 「ステップオーバー」 (あるいは F10 キー) みどころ, 黄色の矢印が動く. あるときは foo 関数の中. あるときは bar 関数の中. あるときは main 関数の中. 39
• 最後に,プログラム実行の再開の操作を行いなさ い.これで,デバッガーが終了する. 「デバッグ」 → 「続行」 40
関数呼び出しのための call 命令 Visual Studio の C++ プログラム アセンブリ言語の call 命令 「call foo ・・・」 でサブルーチンの先頭へジャンプ 41