LIST 50 ============================================================================ コンパイラ[MC]の出力したアセンブラソース[TEST1.ASM]の該当部分 ;int sub_1(int a){ __sub_1: ; int c; PUSH BC ← 変数の確保はスタックに ; c = a * 2; LD HL,00H ADD HL,SP PUSH HL LD HL,06H ADD HL,SP CALL mc_gint ← (HL)の内容をHLに移す PUSH HL LD HL,02H CALL mc_mult ← 乗算ライブラリを使用 CALL mc_pint ← HLの内容を(HL)に移す ; return(c); LD HL,00H ADD HL,SP CALL mc_gint POP BC ← 演算結果を[BC]の変数に格納 RET ;} ;void sub_2(int b){ __sub_2: ; return; RET ← 何もしない時はそのままリターン ;} ;main(){ __main: ; int a,b; PUSH BC ← 2つのint型変数の領域を確保 PUSH BC ; a = 1; LD HL,02H ADD HL,SP PUSH HL LD HL,01H CALL mc_pint ; b = sub_1(a); LD HL,00H ADD HL,SP PUSH HL LD HL,04H ADD HL,SP CALL mc_gint PUSH HL CALL __sub_1 ← 関数呼び出しはサブルーチンコール POP BC CALL mc_pint ; sub_2(b); LD HL,00H ADD HL,SP CALL mc_gint PUSH HL CALL __sub_2 ← 関数呼び出しはサブルーチンコール POP BC ;} POP BC ← 確保した変数領域を解放して終了 POP BC RET ============================================================================