C言語ならわたしはわかるのですが、アセンブラは理解できるレベルにありません。機会があればいつか挑戦したいです。話は変わりますが、
以下のアセンブラのソースでLEDの点滅まで出来ましたが、これをC言語で理解したいと思っています。翻訳できる方がいらっしゃればご協力のほどよろしくお願いします。また、そこまでは無理でもわかる範囲でアドバイスを戴けたらと思います。よろしくお願いします。
asmソースです。
listp=16f628a
#include<p16f628a.inc>
__CONFIG _CP_OFF & _WDT_OFF & _BODEN_ON & _PWRTE_ON & _INTRC_OSC_NOCLKOUT &
_MCLRE_OFF & _LVP_OFF
w_temp EQU 0x70
status_temp EQU 0x71
CNT1 EQU 0x20
CNT2 EQU 0x21
ORG 0x000
goto main
ORG 0x004
movwf w_temp
movf STATUS,w
movwf status_temp
;ISR Codes
movf status_temp,w
movwf STATUS
swapf w_temp,f
swapf w_temp,w
retfie
main
bcf STATUS,RP0
bcf STATUS,RP1
clrf INTCON
clrf PORTA
movlw 0x07
movwf CMCON
bsf STATUS,RP0
bsf PCON,OSCF
clrf TRISA
clrf TRISB
bcf STATUS,RP0
clrf PORTA
clrf PORTB
main_loop
bsf PORTB,3
call DLY_250
bcf PORTB,3
call DLY_250
goto main_loop
;Delay Routine
DLY_250 ; 250ms
movlw d'250'
movwf CNT1
DLP1;1ms
movlw d'200'
movwf CNT2
DLP2
nop
nop
decfsz CNT2,f
goto DLP2
decfsz CNT1,f
goto DLP1
return
END
No.1ベストアンサー
- 回答日時:
PICはかじった程度です。
質問されている内容のアセンブラをC言語に変換する事を目的とされているのでしたら、余りお勧めいたしません。と、言うのもコンパイラーの仕様や定義されているビルトインの関数の仕様がわからないとどのように変換されるか予測が付かないためです。
そこを承知の上ででしたら、少しヒントになるかと思う擬似的なコードは書けると思います。
が、しかし満足できる形で動くかわかりません。
まず、EQUで書かれている部分をdefineに置き換えます。
#define w_temp 0x70
・・・(省略)・・・・
基本的に各アセンブラのニモニックに対応したC言語用の低級関数が用意されていると思いますからそれをつかって記述する事になると思います。
main(){
bcf
clrf
などで宣言されている部分
bsf
などで、PICの動作設定を行う部分STATUSレジスタへ設定する部分
clrf
などでポートの初期化を行う部分を記述します。
次に
while(1){
bsfでportbの3ビット目をセットする部分
DLY_250()関数を呼び出す部分
bsfでportbの3ビット目をクリアする部分
DLY_250()関数を呼び出す部分
}
}//main()関数の終了
DLY_250(){ //プロトタイプ宣言できないのであればmain()関数の前に書くとよいでしょう
unsigned int CNT1,CNT2;
for(CNT1=250;CNT1<=0;CNT1--){
for(CNT2=200;CNT2<=0;CNT2--){
nop;//nopを発行する関数を呼び出す
nop;//同上
}
}
}//DLY_250の終了
ORG 0x004から開始するアセンブラの部分及びISR Codeの部分はどのように設定するのかわかりません。コンパイラのprecompileの部分で指定するか、GUIなどがあればオプションで設定できるのかもしれません。または、ヘッダーに記述する事で解決するかもしれません。
こんな感じでしょうか。参考までに。
お忙しいところ、ご親切にありがとうございます。とりあえず、picが動作したので一安心しています。今後について、折角なので、書籍を買ってアセンブラを覚えようと思います。picがあるので難しいですが、敷居は少し低くなった感じです。そして、アセンブラが解るようになれば、改めてc言語でチャレンジしようと思います。予定は未定ですけれども頑張りたいと思います。有難うございました。
No.2
- 回答日時:
> C言語ならわたしはわかるのですが、アセンブラは理解できるレベルにありません。
> 以下のアセンブラのソースで
VisualStudioのソースでとか言わない気もしますが。
CコンパイラはC言語のソースを機械語に翻訳するソフト。
アセンブラはアセンブリ言語で書かれたソースを機械語に変換するソフト。
『アセンブラを理解』ってソースから機械語が類推できるみたいな感じでも使いますよね。
普通は++n;で機械語のコードが類推できないと思う(コンパイラの動作は解らない)
『C言語ならわかる』『アセンブラは理解できるレベルに』右と左で同様のものをいってない。
片方はソフトの処理について、もう片方は言語のソースについていっているのですよね。
#include<p16f628a.inc>
上記はC言語にもある #includeと同じものですね。
> __CONFIG _CP_OFF &
> _WDT_OFF &
> _BODEN_ON &
> _PWRTE_ON &
> _INTRC_OSC_NOCLKOUT &
#includeした部分で定義されているはずです。どのアドレスやポートにどんなデータを書き込んでいるなど具体的な動作はincludeするファイルを見れば解るかと思います。
CNT1 EQU 0x20
xxx EQU yyy
はxxxにアドレスを割り当て、その内容をyyyとするなので
#define CNT1 0x20
に近いが同じではありません。(gotoの飛び先としてxxxを使っている様な場合にはとか)
int CNT1=0x20;
の方が近い気もします。(#defineだと定義されたCNT1の書き換えは不能だけどCNT1はアドレスを割り当てられ値を書き込む事も可能かと)
アセンブリ言語はCPUに依存しますので16F628Aなら16F628Aの命令表(ニーモニック表)など(CPUの資料)を見ればC言語との対応が解るかと思いますよ。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
あるあるbotに投稿したけど採用されなかったあるある募集
あるあるbotに投稿したけど採用されなかったあるあるをこちらに投稿してください
-
フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
あなたが普段思っている「これまだ誰も言ってなかったけど共感されるだろうな」というあるあるを教えてください
-
映画のエンドロール観る派?観ない派?
映画が終わった後、すぐに席を立って帰る方もちらほら見かけます。皆さんはエンドロールの最後まで観ていきますか?
-
海外旅行から帰ってきたら、まず何を食べる?
帰国して1番食べたくなるもの、食べたくなるだろうなと思うもの、皆さんはありますか?
-
天使と悪魔選手権
悪魔がこんなささやきをしていたら、天使のあなたはなんと言って止めますか?
-
アセンブラからC言語に変換するにはどうすればいいのでしょうか?
その他(プログラミング・Web制作)
-
アセンブリ言語からC言語への変換について
C言語・C++・C#
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・【お題】絵本のタイトル
- ・【大喜利】世界最古のコンビニについて知ってる事を教えてください【投稿~10/10(木)】
- ・メモのコツを教えてください!
- ・CDの保有枚数を教えてください
- ・ホテルを選ぶとき、これだけは譲れない条件TOP3は?
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・【コナン30周年】嘘でしょ!?と思った○○周年を教えて【ハルヒ20周年】
- ・ハマっている「お菓子」を教えて!
- ・最近、いつ泣きましたか?
- ・夏が終わったと感じる瞬間って、どんな時?
- ・10秒目をつむったら…
- ・人生のプチ美学を教えてください!!
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・都道府県穴埋めゲーム
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
c++の勉強方法を教えてくださ...
-
10進数からN進数に変換するプロ...
-
プログラミングの課題がわから...
-
逆コンパイルと逆アセンブルの...
-
Windows Formアプリからコンソ...
-
ArduinoのジャイロモジュールMP...
-
VisualStudioで、コードを印刷...
-
VisualStudio2022でC言語プログ...
-
C言語って古いですか?
-
パソコン
-
今ってプログラミング言語は何...
-
2つほどお聞きしたいことがあり...
-
どうして+3
-
プログラミング言語についてc++...
-
次の記述について
-
UART通信の取説で,left floati...
-
C#でTreeViewのCheckBoxのサイ...
-
プログラムの実行時に'<'でリダ...
-
私は
-
これて逆じゃないですか?
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ライン数とステップ数の違いは?
-
アセンブラからC言語に変換する...
-
実行ファイルからソースはみれる?
-
PICに書き込むプログラムや変数...
-
素朴な疑問 (C言語とアセン...
-
PC-9801でマシン語を学習するに...
-
アセンブラのLA
-
バイナリの実行ファイルをgccを...
-
アセンブラ言語がわかりません。
-
PICはアセンブラとC言語のどち...
-
このアセンブラの意味を教えて...
-
アセンブラエディタ
-
汎用レジスタのワーキングビッ...
-
[C言語→アセンブリ言語]はどう...
-
【H8マイコン】HEWで埋め込みア...
-
アセンブラ言語で質問です。
-
PowerPC用逆アセンブラを知りま...
-
void __cdeclなど_
-
解析魔法少女を読んだ方に質問
-
アセンブラのリンカのダウンロ...
おすすめ情報