English
HARDWARE ManualSCUユーザーズマニュアル
戻る進む

SCU DSPアランブラ 使用説明書

'94/07/08

目次

1. アセンブラの機能
2. アセンブラの実行
3. プログラム記述形式
4. 命令一覧
5. サンプルプログラム

1. アセンブラの機能概要

本アセンブラは、DSP用の命令コードを生成するためのもので、MSーDOS上及び、UNIX上で動作させる事を目的としています。出力コードは、モトローラのSフォーマットで、直接コードを出力しますので、リンクは必要ありません。
DSPアセンブラは、ハードウェアについての知識を多く必要としますので、アセンブラを使用する前に、DSPハードウェアに関する理解を深めておいてください。

2. アセンブラの実行

dspasm [オプション] <ソースファイル名>
  1. オプションには、次の指定が出来ます。(ファイルの作成は正常終了時のみ)
    -l[ファイル名] : リスト出力指定
    -a[ファイル名] : SHアセンブラ用データ形式出力指定
    -c[ファイル名] : C言語用データ形式出力指定
    -m : MODEL Mの開発環境を使用する場合に指定
  2. ソースファイル名に、デフォルトの拡張子はありません。
  3. エラーの表示は、最初に検出したもののみですので、エラーが出なくなるまで修正とアセンブルを繰り返してください。

3. プログラム記述形式

[ラベル][△オペレーション[△オペランド]]…[コメント]
例: LABEL: MOV MC0,X ; コメント

(1) ラベル

(2) オペレーション

(3) オペランド

(4) コメント

* 記述上の注意 * 予約語について * 数値演算について

演算関係

+ … 加算
- … 減算
* … 乗算
/ … 除算
% … 除余
‾ … ビット否定
& … ビット積
| … ビット和
^ … 排他的ビット和
<<… 左シフト
>>… 右シフト

優先順位

1. + - ‾ (単項演算子)
2. * / %
3. + -
4. <<>>
5. &
6. | ^

4. 命令一覧

  1. 演算命令
    NOP AND OR XOR ADD SUB AD2 SR RR SL RL RL8 CLR MOV
  2. Load immediate命令
    MVI
  3. DMA命令
    DMA DMAH
  4. JUMP命令
    JMP
  5. LOOP BOTTOM 命令
    BTM LPS
  6. END命令
    END ENDI

疑似命令

5. サンプルプログラム

(1) DSPの内部RAM0の内容を、内部RAM1に複写する場合。

; ------- sample (1) start -------

COPY_SIZE  =  12          ; 複写サイズ
RAM0_ADR   =  $00         ; 複写元アドレス
RAM1_ADR   =  $00         ; 複写先アドレス

	MOV RAM0_ADR,CT0      ; RAM0の複写元アドレスをセット
	MOV RAM1_ADR,CT1      ; RAM1の複写先アドレスをセット
	MOV COPY_SIZE-1,LOP   ; 転送サイズー1を LOP レジスタにセット
	LPS                   ; 1命令ループの実行
	MOV MC0,MC1           ; RAM0からRAM1への転送
	ENDI

; ------- sample (1) end -------

(2) 2×3+4×5の計算をする場合。(RAM0×RAM1+RAM0×RAM1=RAM2)(sample 2b は、2aを最適化したものです。)

; ------- sample (2a) start -------

RAM0_ADR   =  $00          ; 2, 4 格納アドレス先頭
RAM1_ADR   =  $00          ; 3, 5 格納アドレス先頭
RAM2_ADR   =  $00          ; 結果格納アドレス

	MOV RAM0_ADR,CT0   ; RAM0のアドレスをセット
	MOV RAM1_ADR,CT1   ; RAM1のアドレスをセット
	MVI #2,MC0         ; RAM0に「2」をセット
	MVI #3,MC1         ; RAM1に「3」をセット
	MVI #4,MC0         ; RAM0に「4」をセット
	MVI #5,MC1         ; RAM1に「5」をセット
	MOV RAM0_ADR,CT0   ; RAM0のアドレスをセット
	MOV RAM1_ADR,CT1   ; RAM1のアドレスをセット
	MOV RAM2_ADR,CT2   ; RAM2のアドレスをセット
	MOV MC0,X          ; RAM0から、RXへデータ転送
	MOV MC1,Y          ; RAM1から、RYへデータ転送
	MOV MUL,P          ; RXとRYの積算結果をPH,PLに格納
	MOV MC0,X          ; RAM0から、RXへデータ転送
	MOV MC1,Y          ; RAM1から、RYへデータ転送
	CLR A              ; ACH,ACLに「0」をセット
	AD2  MOV ALU,A     ; PH,PLとACH,ACLの加算結果をACH,ACLに格納
	MOV MUL,P          ; RXとRYの積算結果をPH,PLに格納
	AD2  MOV ALL,MC2   ; PH,PLとACH,ACLの加算結果をRAM2に格納
	ENDI

; ------- sample (2a) end -------
; ------- sample (2b) start -------

RAM0_ADR   =  $00          ; 2, 4 格納アドレス先頭
RAM1_ADR   =  $00          ; 3, 5 格納アドレス先頭
RAM2_ADR   =  $00          ; 結果格納アドレス

	                                                 MOV RAM0_ADR,CT0
	                                                 MOV RAM1_ADR,CT1
	MVI #2,MC0
	MVI #3,MC1
	MVI #4,MC0
	MVI #5,MC1
	                                                 MOV RAM0_ADR,CT0
	                                                 MOV RAM1_ADR,CT1
	     MOV MC0,X             MOV MC1,Y             MOV RAM2_ADR,CT2
	     MOV MC0,X  MOV MUL,P  MOV MC1,Y  CLR A
	AD2             MOV MUL,P             MOV ALU,A
	AD2                                              MOV ALL,MC2
	ENDI

; ------- sample (2b) end -------

(3) マトリックスに対して移動処理の計算をする場合。(RAM0×RAM1=RAM2)

 /M00 M01 M02 M03\  /100x\     /M00 M01M02 M03\
| M10 M11 M12 M13 || 010y | → | M10 M11M12 M13 |
 \M20 M21 M22 M23/ | 001z |    \M20 M21M22 M23/
                    \0001/

; ------- sample (3) start -------

DATA_TOP   =  $10000 >> 2       ; 外部メモリのアドレスは、4バイト単位
MAT_SIZE   =  $0C               ; 配列サイズ
RAM0_ADR   =  $00               ; X, Y, Z の移動量を格納する先頭アドレス
RAM1_ADR   =  $00               ; 配列用ワークのアドレス
RAM2_ADR   =  $00               ; 元の配列のアドレス

; (外部メモリから、RAM0へ移動量をセットした配列を転送)
;
	MVI DATA_TOP,RA0
	                                                 MOV RAM0_ADR,CT0
	DMA D0,MC0,#$02
;
; (RAM2 から RAM1へ演算する配列の複写)
	                                                 MOV RAM2_ADR,CT2
	                                                 MOV RAM1_ADR,CT1
	                                                 MOV MAT_SIZE-1,LOP
	LPS
	                                                 MOV MC2,MC1
WAITING:
	JMP T0,WAITING
;
; (配列の計算実行)
	                                                 MOV RAM0_ADR,CT0
	                                                 MOV RAM1_ADR,CT1
	     MOV MC0,X             MOV MC1,Y 
	     MOV MC0,X  MOV MUL,P  MOV MC1,Y  CLR A
	AD2  MOV MC0,X  MOV MUL,P  MOV MC1,Y  MOV ALU,A  MOV RAM0_ADR,CT0
	AD2             MOV MUL,P  MOV MC1,Y  MOV ALU,A  MOV #1,RX
	AD2  MOV MC0,X  MOV MUL,P  MOV MC1,Y  MOV ALU,A  MOV RAM2_ADR+3,CT2
	AD2  MOV MC0,X  MOV MUL,P  MOV MC1,Y  CLR A      MOV ALL,MC2
	AD2  MOV MC0,X  MOV MUL,P  MOV MC1,Y  MOV ALU,A  MOV RAM0_ADR,CT0
	AD2             MOV MUL,P  MOV MC1,Y  MOV ALU,A  MOV #1,RX
	AD2  MOV MC0,X  MOV MUL,P  MOV MC1,Y  MOV ALU,A  MOV RAM2_ADR+7,CT2
	AD2  MOV MC0,X  MOV MUL,P  MOV MC1,Y  CLR A      MOV ALL,MC2
	AD2  MOV MC0,X  MOV MUL,P  MOV MC1,Y  MOV ALU,A  MOV RAM0_ADR,CT0
	AD2             MOV MUL,P  MOV MC1,Y  MOV ALU,A  MOV #1,RX
	AD2             MOV MUL,P             MOV ALU,A  MOV RAM2_ADR+11,CT2
	AD2                                              MOV ALL,MC2
	ENDI

; ------- sample (3) end -------
以上
戻る進む
HARDWARE ManualSCUユーザーズマニュアル