X



アセンブラ初心者スレッド 2©2ch.net
■ このスレッドは過去ログ倉庫に格納されています
0669デフォルトの名無しさん
垢版 |
2019/12/03(火) 11:32:29.72ID:g2sdmHcp
チープなやつは大体どれも変態だよ

C言語で記述不可能なのもあるから
PICは変態な中でもまだマシな方
0674デフォルトの名無しさん
垢版 |
2019/12/14(土) 02:42:04.15ID:er8xklWG
日本では特に間違って伝わってるからなぁ
想像するのがC言語やスクリーンエディタ機能組み込まれてた頃のBASICのGOTOっていう
0675デフォルトの名無しさん
垢版 |
2019/12/14(土) 07:46:40.45ID:6lStbnNy
古臭くて役にも立たない話をするのが大好きで、LARGEADDRESSAWAREやキャリーフラグで
大爆死した誰かさんがしれっと戻って来てるのか?
0676デフォルトの名無しさん
垢版 |
2019/12/14(土) 12:04:43.11ID:teIen0U1
GOTOがというより抽象化に関する教育の不足が問題なんじゃ
昨今のプログラミング教育も本質が見えているようには見えない
0677デフォルトの名無しさん
垢版 |
2019/12/14(土) 12:07:38.82ID:2PNj6NH4
歪んだ教育のせいで
ループ内で意地でも
continue, break, goto
を使わない人がいる

その為、
無駄な変数を使ったり
ループ条件が複雑になったり
本末転倒
0678デフォルトの名無しさん
垢版 |
2019/12/14(土) 13:25:49.98ID:TlZt0bii
breakにラベル指定出来なかったのはCの設計ミスやろ
0679デフォルトの名無しさん
垢版 |
2019/12/14(土) 13:34:05.64ID:JwYnIOEa
多重ループはgotoで抜ける
って事だろうけどね
gotoはラベル名を考えるのが面倒

break 2;
で2段階breakが出来ると良い
0680デフォルトの名無しさん
垢版 |
2019/12/14(土) 13:39:05.39ID:qH7KRmrQ
>>679
N88-BASICのような時代は、行番号があったからラベル名を考える必要が
なく楽だった。MASMの場合は、プロシージャローカルのラベル名が
使えたので、lab1:, lab2: のようにしておくと楽だった。
Cの場合、見た目的に「ラベルが浮く」現象が起きるのも問題。
0681デフォルトの名無しさん
垢版 |
2019/12/14(土) 13:44:49.72ID:qH7KRmrQ
BASICの場合、
1000 xxx
1010 if xxx > xxx then 1200
1020 xxx
1030 goto 1300
1200 xxx
のように書けて至って楽だったし、見た目も綺麗に書けた。

アセンブラの場合も
xxx proc near
   mov yyy,zzz
lab1:
   call aaa
lab2:
   dec ecx
   jnz bbb
xxx endp
のように命令の前には tab(0x09) 付けされ、ラベルと区別が付き易いのでとても
綺麗に書けた。ところがCの場合は、ラベルと命令の見た目のバランスが悪いので
問題となった。構造上の汚さよりもその問題の方が大きい。
0684デフォルトの名無しさん
垢版 |
2019/12/14(土) 16:23:54.51ID:qH7KRmrQ
>>683
こんな感じですか?
{
  {
  ラベル名1:
    if ( xxx < yyy ) {
      普通の文1;
    ラベル名2:
      普通の文2;
    }
  }
}
0691デフォルトの名無しさん
垢版 |
2019/12/15(日) 11:22:32.97ID:ymerGKQi
アセンブラは元々CPUに寄せてるのが普通で、人間に合わせるなんてこと考えてません。
人間がわかりやすいようにしたければマクロで補うなり、プリプロセッサ作るなどして工夫すればいいんですよ。
0693デフォルトの名無しさん
垢版 |
2019/12/15(日) 13:07:08.62ID:o9m7qUoD
ハーバードだろ
0694デフォルトの名無しさん
垢版 |
2019/12/15(日) 13:31:23.47ID:ymerGKQi
>>692
でもね、プロセッサ変わる度に覚え直すのは面倒だしつらいだろ。
面倒なものや難しいものをそのまま力業で押し通そうとするのはやっぱり頭悪いやり方。
賢い人なら、もっと頭使って少しでも使いやすく、わかりやすく変えていくもんだと思うんだよね。
0697デフォルトの名無しさん
垢版 |
2019/12/15(日) 19:26:43.84ID:ymerGKQi
>>696
Cが対応しているプロセッサならそれ使えばいいけど、同じ処理をアセンブラで書くのとCで書いたのでは実行ファイルのサイズが大きく違う。
Cは余計なランタイムルーチンがリンクされて無駄に太る。Cで書いてもアセンブラで書くのとほとんど同じサイズになる処理系があればその方が良い。
そして、なければ作るしかない。覚えにくいニーモニックを頑張って覚えるくらいなら、そういう処理系を作ることに労力を使ったほうがいいんじゃないかな。
0698デフォルトの名無しさん
垢版 |
2019/12/15(日) 19:42:57.22ID:5kgRNS4L
今時マイコンですら結構な容量のフラッシュROMを積んでいるし
高級言語に由来するフットプリント増が問題になるケースは少ないと思うが
高いリアルタイム性が要求されたり重い処理をするケースはアセンブラで書く場合がある
0699デフォルトの名無しさん
垢版 |
2019/12/15(日) 20:20:04.05ID:5sPbacoo
>>697
需要がないプロセッサは作らない
それだけ

変態アーキテクチャは理由があってそうなってる訳だし
普通のCPUならC/C++で使いやすいように整備されてる

Cランタイムサイズが問題になるCPUだと
ランタイムも小さく出来るのが普通
(printf、malloc を使わないなど)
0704デフォルトの名無しさん
垢版 |
2020/01/14(火) 15:59:36.64ID:uFo9dhko
68000君は居ないようだな。残念だ
C言語も神が作ったのではない、breakやcontinueがどこに飛ぶのか分からん時はある。
入門書を信じ込んだ狂信者、原理主義者のような、痛い目に会ってない素人は結構いる。
0705デフォルトの名無しさん
垢版 |
2020/01/14(火) 19:13:53.43ID:VTSZmZmV
>>704
> breakやcontinueがどこに飛ぶのか分からん時はある。
そんな経験はないなあ。普通はCの仕様通りに動く。
Cの仕様通りに動かないとしたらそのCコンパイラのバグだと思いますよ。
もし本当にわけがわからない動作をしたときはテストプログラムを書いてどう動くか調べたり
アセンブラソース出力して見てみればいい。
0707デフォルトの名無しさん
垢版 |
2020/01/15(水) 12:54:18.67ID:mdjDjCL2
素朴な疑問なんだが逆アセンブラのラベルってどうやって生成されるの?
レジスタ間接ジャンプのジャンプ先アドレスなんて実行してみないと判らないような・・・
0709デフォルトの名無しさん
垢版 |
2020/01/16(木) 05:34:03.43ID:I1VMveuP
>>705
>そんな経験はないなあ。普通はCの仕様通りに動く。
多重ループ脱出やifやなんやらのネストでどこに行くか分からなくなる事は無かったんか
Cの経験浅い人は、そういうことが分からないんだろうな。
0712デフォルトの名無しさん
垢版 |
2020/01/16(木) 23:36:50.30ID:GgmseacB
>>709
複雑なものを複雑なままコードにするからそうなる。
多重ループと言ってもせいぜい2重か3重だし、それ以上深いループになるようなコードだったら
そもそも考え方が悪いからシンプルになるように書き直す。中身をサブルーチンに追い出して、
ループ構造と脱出が一目でわかるようにしても良い。
ifのネストも同様に、細部の条件を洗い出してパラメータを変えて呼び出すだけで動くようにする。
そうすればif文を見なくていいしそれぞれ1行で呼び出せる。
とにかくできるだけ構造がシンプルでわかりやすくなるように工夫することだよ。
0713デフォルトの名無しさん
垢版 |
2020/01/18(土) 09:17:15.53ID:bQ1xI4/b
>>709
そのためにC言語にはgoto文があるわけだが
別にスパゲッティプログラム書くためにあるわけじゃないぞ
0716デフォルトの名無しさん
垢版 |
2020/05/14(木) 17:51:17.70ID:f1vNNG/3
まったくの初心者なのですが、アセンブリ言語を理解できるようになりたいです。
入門サイトなどを探しても自分が探しているCPUを取り扱っている物は見つかりませんでした。
まだCPUの仕組みもよく理解していないような状態なので、種類に拘らずそのような入門サイトなどで勉強した方がいいのでしょうか。
一通り学習を終えた後、別のCPUの言語でもすぐ対応できますか?
iosアプリのリバースエンジニアリング をしてみたいと思っているのでarm64のコードを理解できるようになりたいです。(用語などの使い方が間違っていたらすみません。)
0717デフォルトの名無しさん
垢版 |
2020/05/14(木) 17:59:48.21ID:xR/PZA9p
マルチ死ね
0718デフォルトの名無しさん
垢版 |
2020/05/14(木) 19:21:25.82ID:FSEZeoAj
情報処理資格の教科書から、始めた方がよい。
CASL 2 という仮想アセンブラもある

仮想アセンブラとは、各メーカーごとの実際のアセンブラではなくて、抽象的なもの

仮想アセンブラでは、LLVM が最も有名
0719デフォルトの名無しさん
垢版 |
2020/05/15(金) 10:21:28.00ID:QqRlTuRs
動機を当ててやるか。ゲームを改造して無双したいのだろう。
だがそんなの対策済みで無駄なことだ。
0720デフォルトの名無しさん
垢版 |
2020/06/17(水) 20:16:42.08ID:mLHHLomt
実プロセッサのアセンブラを学ぶのに仮想アセンブラって役立つか?
LLVMなんてレジスタ数無制限だしスタック無しでも処理を書けるだろ
実際のプロセッサでそれは現実的ではないしスタック操作はボトルネックにもなっている
0722デフォルトの名無しさん
垢版 |
2020/06/21(日) 16:12:29.75ID:rRP2z2l8
MPUそのものは仮想でもエミュがあってそこそこ実用になるなら良いんじゃない?
0724デフォルトの名無しさん
垢版 |
2020/06/30(火) 20:45:59.73ID:2de2B/rP
コンパイラにアセンブラ出力させてみた結果
8bitのアセンブラが簡単なんて嘘

Cソース
https://pastebin.com/bWfLhn8Y

8bit MSX-C Ver1.1 アセンブラ出力
https://pastebin.com/Bzt3fFaX

16bit Turbo-C Ver1.5 アセンブラ出力
https://pastebin.com/y82ifpxs

64bit Ubuntu 18.04 x86_64 gcc-7.4.0 アセンブラ出力
https://pastebin.com/PTuEv5uL

64bit Ubuntu 20.04 ARM64 gcc-9.3.0 アセンブラ出力
https://pastebin.com/9N4eKWeg
0725デフォルトの名無しさん
垢版 |
2020/06/30(火) 20:50:56.99ID:2de2B/rP
ちなみにgccでは
int func01() __attribute__((noinline,noclone));
とやってインライン展開を抑制してます
0727デフォルトの名無しさん
垢版 |
2020/06/30(火) 21:05:11.63ID:dU7zENbL
>>724
Cのintは16bitだから、8bit CPUではint変数を2回に分けて転送しないといけない。
複雑になって当然。
0728デフォルトの名無しさん
垢版 |
2020/06/30(火) 21:11:37.45ID:e6PapWOV
単純な命令しかなくて命令数も圧倒的に少ない8bit
複雑な命令がたくさんあって命令数も1000を越える64bit
0730デフォルトの名無しさん
垢版 |
2020/07/01(水) 04:09:06.24ID:GZMydJ4F
>>726
8bit整数を扱うだけで済む処理なら簡単だが、8bitを超える可能性がある処理だと途端に面倒になる。
8bitなんてすぐ溢れる。
0732デフォルトの名無しさん
垢版 |
2020/07/01(水) 10:54:24.39ID:dk2qwU4W
簡単さだったら新しいCISCに分があるんじゃね
ttps://uploader.purinka.work/src/17167.png
R0はスタックポインタ。呼び出し規約の都合上引数の一部が
スタックに積まれている以外はamd64と同じ感じか

同じ8bitでも8051とAVRじゃ大分違うと思う
0733デフォルトの名無しさん
垢版 |
2020/07/01(水) 11:12:01.44ID:BWQBxkNi
命令を覚える命令を使うのが簡単か
同じ機能を実現するのが簡単か

で結果が180度違う
0734デフォルトの名無しさん
垢版 |
2020/07/01(水) 11:14:42.34ID:BWQBxkNi
8bitCPUのソフトエンジニア
64bitCPUのソフトエンジニア
どちらがより多くの知識や経験が必要か

一般的には64bitの方が必要
0739デフォルトの名無しさん
垢版 |
2020/07/02(木) 08:31:24.65ID:RyBCtyYa
8bitが簡単と言われるのは命令の数が限られてるのと、簡単なことしかしないから
64bitでもよく使われる限られた命令だけ使って、8bitと同じことをやれば
8bitよりも簡単
実際は周辺や割り込みコントローラなんかもリッチになるので大変だけどね
Arduinoみたいにそのあたりを意識しないなら64bitの方が8bitよりも簡単
0743デフォルトの名無しさん
垢版 |
2020/07/02(木) 19:30:02.70ID:1S4E8SKc
アセンブラでしか書けない特殊処理(特殊命令、特殊レジスタへのアクセスなど)
速度やリソースのチューニング
趣味
0744デフォルトの名無しさん
垢版 |
2020/07/02(木) 20:08:46.86ID:L2HGsVdw
まあ趣味だな。Cで書けない処理をアセンブラで書けたら「やった」て気になるしな。
0746デフォルトの名無しさん
垢版 |
2020/07/02(木) 20:31:36.38ID:L2HGsVdw
趣味だからどういう処理でも自分が満足できればそれでいいんじゃね?
簡単な処理から始めてだんだん難しい処理に挑戦するのも面白いし
0748◆QZaw55cn4c
垢版 |
2020/07/02(木) 21:30:53.96ID:L13EtRzW
仮にアセンブラの本を書くとして、その題材になにを選ぶか、アセンブラだからこそできる!というナイスな題材がほとんど思いつかないのです…
0749デフォルトの名無しさん
垢版 |
2020/07/02(木) 22:24:08.15ID:L2HGsVdw
思いつかないってことは、本当にやりたいと思ってないってことだろうな。
たとえば部屋で飼ってる猫の様子を出先から監視したいと思ったらArduinoとカメラユニットを組み合わせて
スマホから見られる制御ソフトを作るだろう。
0750◆QZaw55cn4c
垢版 |
2020/07/02(木) 23:09:16.80ID:UiUhO26q
>>749
それはアセンブラだからこそできる、という題材ですか?
0754デフォルトの名無しさん
垢版 |
2020/07/02(木) 23:38:56.48ID:dBIHsFi5
ペリフェラルAとペリフェラルBを同期させて動かしたいなんて場合はアセンブラの使用を検討する
0755デフォルトの名無しさん
垢版 |
2020/07/02(木) 23:40:30.23ID:1S4E8SKc
えらい抽象的だな
タイミングにシビアなのはコンパイラに依存しないようにアセンブラで書くってのはある

もちろんシビアな部分だけ
0758デフォルトの名無しさん
垢版 |
2020/07/03(金) 07:56:44.00ID:jbweNl0h
最近ではSIMDやDSP命令はCの文法で記述出来るのが普通
もちろんガチガチのチューニングはアセンブラが一番だから
結局チューニングという範疇
0759デフォルトの名無しさん
垢版 |
2020/07/03(金) 17:33:03.39ID:Rc6pK0Eu
>>750
俺は「アセンブラだからこそ」という制限など付けていない。そういう制限はあんたが勝手に付けたものだ。
作りたいものを作る。それが趣味だ。
違うと思うなら自分で考えてアセンブラだからこそというものを作ればいい。
0760デフォルトの名無しさん
垢版 |
2020/07/03(金) 17:34:28.08ID:Rc6pK0Eu
>>753
趣味なんだから適すかどうかは関係ない。適さないと思うなら作らなければいい。
人それぞれだ。
0761デフォルトの名無しさん
垢版 |
2020/07/03(金) 18:57:27.44ID:C0RVqI6W
趣味ならアセンブラを使う理由なんて何でも良い
でもどうせならアセンブラを使うことでメリットが何かしら得られる方が良い
そのメリットは大きい方が良い
と思うのは普通かと
0762デフォルトの名無しさん
垢版 |
2020/07/03(金) 19:34:45.09ID:Rc6pK0Eu
>>761
趣味は一般的なメリットなんか考えてたらできない。
鉄ヲタなんか、自分で電車運転したいためだけにパソコンのシミュレータを自作してる。
それも20年もかけて作って値段は0。タダで配ってる。金銭的なメリットはゼロだ。
窓から見える信号機や駅のデータも手間暇かけて現地に行ってパソコンのデータに変換してる。
運転席の計器類やすれ違う電車のモデルやデザイン、色まで正確に再現してる。
とてもこれだけの手間に見合うメリットがあるとは思えない。
でもこれだけの無駄をしてもやりたいのが趣味なんだよ。
鉄ヲタがアセンブラを使うとしたら、電車が動くスピードが少し遅く感じるから本物と同じくらい反応を早くしたいと
思ったらすぐ使うだろう。とにかくやりたいからやる。それ以外のことは考えないのが趣味だよ。
0764デフォルトの名無しさん
垢版 |
2020/07/03(金) 19:52:48.87ID:v8523RMt
再現性がメリット
ならそれでいいじゃん

アセンブラを使うことで
高速化とか
リソースの節約とか
それもメリット

高速化もせず
リソースも変わらず
質が落ちる
だと何のためのアセンブラ?
0767デフォルトの名無しさん
垢版 |
2020/07/15(水) 00:32:33.69ID:0MCF5KaT
amd64+Linuxでアセンブラを始めたのですが、スタックの状態を勘違いしてのバグや
システムコール時のレジスタの退避し忘れのバグ等に悩まされてます

スタックの利用状況を分かりやすく表示してくれたり、レジスタの状態をチェックしてくれたり
するような、統合開発環境みたいなのはありませんでしょうか
■ このスレッドは過去ログ倉庫に格納されています

ニューススポーツなんでも実況