X



アセンブラ初心者スレッド 2©2ch.net

■ このスレッドは過去ログ倉庫に格納されています
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でアセンブラを始めたのですが、スタックの状態を勘違いしてのバグや
システムコール時のレジスタの退避し忘れのバグ等に悩まされてます

スタックの利用状況を分かりやすく表示してくれたり、レジスタの状態をチェックしてくれたり
するような、統合開発環境みたいなのはありませんでしょうか
0769デフォルトの名無しさん
垢版 |
2020/07/15(水) 12:20:50.44ID:cL9c5hZ8
慣れたら悩まなくなる
0770デフォルトの名無しさん
垢版 |
2020/07/15(水) 14:03:15.88ID:p6AIoBG7
アセンブラだと自己書き換えコードが出来るぞ
それによる考えられるメリットは様々あり、ここでは書きにくいこともあるw
あと、正確なことは分からんが、OS開発ではアセンブラがしばしば使われていて、特にブートローダーの開発で使われていると聞いたことがあるな
他にはマイコンだとアセンブラの方が開発しやすいこともあったりするのか?知らんけど
俺は、スレッドセーフなプログラミングにはアセンブラの知識が不可欠だと思っているが、これは他者の意見も聞きたいところだな
他にもアセンブラでしか出来ないことはあるのにアセンブラは趣味の為ときたもんだ(怒)
まずコンパイラは確実
エミュレータなんかもそうじゃないのか?知らんけど
0771デフォルトの名無しさん
垢版 |
2020/07/15(水) 14:24:49.32ID:miBvJk/V
>>767
Linuxでは知らんが、VSのデバッガだと、EAXなどのマシンレジスタの内容を常時
表示できる。
スタックに関しては、push、pop を組にすることと、ちゃんと数える習慣を
付けるしかない。
アセンブラは、言語仕様は簡単に思えるかもしれないが、頭脳が必要。
それはちょうど、数学が小学生でも理解できる四則演算だけを組み合わせているだけ
なのに、大部分の人がどこかで難しくなってしまうのと同じようなもの。
0773デフォルトの名無しさん
垢版 |
2020/07/15(水) 14:41:03.67ID:cL9c5hZ8
知能は文章に滲み出る
0774デフォルトの名無しさん
垢版 |
2020/07/15(水) 15:59:06.15ID:p6AIoBG7
知能はコードに滲み出る
0777デフォルトの名無しさん
垢版 |
2020/07/15(水) 18:23:23.15ID:bZTTdNA2
今時のGUIなデバッガだったらブレーク時にスタックやレジスタの内容を表示できるのは普通じゃね?
個人的にはパイプラインの動作状況を表示してくれるデバッガとか欲しいわ
依存関係に起因するNOP率とか、原因となっている命令の特定とか
0780デフォルトの名無しさん
垢版 |
2020/07/15(水) 18:51:31.23ID:miBvJk/V
>>779
違う。
俺は数学は優秀なほうだ。
0784デフォルトの名無しさん
垢版 |
2020/07/15(水) 19:10:04.26ID:p6AIoBG7
アセンブラに詳しい人はスゴい人多いから失礼な態度はとらない方がいいと思う
0785デフォルトの名無しさん
垢版 |
2020/07/15(水) 19:16:51.08ID:r/dLTGHk
>>767
アセンブラだからと言って人間が1から10まで考えなくてもいいんだよ。
間違いやすい処理はできるだけソフトやツールにさせるように考え方を変えればいい。
スタックの状態が間違いやすいと思うなら、スタックを管理するマクロを組めばいいし、
レジスタ退避を忘れるなら、レジスタ退避するマクロを組んでそれを使えばいい。
0786デフォルトの名無しさん
垢版 |
2020/07/15(水) 20:52:17.63ID:LyK3DjqL
その昔8051用のソフトをフルアセンブラで開発したことがある。デバッグは8個のLEDのみ
1500程度のコードだけどスタックや汎用レジスタの操作で苦労した記憶はないな
ペリフェラルの使い方等は大苦戦だったが

>>767は何を作っているのだろうか。IA-32ならともかくAMD64ならレジスタ本数も多いし
複雑なスタック操作をする機会は多くないと思うんだが
0788デフォルトの名無しさん
垢版 |
2020/07/16(木) 12:38:48.59ID:Bj5j4Y6i
謎の隠しコマンド連発するやつか
0794デフォルトの名無しさん
垢版 |
2020/07/16(木) 20:09:12.31ID:ICgJPJoU
今のアセンブラの需要って
・OS等の低レイヤーの処理をする
・高速化。1クロックでも節約したい
・リアルタイム。nクロック後に○○を実行する必要がある
こんなもんか?
0800デフォルトの名無しさん
垢版 |
2020/07/17(金) 02:55:00.98ID:xni+keKD
>>798
この業界では、アセンブラが使える人と使えない人ではやはり使える人の方が尊敬されるよね
0801デフォルトの名無しさん
垢版 |
2020/07/17(金) 06:35:47.52ID:CFzyXZw3
そういう歪んだ価値観のせいで
アセンブラじゃなくて良い所までアセンブラにするアホがいる
0802デフォルトの名無しさん
垢版 |
2020/07/17(金) 11:02:40.02ID:hPmghiPz
役に立ってる人は忙しいのでわざわざこんな辺鄙なところに描き込みに来る暇がない
自分も役に立ってない
0805デフォルトの名無しさん
垢版 |
2020/07/17(金) 14:04:20.27ID:xni+keKD
>>801
Cが得意だと何でもCで書こうとする。
アセンブラが得意だと何でもアセンブラで書こうとする。
プログラマなら良くあること。
アセンブラがそれほど得意でない人が見たら余計なことと思うんだろうけど。
0807デフォルトの名無しさん
垢版 |
2020/07/17(金) 14:36:42.77ID:R70AGkgr
PICマイコンみたく用途が限られてると、返ってアセンブラの方が短かったりする。
0808デフォルトの名無しさん
垢版 |
2020/07/17(金) 15:01:36.87ID:xXsIieN6
PICよりAVR
0809デフォルトの名無しさん
垢版 |
2020/07/17(金) 16:45:31.89ID:mOeBhMfJ
おいらがマシン語勉強した時(Z80A)ニモニック表見て作ってたね
相対ジャンプなんか手で計算して 今でもコード覚えてるよ LD A = 3E とか LD Bは06とか
アセンブラが手に入った時はなんて便利なんや〜と感動した
当時は子供でまさか仕事でもアセンブラ組むとは思わなかったけどね
0810デフォルトの名無しさん
垢版 |
2020/07/17(金) 17:42:45.57ID:zYg36R0O
http://www.yamamo10.jp/yamamoto/comp/Z80/instructions/index.php#LOAD08
A や B にイミディエイト値を入れる場合
00DDD110
DDD はレジスタ番号
B=0, C=1, D=2, E=3, H=4, L=5, A=7
LD B,n は 00000110 (06), n
LD A,n は 00111110 (3E), n
なんで DDD=6 は飛んでるんだっけ
0813デフォルトの名無しさん
垢版 |
2020/07/17(金) 21:14:06.39ID:2HBm6uJU
>>806
他人の評価などどうでもいい。俺もそんな古くさい見方しかできないあんたを三流と言ってあげよう。
0816デフォルトの名無しさん
垢版 |
2020/07/18(土) 13:49:01.14ID:HDs6SbLj
>>814
昔の事だったし、資料が手元に無いが、原則論として
DDDとかのレジスタ番号の1つとして、(HL)が書いてあり、
それがDDD=6だったと思う。
ただし、原則論なので、全ての命令でDDD=6にすれば必ず合法で、
(HL)になるという意味ではない。
0817デフォルトの名無しさん
垢版 |
2020/07/18(土) 13:51:52.21ID:HDs6SbLj
>>816
リンク先のページでも、
INC r; DEC r; LD r1,r2; LD r2, r1 においても、DDD=6は、(HL)の命令に該当
していることが分かる。
0819デフォルトの名無しさん
垢版 |
2020/07/18(土) 14:24:37.73ID:HDs6SbLj
AND, OR, XOR, ADD, ADC, SUB, SBC, CP,
やローテート、シフト命令でも、レジスタ様の命令で、
レジスタ番号を6にすると、(HL)に対する命令と同じ
マシン語になっていることが分かる。
0820デフォルトの名無しさん
垢版 |
2020/07/19(日) 04:45:05.98ID:1aVreze3
x86_64のアセンブラを始めようと思ってるのですが、レジスタの使い方を教えてください

以前、80286の頃だと、たとえばECXレジスタはカウンタ用に使うものだったと記憶してますが
x86_64だとほぼもう汎用レジスタとして使えるように見えます
gccなどもx86_64用でもそういうコードを出力するようです

昔の用途での使い方について、どれくらい意識した方がよいのでしょう
0821デフォルトの名無しさん
垢版 |
2020/07/19(日) 10:17:20.71ID:TvRHHtME
>>820
CPUの世代によっては、loop 命令は、
dec ecx
jnz ラベル名
とするよりも遅いことがあるので、後者の書き方の方が良い。
その意味で、ループカウンタを入れるレジスタとして、ecxにこだわる必要はない。

ただし、rep movsd などでは今でもカウンタが ecx に固定されている。

それ以外の場面では、ecxは、他の汎用レジスタと同じと考えてよい。

なお、ebpは汎用レジスタとしては使わず、スタックフレームの先頭アドレスを保持して、
ローカル変数をアクセスするために使うことが原則。
ただし、ローカル変数をebpの代わりにespを介してアクセスすることによって
ebpを汎用レジスタとして使う流儀も有り得る。
その場合は、push,pop命令によってespが変化してしまうので注意が必要となる。
なお、masmのlocalやarg擬似命令は、ebp方式を前提としている。

edi,esi は、movsd で使うことは意識しておく。
edx,eaxは、div命令で使うことを意識しておく。
edi,esi,ebpは、関数呼び出しで保存されるが、eax,ebx,ecx,edxは保存されないことを意識しておく。
eaxは関数呼び出しの戻り値になることを意識しておく。
0822デフォルトの名無しさん
垢版 |
2020/07/19(日) 10:18:46.24ID:TvRHHtME
>>821
さらに、dec reg 命令より、sub reg,1 の方が速いことがある。
前者は2クロック、後者は1クロック。なので、loop文は、
sub ecx,1
jnz ラベル名
と書くのが最良。
0824デフォルトの名無しさん
垢版 |
2020/07/19(日) 12:36:44.38ID:h5vFOzT4
レジスタが増えてるし
SIMDレジスタもあるんで
自由度は高い

MULとDIVは相変わらずRAX, RDX縛りがあるけど
0826デフォルトの名無しさん
垢版 |
2020/07/19(日) 14:46:51.74ID:1aVreze3
820です

回答ありがとうございました

ABIやライブラリ等での使い方・縛りを考慮して使うようにすると、
やはりそれぞれのレジスタをアキュムレータ、カウンタ等として使う、
というのを指針にした方がよさそうですね
0827デフォルトの名無しさん
垢版 |
2020/07/19(日) 15:35:41.18ID:AazHQwx2
>>826
いや、普通の命令文に対する繰り返しのカウンタとしては、ecxを意識する必要はない。
計算のアキュムレータとしても、eaxを意識する必要も余りない。
余りを求める割り算だけは特殊。
■ このスレッドは過去ログ倉庫に格納されています