SSブログ

ColdFire でアセンブラ (1) - 長くなりそうだ [ColdFire (ColdeFire) V1]このエントリーを含むはてなブックマーク#

ColdFireのコンパイラは、Cのソース・コードの中にアセンブラを記述することができます。 どんな機能があるのか、しらべてみました。

単純な関数

まずは、簡単な例から考えます。

dword func1(dword a, dword b) {
  dword x;
  __asm {
    move  a,d0  // D0 = a
    add   b,d0  // D0 += b
    move  d0,x  // x = D0
  }
  return x;
}

二つの引数の和を返す関数です。 もちろん、これをわざわざアセンブラで記述する意味はありません。 これをコンパイルすると、こんなコードになります。

0x00000000                    _func1:
;                             func1:
0x00000000  0x4FEFFFF4               lea      -12(a7),a7
0x00000004  0x2E80                   move.l   d0,(a7)
0x00000006  0x2F410004               move.l   d1,4(a7)
;
;   22:     move  a,d0  // D0 = a 
0x0000000A  0x2017                   move.l   (a7),d0
;
;   23:     add   b,d0  // D0 += b 
0x0000000C  0xD0AF0004               add.l    4(a7),d0
;
;   24:     move  d0,x  // x = D0 
;   25:       } 
0x00000010  0x2F400008               move.l   d0,8(a7)
;
;   26:   return x; 
0x00000014  0x222F0008               move.l   8(a7),d1
0x00000018  0x2001                   move.l   d1,d0
;
;   27: } 
0x0000001A  0x4FEF000C               lea      12(a7),a7
0x0000001E  0x4E75                   rts      

一部コメント行を削除しました。 引数abに 局所変数xを加えた12バイト分の スタック・エリアを確保しています。

すべての操作がスタック・エリアを使った受け渡しになっているので、 処理が煩雑になっています。 わかりやすいと言えばわかりやすいのですけど。


nice!(0)  コメント(0)  トラックバック(0)  このエントリーを含むはてなブックマーク#

nice! 0

コメント 0

コメントを書く

お名前:
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

トラックバック 0

トラックバックの受付は締め切りました

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。