初心者OK!質問大歓迎!のアセンブラのスレッドです。
基本情報の勉強中の人、PICやH8を勉強中の学生などなど…
前スレ
アセンブラ初心者スレッド
http://echo.2ch.net/test/read.cgi/tech/1314502612/
関連スレ
アセンブラ 13
http://echo.2ch.net/test/read.cgi/tech/1314512680/
アセンブラ初心者スレッド 2©2ch.net
■ このスレッドは過去ログ倉庫に格納されています
2017/04/13(木) 17:35:55.70ID:1WMn3pSz
764デフォルトの名無しさん
2020/07/03(金) 19:52:48.87ID:v8523RMt 再現性がメリット
ならそれでいいじゃん
アセンブラを使うことで
高速化とか
リソースの節約とか
それもメリット
高速化もせず
リソースも変わらず
質が落ちる
だと何のためのアセンブラ?
ならそれでいいじゃん
アセンブラを使うことで
高速化とか
リソースの節約とか
それもメリット
高速化もせず
リソースも変わらず
質が落ちる
だと何のためのアセンブラ?
765デフォルトの名無しさん
2020/07/03(金) 21:30:22.45ID:Rc6pK0Eu >>763
BSDヲタきもって言ってやろうか?
BSDヲタきもって言ってやろうか?
766デフォルトの名無しさん
2020/07/04(土) 00:06:32.98ID:KYM6hePT http://www.littlebsd.com/
https://twitter.com/little_bsd
https://twitter.com/5chan_nel (5ch newer account)
https://twitter.com/little_bsd
https://twitter.com/5chan_nel (5ch newer account)
767デフォルトの名無しさん
2020/07/15(水) 00:32:33.69ID:0MCF5KaT amd64+Linuxでアセンブラを始めたのですが、スタックの状態を勘違いしてのバグや
システムコール時のレジスタの退避し忘れのバグ等に悩まされてます
スタックの利用状況を分かりやすく表示してくれたり、レジスタの状態をチェックしてくれたり
するような、統合開発環境みたいなのはありませんでしょうか
システムコール時のレジスタの退避し忘れのバグ等に悩まされてます
スタックの利用状況を分かりやすく表示してくれたり、レジスタの状態をチェックしてくれたり
するような、統合開発環境みたいなのはありませんでしょうか
768デフォルトの名無しさん
2020/07/15(水) 11:52:01.41ID:Fiuz3Frw 楽したければC使え
769デフォルトの名無しさん
2020/07/15(水) 12:20:50.44ID:cL9c5hZ8 慣れたら悩まなくなる
770デフォルトの名無しさん
2020/07/15(水) 14:03:15.88ID:p6AIoBG7 アセンブラだと自己書き換えコードが出来るぞ
それによる考えられるメリットは様々あり、ここでは書きにくいこともあるw
あと、正確なことは分からんが、OS開発ではアセンブラがしばしば使われていて、特にブートローダーの開発で使われていると聞いたことがあるな
他にはマイコンだとアセンブラの方が開発しやすいこともあったりするのか?知らんけど
俺は、スレッドセーフなプログラミングにはアセンブラの知識が不可欠だと思っているが、これは他者の意見も聞きたいところだな
他にもアセンブラでしか出来ないことはあるのにアセンブラは趣味の為ときたもんだ(怒)
まずコンパイラは確実
エミュレータなんかもそうじゃないのか?知らんけど
それによる考えられるメリットは様々あり、ここでは書きにくいこともあるw
あと、正確なことは分からんが、OS開発ではアセンブラがしばしば使われていて、特にブートローダーの開発で使われていると聞いたことがあるな
他にはマイコンだとアセンブラの方が開発しやすいこともあったりするのか?知らんけど
俺は、スレッドセーフなプログラミングにはアセンブラの知識が不可欠だと思っているが、これは他者の意見も聞きたいところだな
他にもアセンブラでしか出来ないことはあるのにアセンブラは趣味の為ときたもんだ(怒)
まずコンパイラは確実
エミュレータなんかもそうじゃないのか?知らんけど
771デフォルトの名無しさん
2020/07/15(水) 14:24:49.32ID:miBvJk/V >>767
Linuxでは知らんが、VSのデバッガだと、EAXなどのマシンレジスタの内容を常時
表示できる。
スタックに関しては、push、pop を組にすることと、ちゃんと数える習慣を
付けるしかない。
アセンブラは、言語仕様は簡単に思えるかもしれないが、頭脳が必要。
それはちょうど、数学が小学生でも理解できる四則演算だけを組み合わせているだけ
なのに、大部分の人がどこかで難しくなってしまうのと同じようなもの。
Linuxでは知らんが、VSのデバッガだと、EAXなどのマシンレジスタの内容を常時
表示できる。
スタックに関しては、push、pop を組にすることと、ちゃんと数える習慣を
付けるしかない。
アセンブラは、言語仕様は簡単に思えるかもしれないが、頭脳が必要。
それはちょうど、数学が小学生でも理解できる四則演算だけを組み合わせているだけ
なのに、大部分の人がどこかで難しくなってしまうのと同じようなもの。
772デフォルトの名無しさん
2020/07/15(水) 14:29:36.15ID:PuirKKk2 残念な日本語を使う人って多いな
773デフォルトの名無しさん
2020/07/15(水) 14:41:03.67ID:cL9c5hZ8 知能は文章に滲み出る
774デフォルトの名無しさん
2020/07/15(水) 15:59:06.15ID:p6AIoBG7 知能はコードに滲み出る
775デフォルトの名無しさん
2020/07/15(水) 17:04:33.66ID:miBvJk/V 大事なのは、言語ではなく数学。
776デフォルトの名無しさん
2020/07/15(水) 17:58:36.45ID:vzNJtsb7 >>771
おまえが数学を知らないという事は良くわかった
おまえが数学を知らないという事は良くわかった
777デフォルトの名無しさん
2020/07/15(水) 18:23:23.15ID:bZTTdNA2 今時のGUIなデバッガだったらブレーク時にスタックやレジスタの内容を表示できるのは普通じゃね?
個人的にはパイプラインの動作状況を表示してくれるデバッガとか欲しいわ
依存関係に起因するNOP率とか、原因となっている命令の特定とか
個人的にはパイプラインの動作状況を表示してくれるデバッガとか欲しいわ
依存関係に起因するNOP率とか、原因となっている命令の特定とか
778デフォルトの名無しさん
2020/07/15(水) 18:40:28.77ID:miBvJk/V >>776
俺は数学は常時使っているのだが。
俺は数学は常時使っているのだが。
779デフォルトの名無しさん
2020/07/15(水) 18:48:34.73ID:JGqdiMCl >>778
数学を知らないヤツが数学を毎日使うと
数学を知らないヤツが数学を毎日使うと
780デフォルトの名無しさん
2020/07/15(水) 18:51:31.23ID:miBvJk/V781デフォルトの名無しさん
2020/07/15(水) 18:52:38.10ID:JGqdiMCl そう思ってるだけ
782デフォルトの名無しさん
2020/07/15(水) 18:55:17.94ID:miBvJk/V 学生時代に伝説を作ったし、同級生達は知っている。
783デフォルトの名無しさん
2020/07/15(水) 18:57:06.09ID:JGqdiMCl kwsk
784デフォルトの名無しさん
2020/07/15(水) 19:10:04.26ID:p6AIoBG7 アセンブラに詳しい人はスゴい人多いから失礼な態度はとらない方がいいと思う
785デフォルトの名無しさん
2020/07/15(水) 19:16:51.08ID:r/dLTGHk >>767
アセンブラだからと言って人間が1から10まで考えなくてもいいんだよ。
間違いやすい処理はできるだけソフトやツールにさせるように考え方を変えればいい。
スタックの状態が間違いやすいと思うなら、スタックを管理するマクロを組めばいいし、
レジスタ退避を忘れるなら、レジスタ退避するマクロを組んでそれを使えばいい。
アセンブラだからと言って人間が1から10まで考えなくてもいいんだよ。
間違いやすい処理はできるだけソフトやツールにさせるように考え方を変えればいい。
スタックの状態が間違いやすいと思うなら、スタックを管理するマクロを組めばいいし、
レジスタ退避を忘れるなら、レジスタ退避するマクロを組んでそれを使えばいい。
786デフォルトの名無しさん
2020/07/15(水) 20:52:17.63ID:LyK3DjqL その昔8051用のソフトをフルアセンブラで開発したことがある。デバッグは8個のLEDのみ
1500程度のコードだけどスタックや汎用レジスタの操作で苦労した記憶はないな
ペリフェラルの使い方等は大苦戦だったが
>>767は何を作っているのだろうか。IA-32ならともかくAMD64ならレジスタ本数も多いし
複雑なスタック操作をする機会は多くないと思うんだが
1500程度のコードだけどスタックや汎用レジスタの操作で苦労した記憶はないな
ペリフェラルの使い方等は大苦戦だったが
>>767は何を作っているのだろうか。IA-32ならともかくAMD64ならレジスタ本数も多いし
複雑なスタック操作をする機会は多くないと思うんだが
787デフォルトの名無しさん
2020/07/16(木) 03:00:41.32ID:noTJdW03 >>786
お気持ち分かります。
お気持ち分かります。
788デフォルトの名無しさん
2020/07/16(木) 12:38:48.59ID:Bj5j4Y6i 謎の隠しコマンド連発するやつか
789デフォルトの名無しさん
2020/07/16(木) 18:46:15.84ID:Zj8FcZKn790デフォルトの名無しさん
2020/07/16(木) 19:00:00.97ID:RhEyC4tQ >>789
誰と戦ってるの?
誰と戦ってるの?
791デフォルトの名無しさん
2020/07/16(木) 19:02:56.88ID:Zj8FcZKn792デフォルトの名無しさん
2020/07/16(木) 19:43:33.89ID:TL00gXcm スタックにデータ積んでサブルーチンに渡す時がずれやすい
793デフォルトの名無しさん
2020/07/16(木) 19:46:21.84ID:Zj8FcZKn 呼ぶ側がアセンブラ?
何のために?
趣味か?
何のために?
趣味か?
794デフォルトの名無しさん
2020/07/16(木) 20:09:12.31ID:ICgJPJoU 今のアセンブラの需要って
・OS等の低レイヤーの処理をする
・高速化。1クロックでも節約したい
・リアルタイム。nクロック後に○○を実行する必要がある
こんなもんか?
・OS等の低レイヤーの処理をする
・高速化。1クロックでも節約したい
・リアルタイム。nクロック後に○○を実行する必要がある
こんなもんか?
795デフォルトの名無しさん
2020/07/16(木) 20:10:47.57ID:Zj8FcZKn 趣味
796デフォルトの名無しさん
2020/07/16(木) 20:15:52.17ID:Zj8FcZKn リソースを極限までけちる (ROM/RAM)
797デフォルトの名無しさん
2020/07/16(木) 20:17:12.32ID:Zj8FcZKn 自己書き換えコード
798デフォルトの名無しさん
2020/07/16(木) 22:52:53.48ID:t94iKSIB アセンブラも使ってるって言うとカッコいいから
799デフォルトの名無しさん
2020/07/16(木) 22:54:17.68ID:Zj8FcZKn800デフォルトの名無しさん
2020/07/17(金) 02:55:00.98ID:xni+keKD >>798
この業界では、アセンブラが使える人と使えない人ではやはり使える人の方が尊敬されるよね
この業界では、アセンブラが使える人と使えない人ではやはり使える人の方が尊敬されるよね
801デフォルトの名無しさん
2020/07/17(金) 06:35:47.52ID:CFzyXZw3 そういう歪んだ価値観のせいで
アセンブラじゃなくて良い所までアセンブラにするアホがいる
アセンブラじゃなくて良い所までアセンブラにするアホがいる
802デフォルトの名無しさん
2020/07/17(金) 11:02:40.02ID:hPmghiPz 役に立ってる人は忙しいのでわざわざこんな辺鄙なところに描き込みに来る暇がない
自分も役に立ってない
自分も役に立ってない
803デフォルトの名無しさん
2020/07/17(金) 11:27:34.62ID:vcKdiH1z 仕事が生きがいですの社畜理論?
804デフォルトの名無しさん
2020/07/17(金) 12:58:33.29ID:hPmghiPz805デフォルトの名無しさん
2020/07/17(金) 14:04:20.27ID:xni+keKD >>801
Cが得意だと何でもCで書こうとする。
アセンブラが得意だと何でもアセンブラで書こうとする。
プログラマなら良くあること。
アセンブラがそれほど得意でない人が見たら余計なことと思うんだろうけど。
Cが得意だと何でもCで書こうとする。
アセンブラが得意だと何でもアセンブラで書こうとする。
プログラマなら良くあること。
アセンブラがそれほど得意でない人が見たら余計なことと思うんだろうけど。
806デフォルトの名無しさん
2020/07/17(金) 14:14:01.80ID:BZ2Y/mdT >>805
そういう人はエンジニアとして三流。賃金も三流で良い
そういう人はエンジニアとして三流。賃金も三流で良い
807デフォルトの名無しさん
2020/07/17(金) 14:36:42.77ID:R70AGkgr PICマイコンみたく用途が限られてると、返ってアセンブラの方が短かったりする。
808デフォルトの名無しさん
2020/07/17(金) 15:01:36.87ID:xXsIieN6 PICよりAVR
809デフォルトの名無しさん
2020/07/17(金) 16:45:31.89ID:mOeBhMfJ おいらがマシン語勉強した時(Z80A)ニモニック表見て作ってたね
相対ジャンプなんか手で計算して 今でもコード覚えてるよ LD A = 3E とか LD Bは06とか
アセンブラが手に入った時はなんて便利なんや〜と感動した
当時は子供でまさか仕事でもアセンブラ組むとは思わなかったけどね
相対ジャンプなんか手で計算して 今でもコード覚えてるよ LD A = 3E とか LD Bは06とか
アセンブラが手に入った時はなんて便利なんや〜と感動した
当時は子供でまさか仕事でもアセンブラ組むとは思わなかったけどね
810デフォルトの名無しさん
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 は飛んでるんだっけ
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 は飛んでるんだっけ
811デフォルトの名無しさん
2020/07/17(金) 17:45:07.45ID:sm/+SVBD フラグかな
812デフォルトの名無しさん
2020/07/17(金) 17:45:11.86ID:zYg36R0O (HL) が DDD=110 相当にみえなくもないが
命令デコーダーの都合なんだろうな
命令デコーダーの都合なんだろうな
813デフォルトの名無しさん
2020/07/17(金) 21:14:06.39ID:2HBm6uJU >>806
他人の評価などどうでもいい。俺もそんな古くさい見方しかできないあんたを三流と言ってあげよう。
他人の評価などどうでもいい。俺もそんな古くさい見方しかできないあんたを三流と言ってあげよう。
814デフォルトの名無しさん
2020/07/18(土) 13:40:48.90ID:HDs6SbLj >>810
原則的には、DDD=6 は、(HL)に相当している。
原則的には、DDD=6 は、(HL)に相当している。
815デフォルトの名無しさん
2020/07/18(土) 13:46:42.99ID:uRU3MGLx IXとかIYの裏命令の話があるな
816デフォルトの名無しさん
2020/07/18(土) 13:49:01.14ID:HDs6SbLj >>814
昔の事だったし、資料が手元に無いが、原則論として
DDDとかのレジスタ番号の1つとして、(HL)が書いてあり、
それがDDD=6だったと思う。
ただし、原則論なので、全ての命令でDDD=6にすれば必ず合法で、
(HL)になるという意味ではない。
昔の事だったし、資料が手元に無いが、原則論として
DDDとかのレジスタ番号の1つとして、(HL)が書いてあり、
それがDDD=6だったと思う。
ただし、原則論なので、全ての命令でDDD=6にすれば必ず合法で、
(HL)になるという意味ではない。
817デフォルトの名無しさん
2020/07/18(土) 13:51:52.21ID:HDs6SbLj818デフォルトの名無しさん
2020/07/18(土) 13:56:24.86ID:B9g40Bu1 76: ぼくのことわすれないで
819デフォルトの名無しさん
2020/07/18(土) 14:24:37.73ID:HDs6SbLj AND, OR, XOR, ADD, ADC, SUB, SBC, CP,
やローテート、シフト命令でも、レジスタ様の命令で、
レジスタ番号を6にすると、(HL)に対する命令と同じ
マシン語になっていることが分かる。
やローテート、シフト命令でも、レジスタ様の命令で、
レジスタ番号を6にすると、(HL)に対する命令と同じ
マシン語になっていることが分かる。
820デフォルトの名無しさん
2020/07/19(日) 04:45:05.98ID:1aVreze3 x86_64のアセンブラを始めようと思ってるのですが、レジスタの使い方を教えてください
以前、80286の頃だと、たとえばECXレジスタはカウンタ用に使うものだったと記憶してますが
x86_64だとほぼもう汎用レジスタとして使えるように見えます
gccなどもx86_64用でもそういうコードを出力するようです
昔の用途での使い方について、どれくらい意識した方がよいのでしょう
以前、80286の頃だと、たとえばECXレジスタはカウンタ用に使うものだったと記憶してますが
x86_64だとほぼもう汎用レジスタとして使えるように見えます
gccなどもx86_64用でもそういうコードを出力するようです
昔の用途での使い方について、どれくらい意識した方がよいのでしょう
821デフォルトの名無しさん
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は関数呼び出しの戻り値になることを意識しておく。
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は関数呼び出しの戻り値になることを意識しておく。
822デフォルトの名無しさん
2020/07/19(日) 10:18:46.24ID:TvRHHtME >>821
さらに、dec reg 命令より、sub reg,1 の方が速いことがある。
前者は2クロック、後者は1クロック。なので、loop文は、
sub ecx,1
jnz ラベル名
と書くのが最良。
さらに、dec reg 命令より、sub reg,1 の方が速いことがある。
前者は2クロック、後者は1クロック。なので、loop文は、
sub ecx,1
jnz ラベル名
と書くのが最良。
823デフォルトの名無しさん
2020/07/19(日) 12:34:39.03ID:h5vFOzT4824デフォルトの名無しさん
2020/07/19(日) 12:36:44.38ID:h5vFOzT4 レジスタが増えてるし
SIMDレジスタもあるんで
自由度は高い
MULとDIVは相変わらずRAX, RDX縛りがあるけど
SIMDレジスタもあるんで
自由度は高い
MULとDIVは相変わらずRAX, RDX縛りがあるけど
825デフォルトの名無しさん
2020/07/19(日) 12:47:27.95ID:du465xO7 IA-32の命令ならインテルのhpにある
826デフォルトの名無しさん
2020/07/19(日) 14:46:51.74ID:1aVreze3 820です
回答ありがとうございました
ABIやライブラリ等での使い方・縛りを考慮して使うようにすると、
やはりそれぞれのレジスタをアキュムレータ、カウンタ等として使う、
というのを指針にした方がよさそうですね
回答ありがとうございました
ABIやライブラリ等での使い方・縛りを考慮して使うようにすると、
やはりそれぞれのレジスタをアキュムレータ、カウンタ等として使う、
というのを指針にした方がよさそうですね
827デフォルトの名無しさん
2020/07/19(日) 15:35:41.18ID:AazHQwx2828デフォルトの名無しさん
2020/07/21(火) 11:55:19.37ID:08cjL+93 こんな感じで部品並べたら子ーどがてせきるやつないの?
amd64の
https://i.imgur.com/REDBsNI.png
https://i.imgur.com/NUN7ejI.png
https://i.imgur.com/Qchpsl1.png
amd64の
https://i.imgur.com/REDBsNI.png
https://i.imgur.com/NUN7ejI.png
https://i.imgur.com/Qchpsl1.png
829デフォルトの名無しさん
2020/07/27(月) 04:16:34.73ID:FDPJJmZc ない
830デフォルトの名無しさん
2020/08/03(月) 23:51:00.41ID:f8ly6bXL ttps://ja.wikipedia.org/wiki/%E3%82%A2%E3%83%89%E3%83%AC%E3%83%83%E3%82%B7%E3%83%B3%E3%82%B0%E3%83%A2%E3%83%BC%E3%83%89
>アドレッシングモード
>既に使われなくなったアドレッシングモード
>メモリマップド・レジスタ
???国内なら78K0R(現RL78)、海外でもMSC-51(現EFM8BB1)とかはCPUのレジスタがメモリ空間にマッピングされている
いずれも現行製品では
>アドレッシングモード
>既に使われなくなったアドレッシングモード
>メモリマップド・レジスタ
???国内なら78K0R(現RL78)、海外でもMSC-51(現EFM8BB1)とかはCPUのレジスタがメモリ空間にマッピングされている
いずれも現行製品では
831デフォルトの名無しさん
2020/08/04(火) 10:47:29.79ID:DzQriKoF 6809の0-255あたりのやつのことかな
832デフォルトの名無しさん
2020/08/04(火) 10:48:39.15ID:DzQriKoF まあ同じことなんだろうけど
「CPUのレジスタがメモリ空間にマッピングされている」
というより
「メモリ空間がCPUのレジスタにマッピングされている」
というイメージ
「CPUのレジスタがメモリ空間にマッピングされている」
というより
「メモリ空間がCPUのレジスタにマッピングされている」
というイメージ
833デフォルトの名無しさん
2020/08/04(火) 11:41:48.61ID:WjyA4gdt イメージって何か表現してるようで何も言ってないに等しい
834デフォルトの名無しさん
2020/08/04(火) 12:45:04.95ID:g9THIEhB ttps://ednjapan.com/edn/articles/1908/28/news026_3.html
STMはレジスタとSRAMの構造が違うらしい
理由からすると多くのCPUが同じ事やってそう
STMはレジスタとSRAMの構造が違うらしい
理由からすると多くのCPUが同じ事やってそう
835デフォルトの名無しさん
2020/08/04(火) 13:23:59.89ID:9WSBhL2x この板でイメージを厳密に技術用語で使わないやつは…
836デフォルトの名無しさん
2020/08/04(火) 15:05:26.21ID:z2HwYjyf >>830
> CPUのレジスタがメモリ空間にマッピング
て具体的にどうやるんだろ?と思って調べてみた。
CPUのアドレスバスを監視して、レジスタにアクセスがあったのを検知したら、
それにマップされてるメモリにも同じようにアクセスするってことをしてると。なるほど。
> CPUのレジスタがメモリ空間にマッピング
て具体的にどうやるんだろ?と思って調べてみた。
CPUのアドレスバスを監視して、レジスタにアクセスがあったのを検知したら、
それにマップされてるメモリにも同じようにアクセスするってことをしてると。なるほど。
837デフォルトの名無しさん
2020/08/04(火) 15:22:33.51ID:CK7AS0VE >>836
そういうことではなく、レジスタをアドレス空間にマッピングしているCPUは、
例えば、アドレス空間の 0〜255 番地の部分をレジスタ専用に
して、CPUの外部のアドレスバスには信号が出ないようにしていることが多い。
そして、
mov [0],値
と書くと、r0 に「値」を書き込むようにCPUが設計されていて、
外部のDRAMなどには全く信号が送られないようになっている。
そういうことではなく、レジスタをアドレス空間にマッピングしているCPUは、
例えば、アドレス空間の 0〜255 番地の部分をレジスタ専用に
して、CPUの外部のアドレスバスには信号が出ないようにしていることが多い。
そして、
mov [0],値
と書くと、r0 に「値」を書き込むようにCPUが設計されていて、
外部のDRAMなどには全く信号が送られないようになっている。
838デフォルトの名無しさん
2020/08/04(火) 15:30:51.43ID:z2HwYjyf >>837
そういうのもあるだろうけど、それは最初からそういう設計にしているからそう動くということだよね。
アドレス空間にある入出力領域は固定的である必要はないので、バスに出た信号をどう処理するかは
設計者が自由に決められるはず。なので、バスに出た信号をメモリだけに送ることもできるし、
CPUとメモリ両方に送ることもできる。用途に合わせればいいということかと。
そういうのもあるだろうけど、それは最初からそういう設計にしているからそう動くということだよね。
アドレス空間にある入出力領域は固定的である必要はないので、バスに出た信号をどう処理するかは
設計者が自由に決められるはず。なので、バスに出た信号をメモリだけに送ることもできるし、
CPUとメモリ両方に送ることもできる。用途に合わせればいいということかと。
839デフォルトの名無しさん
2020/08/04(火) 15:34:19.50ID:CK7AS0VE840デフォルトの名無しさん
2020/08/04(火) 16:20:06.60ID:z2HwYjyf841デフォルトの名無しさん
2020/08/04(火) 19:31:24.43ID:aUyBUHRY >>837
ああ、ずっと何の話をしてるのか分からなかったけど0ページの話ね。
ああ、ずっと何の話をしてるのか分からなかったけど0ページの話ね。
842デフォルトの名無しさん
2020/08/16(日) 16:21:04.44ID:Cqk7CoxF >>839 アルディーノのCPUがそれだ。レジスタがメモリにマッピングされている。
843デフォルトの名無しさん
2020/08/17(月) 08:09:56.01ID:tzd42ouk LLVMが吐き出したx86-64アセンブラコードを入力とするツールを作りたいのですが
このアセンブラコードの文法に関する資料って何処にあるんでしょうか
ttps://llvm.org/docs/Extensions.html
ttps://sourceware.org/binutils/docs/as/
あたりにも各命令をどのように記述するかまでは載っていないように見えるのですが・・・
このアセンブラコードの文法に関する資料って何処にあるんでしょうか
ttps://llvm.org/docs/Extensions.html
ttps://sourceware.org/binutils/docs/as/
あたりにも各命令をどのように記述するかまでは載っていないように見えるのですが・・・
844デフォルトの名無しさん
2020/08/17(月) 10:11:33.24ID:RiKJFl8Z 命令セットレベルの話ならインテルのマニュアルでも見ろとしか。
845デフォルトの名無しさん
2020/08/17(月) 11:34:25.89ID:NVTg5S9X >>843
Intelに大量の PDF マニュアルがあり、詳細に書いてある。
Intelに大量の PDF マニュアルがあり、詳細に書いてある。
846デフォルトの名無しさん
2020/08/17(月) 11:37:24.90ID:NVTg5S9X >>843
LLVMツールの出力する、native の x86 や x64 のアセンブリコードは、
試してみる限り、masm 形式ではない。
見た目はgccの形式に似ている。
LLVMのarm版が出力したnativeアセンブリコードは、gccのgasが解釈して正しくobjファイル
までアセンブルできたことがある。
x86 や x64 の場合は、そこまでは試していない。
LLVMツールの出力する、native の x86 や x64 のアセンブリコードは、
試してみる限り、masm 形式ではない。
見た目はgccの形式に似ている。
LLVMのarm版が出力したnativeアセンブリコードは、gccのgasが解釈して正しくobjファイル
までアセンブルできたことがある。
x86 や x64 の場合は、そこまでは試していない。
847843
2020/08/17(月) 12:59:34.65ID:WGW93JMF848デフォルトの名無しさん
2020/08/18(火) 01:12:29.19ID:xqTakpBf >>847
命令表記は、8バイトのオペランド(や型)を表すのにdqwordとowordで表す
2つの流儀がある。
さらに、mmwordを使う流儀もあるが、浮動小数点演算のx87の文化では
浮動小数点でも専用の型名は無くて、dwordでfloat、qwordでdoubleを扱う
流儀があった。
そこにxmmやmmxのためだけにmmwordを持ってきた意図やセンスは
賛否が分かれるところだと思う。
命令表記は、8バイトのオペランド(や型)を表すのにdqwordとowordで表す
2つの流儀がある。
さらに、mmwordを使う流儀もあるが、浮動小数点演算のx87の文化では
浮動小数点でも専用の型名は無くて、dwordでfloat、qwordでdoubleを扱う
流儀があった。
そこにxmmやmmxのためだけにmmwordを持ってきた意図やセンスは
賛否が分かれるところだと思う。
849デフォルトの名無しさん
2020/08/18(火) 01:28:37.97ID:xqTakpBf >>847
x64のリファレンスは、原則的にAMDで、AMDにも詳しいマニュアルがある。
命令表記は、絶対アドレス addr に対する間接参照で、昔は、[addr]と
表記していたものが、x64だと、マシン語レベルでは絶対アドレスを埋め込まずに、
ripからの相対アドレスrel_addrを用いて、[rip+rel_addr]のような意味になっている
があるが、アセンブラレベルでそれを表記する時、どうするかと言う問題がある。
masmだと昔から、
mov eax,MyWork1
・・・
ret
MyWork dd 1234
と書いてきた。普通のアセンブラなら、
mov eax,[MyWork1]
・・・
ret
MyWork: dd 1234
と書くところを。
しかし、rip相対になった場合、
mov eax,[rip+MyWork]
と書くと意味に合わないし、かと言って、
mov eax,[rip+rel MyWork]
と書くのも長くなる。意味的には、Masmだと
mov eax,MyWork
なのだが、マシン語レベルでは、絶対アドレス/相対アドレスのどちらで表現されるか、
明確に表すことはできなくなるジレンマがある。
x64のリファレンスは、原則的にAMDで、AMDにも詳しいマニュアルがある。
命令表記は、絶対アドレス addr に対する間接参照で、昔は、[addr]と
表記していたものが、x64だと、マシン語レベルでは絶対アドレスを埋め込まずに、
ripからの相対アドレスrel_addrを用いて、[rip+rel_addr]のような意味になっている
があるが、アセンブラレベルでそれを表記する時、どうするかと言う問題がある。
masmだと昔から、
mov eax,MyWork1
・・・
ret
MyWork dd 1234
と書いてきた。普通のアセンブラなら、
mov eax,[MyWork1]
・・・
ret
MyWork: dd 1234
と書くところを。
しかし、rip相対になった場合、
mov eax,[rip+MyWork]
と書くと意味に合わないし、かと言って、
mov eax,[rip+rel MyWork]
と書くのも長くなる。意味的には、Masmだと
mov eax,MyWork
なのだが、マシン語レベルでは、絶対アドレス/相対アドレスのどちらで表現されるか、
明確に表すことはできなくなるジレンマがある。
850デフォルトの名無しさん
2020/08/21(金) 15:25:03.93ID:EskYTmRE destにメモリを指定できる命令ってパイプラインをストールさせやすいように思うけどそんな事はないの?
x64だと
ADD r/m64,r64
みたいなの
x64だと
ADD r/m64,r64
みたいなの
851デフォルトの名無しさん
2020/08/21(金) 20:30:50.01ID:+dwilF/E 確かにストールしやすいとは言えるが影響度合いはプロセッサ次第で、そういう命令を持ったプロセッサはちゃんと考慮した設計がされている。
例えばOut of Order実行を行うプロセッサはパイプラインに結果書込み待ちをするキューを持ったステージがあって、メモリ書き込み前に後続の命令を実行可能だから単純にストールはしない。
前後の命令に依存があればストールするのはレジスタ相手でも同じことだし、命令でロードとモディファイとストアを分けても実行する内容は同じなのだから、結局はプロセッサアーキテクチャ毎に最適化が必要なことには変わりがない。
例えばOut of Order実行を行うプロセッサはパイプラインに結果書込み待ちをするキューを持ったステージがあって、メモリ書き込み前に後続の命令を実行可能だから単純にストールはしない。
前後の命令に依存があればストールするのはレジスタ相手でも同じことだし、命令でロードとモディファイとストアを分けても実行する内容は同じなのだから、結局はプロセッサアーキテクチャ毎に最適化が必要なことには変わりがない。
852デフォルトの名無しさん
2020/08/22(土) 00:25:14.47ID:Rco6UMRM インテル(R) 64 アーキテクチャーおよび IA-32 アーキテクチャー最適化リファレンス・マニュアル
を良く呼んだら書いてあったわ
> 一般的に、各命令を構成するマイクロオペレーション(μOP)の数を考慮し、単一マイク
> ロオペレーション(μOP)の命令、4 マイクロオペレーション(μOP)未満の単純な命令、
> マイクロシーケンサー ROM が必要な命令の順で優先して、命令を選択すると良い。
> 〜
> ・複数のマイクロオペレーション(μOP)からなる一連の命令を分割できない場合は、
> 同等の異なる命令シーケンスに分割する。例えば、読み出し−変更−書き込み命令は、
> 読み出し−変更命令 + ストア命令に分割すると、高速化が可能である。この手法を利
> 用すれば、新しいコードシーケンスが元のコードシーケンスより大きくなった場合で
> も、パフォーマンスが向上する。
らしいのでADD m64,r64みたいな命令はパフォーマンス上のデメリットがあるから使用を控えた方が良さそう
を良く呼んだら書いてあったわ
> 一般的に、各命令を構成するマイクロオペレーション(μOP)の数を考慮し、単一マイク
> ロオペレーション(μOP)の命令、4 マイクロオペレーション(μOP)未満の単純な命令、
> マイクロシーケンサー ROM が必要な命令の順で優先して、命令を選択すると良い。
> 〜
> ・複数のマイクロオペレーション(μOP)からなる一連の命令を分割できない場合は、
> 同等の異なる命令シーケンスに分割する。例えば、読み出し−変更−書き込み命令は、
> 読み出し−変更命令 + ストア命令に分割すると、高速化が可能である。この手法を利
> 用すれば、新しいコードシーケンスが元のコードシーケンスより大きくなった場合で
> も、パフォーマンスが向上する。
らしいのでADD m64,r64みたいな命令はパフォーマンス上のデメリットがあるから使用を控えた方が良さそう
853デフォルトの名無しさん
2020/08/29(土) 02:13:33.36ID:kcJTulzj x64命令の動作を確認するのに対話式にアセンブル&実行&レジスタの確認が出来るツールとかないかな?
各値を変えながら試行錯誤したいけどソース書いてアセンブルしてデバッガに読み込んでステップ実行してだと手間すぎる
今MULのフラグの更新動作がAMDの資料を見てもIntelの資料を見てもググってももよく判らない
各値を変えながら試行錯誤したいけどソース書いてアセンブルしてデバッガに読み込んでステップ実行してだと手間すぎる
今MULのフラグの更新動作がAMDの資料を見てもIntelの資料を見てもググってももよく判らない
854デフォルトの名無しさん
2020/08/29(土) 17:42:02.36ID:CDQjtNyx855デフォルトの名無しさん
2020/08/29(土) 18:05:14.09ID:CDQjtNyx >>853
Intel® 64 and IA-32 Architectures
Software Developer’s Manual
Volume 2A:
Instruction Set Reference, A-M
-------------------------------------------------
[MUL—Unsigned Multiply]
・・・
Flags Affected
The OF and CF flags are set to 0 if the upper half of the result is 0; otherwise, they
are set to 1. The SF, ZF, AF, and PF flags are undefined.
Intel® 64 and IA-32 Architectures
Software Developer’s Manual
Volume 2A:
Instruction Set Reference, A-M
-------------------------------------------------
[MUL—Unsigned Multiply]
・・・
Flags Affected
The OF and CF flags are set to 0 if the upper half of the result is 0; otherwise, they
are set to 1. The SF, ZF, AF, and PF flags are undefined.
856デフォルトの名無しさん
2020/08/29(土) 18:39:05.44ID:kcJTulzj >>855
その文章は確認していてAMD64のドキュメントにも
>If the upper half of the product is non-zero, the instruction sets the carry flag (CF) and overflow flag
>(OF) both to 1. Otherwise, it clears CF and OF to 0.
と似たような記述があるんだけど双方の資料に書いてある"upper half"がどの部分を示しているのか判らない
演算結果の上半分が入るDレジスタの事?
その文章は確認していてAMD64のドキュメントにも
>If the upper half of the product is non-zero, the instruction sets the carry flag (CF) and overflow flag
>(OF) both to 1. Otherwise, it clears CF and OF to 0.
と似たような記述があるんだけど双方の資料に書いてある"upper half"がどの部分を示しているのか判らない
演算結果の上半分が入るDレジスタの事?
857デフォルトの名無しさん
2020/08/29(土) 19:05:00.05ID:CGaweZC2 >>856
Intelの日本語マニュアルには処理の疑似コードが載ってる。
これによると、上半分というのは、各命令で使うレジスタサイズの上半分とわかる。
8,16,32bitそれぞれ場合によって上半分の長さが変わるのでそう書くしかない。
だから64bitの場合の上半分は上位32bitになる。
操作
IF (NumberOfOperands = 1)
THEN IF (OperandSize = 8)
THEN
AX ← AL ? SRC (* signed multiplication *)
IF AL = AX
THEN CF ← 0; OF ← 0;
ELSE CF ← 1; OF ← 1;
FI;
ELSE IF OperandSize = 16
THEN
DX:AX ← AX ? SRC (* signed multiplication *)
IF sign_extend_to_32 (AX) = DX:AX
THEN CF ← 0; OF ← 0;
ELSE CF ← 1; OF ← 1;
FI;
ELSE (* OperandSize = 32 *)
EDX:EAX ← EAX ? SRC (* signed multiplication *)
IF EAX = EDX:EAX
THEN CF ← 0; OF ← 0;
ELSE CF ← 1; OF ← 1;
FI;
FI;
Intelの日本語マニュアルには処理の疑似コードが載ってる。
これによると、上半分というのは、各命令で使うレジスタサイズの上半分とわかる。
8,16,32bitそれぞれ場合によって上半分の長さが変わるのでそう書くしかない。
だから64bitの場合の上半分は上位32bitになる。
操作
IF (NumberOfOperands = 1)
THEN IF (OperandSize = 8)
THEN
AX ← AL ? SRC (* signed multiplication *)
IF AL = AX
THEN CF ← 0; OF ← 0;
ELSE CF ← 1; OF ← 1;
FI;
ELSE IF OperandSize = 16
THEN
DX:AX ← AX ? SRC (* signed multiplication *)
IF sign_extend_to_32 (AX) = DX:AX
THEN CF ← 0; OF ← 0;
ELSE CF ← 1; OF ← 1;
FI;
ELSE (* OperandSize = 32 *)
EDX:EAX ← EAX ? SRC (* signed multiplication *)
IF EAX = EDX:EAX
THEN CF ← 0; OF ← 0;
ELSE CF ← 1; OF ← 1;
FI;
FI;
858デフォルトの名無しさん
2020/08/29(土) 19:47:52.94ID:cC8g9MrB upper half of the product だから乗算結果の上半分だ。
疑問の余地は無いと思うがな…
疑問の余地は無いと思うがな…
859蟻人間 ◆T6xkBnTXz7B0
2020/08/29(土) 20:22:30.40ID:GYyhmMZY CPU emulator Unicorn
https://www.unicorn-engine.org/
https://www.unicorn-engine.org/
860デフォルトの名無しさん
2020/08/30(日) 01:05:43.21ID:BjChy3oe IF sign_extend_to_32 (AX) = DX:AX
THEN CF ← 0; OF ← 0;
ELSE CF ← 1; OF ← 1;
FI;
これだと符号拡張したものと比較しているから、言葉による説明と違っている。
基本的に、mulは、符号無しの整数に対する掛け算なのだが。
THEN CF ← 0; OF ← 0;
ELSE CF ← 1; OF ← 1;
FI;
これだと符号拡張したものと比較しているから、言葉による説明と違っている。
基本的に、mulは、符号無しの整数に対する掛け算なのだが。
861デフォルトの名無しさん
2020/08/30(日) 01:11:49.03ID:BjChy3oe >>857
それは、mul(符号無し掛け算)ではなく、imul(符号付掛け算)の擬似コードで、
英語版でも、同じような擬似コードが書いてあり、言葉による説明は、
次のようになっている:
Flags Affected
For the one operand form of the instruction, the CF and OF flags are set when signif-
icant bits are carried into the upper half of the result and cleared when the result fits
exactly in the lower half of the result. For the two- and three-operand forms of the
instruction, the CF and OF flags are set when the result must be truncated to fit in the
destination operand size and cleared when the result fits exactly in the destination
operand size. The SF, ZF, AF, and PF flags are undefined.
それは、mul(符号無し掛け算)ではなく、imul(符号付掛け算)の擬似コードで、
英語版でも、同じような擬似コードが書いてあり、言葉による説明は、
次のようになっている:
Flags Affected
For the one operand form of the instruction, the CF and OF flags are set when signif-
icant bits are carried into the upper half of the result and cleared when the result fits
exactly in the lower half of the result. For the two- and three-operand forms of the
instruction, the CF and OF flags are set when the result must be truncated to fit in the
destination operand size and cleared when the result fits exactly in the destination
operand size. The SF, ZF, AF, and PF flags are undefined.
862デフォルトの名無しさん
2020/08/30(日) 01:22:29.16ID:BjChy3oe ちなみに、同じビット数の2つの整数の掛け算は、結果の内、掛ける前の整数の
ビット数の部分に限定した部分だけを見れば、符号付き掛け算と符号無し掛け算
で結果が変わらない。
一方、imulは、2オペランド以上のものは、結果のビット数が、掛ける前と同じ。
そして、mulは、2オペランド以上のものが用意されて無い。
これは、最初に述べた性質から、imulとmulで、2オペランド以上の場合では、
結果が変わらなくなってしまうため、imulだけで、符号無し掛け算にも対応できる
ためである。
ビット数の部分に限定した部分だけを見れば、符号付き掛け算と符号無し掛け算
で結果が変わらない。
一方、imulは、2オペランド以上のものは、結果のビット数が、掛ける前と同じ。
そして、mulは、2オペランド以上のものが用意されて無い。
これは、最初に述べた性質から、imulとmulで、2オペランド以上の場合では、
結果が変わらなくなってしまうため、imulだけで、符号無し掛け算にも対応できる
ためである。
863デフォルトの名無しさん
2020/08/30(日) 14:10:51.87ID:GgAZZaQa864デフォルトの名無しさん
2020/08/30(日) 14:26:36.90ID:EVylyaDc■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 「おこめ券は米以外の食品も買える。効果的な活用を」 地元で農水相 [山形県] [少考さん★]
- 高市首相の答弁書に「台湾有事答えない」と明記 存立危機発言当時 ★11 [蚤の市★]
- 【速報】「女芸人No.1決定戦 THE W」9代目女王にニッチェ! 7年ぶり3度目で悲願の優勝 [牛丼★]
- 【芸能】『女芸人No.1決定戦THE W』 粗品が最後にバッサリ「優勝賞金1000万円にしてはレベル低い大会」 [冬月記者★]
- 【沖縄】開業4ヵ月でこれは…“国民の税金”投入の『ジャングリア沖縄』で見た衝撃的な光景と、モチベーションが低い一部スタッフの現状 [ぐれ★]
- 今年の流行語大賞 『働いて働いて働いてまいります』が受賞で不快感… 過労自殺の遺族らが会見「家族にむち打つような行為だ」 [冬月記者★]
- __ブルガリア、Z世代の抗議が増税予算と汚職政治への怒りへ、政権が崩壊、若者を無視する政治への警告 [827565401]
- クズ「勉強頑張らなかった奴は一生DQNと一緒に肉体労働しろ」☚勉強頑張れるのも環境と巡り合わせなんだが? [783475554]
- スピッツの4番目の曲、決まらない
- 【時事】立憲民主党、30代の支持率が「ゼロ」😨 [369521721]
- 俺の口癖が「へー」「そう」「どうも」なんだが
- キャッシュレスに対応してない店、手数料が問題ならその分値上げすればいいじゃない、現金の管理や手数料、両替もただじゃない [943688309]
