マクロ機能に付きましてNo.05634
ノノムン さん 07/09/25 16:38
 
次のような「parallax」と「MPASM」言われるアセンブラが有ります。

文例は次ですが
1の記述
 add fr,#lite ;「parallax」

2の記述
 movlw lite ;「MPASM」
 addwf fr,1 ; wfの場合1

それらをマクロで定義して変換することは出来るでしょうか?

 add TRISA,#0x41



 movlw 0x41
 addwf TRISA,1


もう一つの文例は
1の記述
 add fr1,fr2
2の記述
 movf fr2,0
 addwf fr1,1
です。

 add TRISA,hensu

 movf hensu,0
 addwf TRISA,1

と言う風にします。
他にもバンク切り替えとかが自動で起こるようですが
内容は解っていません。
(レジスタの対象によってSTATUS,RP0 ビットの操作をします)

出来れば両方の変換をしたいのです。

それでは宜しくお願いします。

[ ]
RE:05634 マクロ機能に付きましてNo.05636
ENCODINGSHIFTJIS さん 07/09/26 09:51
 
1.add を見つける
2.#が付いている → 変換1
付いていない → 変換2
と 考えれば、全置換2本でも出来ると思いますが。

[ ]
RE:05636 マクロ機能に付きましてNo.05637
ENCODINGSHIFTJIS さん 07/09/26 10:22
 
変換1 は 正規表現 置換

add ([^,]+),#([^ \n]+)

movlw \2\n addwf \1,1

のような感じで

[ ]
RE:05636 マクロ機能に付きましてNo.05638
ノノムン さん 07/09/26 10:29
 
お返事ありがとう。

文法は普通の場合
ラベル コマンド(ニモニック) オペランド  コメント
となっていますが
オペランドは wを指す 0 それ以外を指す 1 が有ります
また 直接数を指す # も有ります。
それらによって 語尾が fw wf lw に替わったり 
(,0)(,1) で表したりします。
文中で fr とある オペランド は 別の所でアサインした 
変数ラベル などを使います。

一部の決められた 対象となる 特別なオペランドは
bank0 と bank1 のバンクがあって
(両方を持つ場合もありその場合は何もしない)
0 から 0x7f と 0x80 以降に分けられ
操作する前に
 bcf STATUS,RP0 ;0 または
 bsf STATUS,RP0 ;80
を挟んでから実行します。
例えば
PORTB 08h
TRISA 98h
STATUS 03h, 83h, などの場合は
前の時の操作が bank1 であったら

「add PORTB,#lite

 movlw lite
 bcf STATUS,RP0 ;0
 addwf PORTB,1」

となります。

この様な文例が全部で332行有るのですが、
全部入れるほかないのでしょうか?

add fr,#lite
 movlw lite
 addwf fr,1
add fr1,fr2
 movf fr2,0
 addwf fr1,1
add fr,W
 addwf fr,1
add W,fr
 addwf fr,0
addb fr,bit
 btfsc bit
 incf fr,1
and fr,#lite
 movlw lite
 andwf fr,1
and fr1,fr2
 movf fr2,0
 andwf fr1,1
and fr,W
 and fr,1
and w,#lite
 andlw lite
<途中略>
swap fr
 swapf fr,1
sz
 btfss 3,2
test fr
 movf fr,1
test W
 iorlw 0
xor fr,#lite
 movlw lite
 xorwf fr,1
xor fr1,fr2
 movf fr2,0
 xorwf fr1,1
xor fr,W
 xorwf fr,1
xor W,#lite
 xorlw lite
xor W,fr
 xorwf fr,0


ENCODINGSHIFTJIS さんは書きました:
> 1.add を見つける
> 2.#が付いている → 変換1
> 付いていない → 変換2
> と 考えれば、全置換2本でも出来ると思いますが。
>
>

[ ]
RE:05638 マクロ機能に付きましてNo.05639
ENCODINGSHIFTJIS さん 07/09/26 11:45
 
> 前の時の操作が bank1 であったら
前の操作って、何?、
制御フローを解析しなくとも 簡単に分かります?
(人の手で bank のヒント情報を与えないと ダメかも)
フツウのマクロはソースの文字列を変形するしか出来ませんが

 バイナリ・トランスレーション をしようとしているような
(本格的な例では Intel-Mac で PowerPC-Mac のソフトを
実行するのがあります)

[ ]
RE:05639 マクロ機能に付きましてNo.05642
ENCODINGSHIFTJIS さん 07/09/26 13:56
 
> この様な文例が全部で332行有るのですが、
全部入れるほかないのでしょうか?

命令形式の振り分け、オペランド型の判定 → それぞれ変換
ですから、そうなる、と思います。
処理の共通化とか表形式で設定できる箇所があるとしても
完全自動の前に 機械的に出来る部分から やってみては

[ ]
RE:05642 マクロ機能に付きましてNo.05643
ノノムン さん 07/09/26 20:13
 
ありがとうございます

変換1 は 正規表現 置換
add ([^,]+),#([^ \n]+)

movlw \2\n addwf \1,1
の方法で
マクロを作ってみます。
>前の操作って、何?、
制御フローを解析しなくとも 簡単に分かります?

おそらく難しいと思うので
無しにして何か記号を出しておき
人力で置き換えるようにします。
(全部に記入しても動作しますが、間違いではなく
その分無駄になり動作が遅くなるだけです)

([^,]+)など、上の方法はどこを調べたら良いでしょうか?

それではまた

ENCODINGSHIFTJIS さんは書きました:
> > この様な文例が全部で332行有るのですが、
> 全部入れるほかないのでしょうか?
>
> 命令形式の振り分け、オペランド型の判定 → それぞれ変換
> ですから、そうなる、と思います。
> 処理の共通化とか表形式で設定できる箇所があるとしても
> 完全自動の前に 機械的に出来る部分から やってみては
>
>

[ ]
RE:05643 マクロ機能に付きましてNo.05644
ENCODINGSHIFTJIS さん 07/09/27 10:37
 
>([^,]+)など、上の方法はどこを調べたら良いでしょうか?
正規表現の 文例を 読むと 身につきます。

F1 秀丸エディター ヘルプ
目次− 検索系コマンド−正規表現

一般には 正規表現パズルという
(伝統的)プログラマ・ネタの分野です。
Web 検索でも 山のように出ます
正規表現雑技
など
(ニュータイプには SQLパズル や XSLTパズル があります)

最近の正規表現は機能拡張競争で、ついてゆけません
(追っかける必要あまりない)
正規表現で 入れ子、変数、コメント、など書けるのがありますが
エディターの対話操作で そんなのは、頭で正しく書けません。

[ ]