comparison paper/chapter/02-cbc.tex @ 93:b1febd693942

add fig
author anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
date Fri, 05 Feb 2021 20:06:02 +0900
parents a15db66cab3c
children 911bf1a2c6fa
comparison
equal deleted inserted replaced
92:f5766148955f 93:b1febd693942
54 \label{fig:cbc_vs_c} 54 \label{fig:cbc_vs_c}
55 \end{figure} 55 \end{figure}
56 56
57 57
58 実際に軽量継続になっているかを、この例題をアセンブラに変換した結果を見比べて確認する。 58 実際に軽量継続になっているかを、この例題をアセンブラに変換した結果を見比べて確認する。
59 \lstinputlisting[label=src:cbcexample_test_asm, caption=ソースコード\ref{src:cbcexample_test}のアセンブラの一部]{src/cbc_example_test.s} 59 \lstinputlisting[label=src:cbcexample_test_asm, caption=CbCの例題をコンパイルしたアセンブラの一部]{src/cbc_example_test.s}
60 \lstinputlisting[label=src:cbcexample_test_asm_void, caption=ソースコード\ref{src:cbcexample_test_c}のアセンブラの一部]{src/cbc_example_test_void.s} 60 \lstinputlisting[label=src:cbcexample_test_asm_void, caption=C言語の例題をコンパイルしたアセンブラの一部]{src/cbc_example_test_void.s}
61 codegear1からcodegear2への移動の際に、CbCとCで発行されるアセンブラの命令を比較する。 61 codegear1からcodegear2への移動の際に、CbCとCで発行されるアセンブラの命令を比較する。
62 CbCの例題の場合のアセンブラのソースコード\ref{src:cbcexample_test_asm}はcodegear2へ25行目でjmp命令を使って遷移している。 62 CbCの例題の場合のアセンブラのソースコード\ref{src:cbcexample_test_asm}はcodegear2へ25行目でjmp命令を使って遷移している。
63 対してC言語での実装の場合(ソースコード\ref{src:cbcexample_test_asm_void})は21行目でcallqを使っている。 63 対してC言語での実装の場合(ソースコード\ref{src:cbcexample_test_asm_void})は21行目でcallqを使っている。
64 jmp命令はプログラムカウンタを切り替えるのみの命令であり、 callは関数呼び出しの命令であるためにスタックの操作が行われる。 64 jmp命令はプログラムカウンタを切り替えるのみの命令であり、 callは関数呼び出しの命令であるためにスタックの操作が行われる。
65 CbCでのgoto文はすべてこのjmp命令に変換されるため、 関数呼び出しより軽量に実行することが可能である。 65 CbCでのgoto文はすべてこのjmp命令に変換されるため、 関数呼び出しより軽量に実行することが可能である。