This discussion has been locked.
You can no longer post new replies to this discussion. If you have a question you can start a new discussion

アセンブラ言語で速くなるでしょうか

お世話になります。

大量の四則演算をする必要が出てきて処理時間が足りるか不安になってきました。

アセンブラ言語は速いと言われますが、マイコンが演算器を持っている場合はC言語で書いても同じなのでしょうか。

使っているのはRL78です。

初歩的な質問で本当に申し訳ありません。教えていただけたら幸いです。

よろしくお願いいたします。

Parents
  • はるのうらら さん、こんにちは。NoMaYです。

    ひとくちに、アセンブラ言語でプログラムが書けるようになるといっても、さまざまなレベルがあると思います。(英語、独語、仏語、露語、中国語、とかもそうですよね。)

    (A) マニュアルを一切見ずに、数万行のアセンブラプログラムを書いて、更に、自力で機械語へ変換出来てしまう。嘘か真か分かりませんが、アセンブラ全盛時代にはそんな人がいた、という話も見掛けたような気がします。

    。。。途中のランクを省略(というか実際にランク分けの内容まで考えていませんが)。。。

    (E) マニュアルを見なくてもコンパイラが生成したコードが何となく分かる(最適化が掛かっていても)。また、コンパイラが生成したアセンブラソースをベースにしてマニュアルを見ながら多少の追加/変更/削除が出来る(多少時間が掛かっても)。

    脱線しますが、私はEランクですね。ただ、「多少の追加/変更/削除」という部分で、パズルを解くような追加/変更/削除を行うことが出来るというのが、ランクの枠外の私の特技かな、とも思っていますが、、、(C言語のマクロでもパズル的なものを考えたりしますし、、、)

    話を戻しますと、Eランクでも充分に昇進/昇給の助けに成るのではないかと思う反面、もう今だと、Aランクであること自体が昇進/昇給の助けになることは無いだろうなとも思うのです。

    あと、自分の経験で言うと(プログラムの性能向上はわりと私の得意な業務だったりします)、それなりの規模のプログラムでは、けっこう無駄な処理/効率の悪い処理、というのがあったりしますので、それを見つけて、削除する/処理を見直す、とかしてました。(C言語レベルで。)

    自分ではやったことがなかった(と思う)のですが、アルゴリズムの変更(例えばバブルソートをバイナリソートにする)とか、数学的な性質を利用した演算量の削減(乗除算回数が少なくなるようにうまくカッコで括るとか多項式の直交性から値が0になることが分かっている部分は計算しない)とか、そういうのも有効かな、と思います。

    アセンブラ化したのは、(数十行レベルの)割り込み処理の高速化とか、(フラッシュメモリのブロックサイズの事情で)270バイトのコードを256バイトに収める(パズル脳をフル回転させて1週間とか掛けて([追記]←これはもともとアセンブラプログラムだったものを更にというものでしたのでテーマが少し違いますかね))とか、そういうところだったですね(と思う)。

Reply
  • はるのうらら さん、こんにちは。NoMaYです。

    ひとくちに、アセンブラ言語でプログラムが書けるようになるといっても、さまざまなレベルがあると思います。(英語、独語、仏語、露語、中国語、とかもそうですよね。)

    (A) マニュアルを一切見ずに、数万行のアセンブラプログラムを書いて、更に、自力で機械語へ変換出来てしまう。嘘か真か分かりませんが、アセンブラ全盛時代にはそんな人がいた、という話も見掛けたような気がします。

    。。。途中のランクを省略(というか実際にランク分けの内容まで考えていませんが)。。。

    (E) マニュアルを見なくてもコンパイラが生成したコードが何となく分かる(最適化が掛かっていても)。また、コンパイラが生成したアセンブラソースをベースにしてマニュアルを見ながら多少の追加/変更/削除が出来る(多少時間が掛かっても)。

    脱線しますが、私はEランクですね。ただ、「多少の追加/変更/削除」という部分で、パズルを解くような追加/変更/削除を行うことが出来るというのが、ランクの枠外の私の特技かな、とも思っていますが、、、(C言語のマクロでもパズル的なものを考えたりしますし、、、)

    話を戻しますと、Eランクでも充分に昇進/昇給の助けに成るのではないかと思う反面、もう今だと、Aランクであること自体が昇進/昇給の助けになることは無いだろうなとも思うのです。

    あと、自分の経験で言うと(プログラムの性能向上はわりと私の得意な業務だったりします)、それなりの規模のプログラムでは、けっこう無駄な処理/効率の悪い処理、というのがあったりしますので、それを見つけて、削除する/処理を見直す、とかしてました。(C言語レベルで。)

    自分ではやったことがなかった(と思う)のですが、アルゴリズムの変更(例えばバブルソートをバイナリソートにする)とか、数学的な性質を利用した演算量の削減(乗除算回数が少なくなるようにうまくカッコで括るとか多項式の直交性から値が0になることが分かっている部分は計算しない)とか、そういうのも有効かな、と思います。

    アセンブラ化したのは、(数十行レベルの)割り込み処理の高速化とか、(フラッシュメモリのブロックサイズの事情で)270バイトのコードを256バイトに収める(パズル脳をフル回転させて1週間とか掛けて([追記]←これはもともとアセンブラプログラムだったものを更にというものでしたのでテーマが少し違いますかね))とか、そういうところだったですね(と思う)。

Children
No Data