6. | ^
- 演算命令
- NOP AND OR XOR ADD SUB AD2 SR RR SL RL RL8 CLR MOV
- Load immediate命令
- MVI
- DMA命令
- DMA DMAH
- JUMP命令
- JMP
- LOOP BOTTOM 命令
- BTM LPS
- END命令
- END ENDI
疑似命令
- EQU (=) ……………… ラベルの定義に使用。
- ORG ……………… 命令を配置する先頭番地を指定。
- ENDS ……………… プログラムの最後に入れると、以後は無視されます。
- IF <数値・ラベル> … 数値やラベルの計算結果が0以外なら、以後、ELSE又は、ENDIFまでをアセンブルします。
- IFDEF <ラベル> ……… ラベルが前方に定義されていれば、以後、ELSE又は、ENDIFまでをアセンブルします。
IF、IFDEFのネストレベルは16までです。)
(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 Manual
★SCUユーザーズマニュアル