1. はじめに このテキストではC言語で書かれた簡単な階乗プログラムを元にコンパイラがアセンブリコードを生成する時の考え方を示しました。 2. C言語のソースコード C言語で書かれた階乗のプログラム(元にするプログラムという意味で ソースコード と言います)を次に示します。まずはトレースしてみて動作を確認します。とくに どの経路をたどるかと 変数の値がどのように変化するかに注目してください。 unsigned int fact(unsigned int x) { unsigned int y; if(x == 0) { y = 1; } else { y = x * fact(x - 1); } return y; } void main(void) { unsigned int p; p = fact(3); ... } なお,unsigned int は符号なしの整数という意味です。
![C言語のアセンブリ言語コード化〜直観編 - Qiita](https://cdn-ak-scissors.b.st-hatena.com/image/square/749c97a1e392316d4dbd85395a69bea9e11ccaa8/height=288;version=1;width=512/https%3A%2F%2Fqiita-user-contents.imgix.net%2Fhttps%253A%252F%252Fcdn.qiita.com%252Fassets%252Fpublic%252Farticle-ogp-background-9f5428127621718a910c8b63951390ad.png%3Fixlib%3Drb-4.0.0%26w%3D1200%26mark64%3DaHR0cHM6Ly9xaWl0YS11c2VyLWNvbnRlbnRzLmltZ2l4Lm5ldC9-dGV4dD9peGxpYj1yYi00LjAuMCZ3PTkxNiZoPTMzNiZ0eHQ9QyVFOCVBOCU4MCVFOCVBQSU5RSVFMyU4MSVBRSVFMyU4MiVBMiVFMyU4MiVCQiVFMyU4MyVCMyVFMyU4MyU5NiVFMyU4MyVBQSVFOCVBOCU4MCVFOCVBQSU5RSVFMyU4MiVCMyVFMyU4MyVCQyVFMyU4MyU4OSVFNSU4QyU5NiVFMyU4MCU5QyVFNyU5QiVCNCVFOCVBNiVCMyVFNyVCNyVBOCZ0eHQtY29sb3I9JTIzMjEyMTIxJnR4dC1mb250PUhpcmFnaW5vJTIwU2FucyUyMFc2JnR4dC1zaXplPTU2JnR4dC1jbGlwPWVsbGlwc2lzJnR4dC1hbGlnbj1sZWZ0JTJDdG9wJnM9ZGQyMGI1YjI5MjdhZTNkNDM5MzA4M2JjMGMzOTk3MjY%26mark-x%3D142%26mark-y%3D112%26blend64%3DaHR0cHM6Ly9xaWl0YS11c2VyLWNvbnRlbnRzLmltZ2l4Lm5ldC9-dGV4dD9peGxpYj1yYi00LjAuMCZ3PTYxNiZ0eHQ9JTQwemFja3kxOTcyJnR4dC1jb2xvcj0lMjMyMTIxMjEmdHh0LWZvbnQ9SGlyYWdpbm8lMjBTYW5zJTIwVzYmdHh0LXNpemU9MzYmdHh0LWFsaWduPWxlZnQlMkN0b3Amcz0wZmFhOTBiYjI5MDM3MzNlYTJiNDk1YzI3ZTgzMzFhNQ%26blend-x%3D142%26blend-y%3D491%26blend-mode%3Dnormal%26s%3Dcd08b022e98304d4c4201ebb47aa7812)