初心者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
160デフォルトの名無しさん
2018/08/23(木) 19:09:33.40ID:QrjyoFcH なんかしらあるんじゃね
161デフォルトの名無しさん
2018/08/23(木) 19:30:53.52ID:k97Awv43162デフォルトの名無しさん
2018/08/23(木) 19:47:44.13ID:sOVf8lyT 32bit Windowsは切り捨てに入ってきてるからね
ゲームでも64bit版のみのも出てきてる
NVIDIA、GPUドライバーの32bit版OSサポートを終了へ 〜次期版からは64bit版だけに
https://forest.watch.impress.co.jp/docs/news/1098673.html
ゲームでも64bit版のみのも出てきてる
NVIDIA、GPUドライバーの32bit版OSサポートを終了へ 〜次期版からは64bit版だけに
https://forest.watch.impress.co.jp/docs/news/1098673.html
163デフォルトの名無しさん
2018/08/23(木) 19:52:19.27ID:sOVf8lyT バーチャルYoutuberなんかでも使われるソフト(エロゲ)だが
64bit Windowsのみ対応
動画配信などで結構使われてる
CUSTOM ORDER MAID 3D2
http://com3d2.jp/main.html
OS Windows® 7/8.1/10 全て64bitのみ対応 ※6
※6:32bitOSには対応しておりません。
64bit Windowsのみ対応
動画配信などで結構使われてる
CUSTOM ORDER MAID 3D2
http://com3d2.jp/main.html
OS Windows® 7/8.1/10 全て64bitのみ対応 ※6
※6:32bitOSには対応しておりません。
164デフォルトの名無しさん
2018/08/23(木) 20:04:05.41ID:k97Awv43165デフォルトの名無しさん
2018/08/23(木) 20:05:15.44ID:sOVf8lyT >>153
10年位前に出来たオンラインゲームでも、今はもう2GBのメモリだともう足りなくて
32bitのゲームでも/LARGEADDRESSAWAREのフラグ立てて延命してるのもあるよ
64bit WindowsならLAAフラグを立てると32bitアプリでも4GBまで使えるようになる
LAAで延命してるゲームで32bit Windowsで遊ぶとメモリ不足で高確率で落ちるゲームとか既にある
10年位前に出来たオンラインゲームでも、今はもう2GBのメモリだともう足りなくて
32bitのゲームでも/LARGEADDRESSAWAREのフラグ立てて延命してるのもあるよ
64bit WindowsならLAAフラグを立てると32bitアプリでも4GBまで使えるようになる
LAAで延命してるゲームで32bit Windowsで遊ぶとメモリ不足で高確率で落ちるゲームとか既にある
166デフォルトの名無しさん
2018/08/23(木) 20:12:15.30ID:sOVf8lyT こんな記事が出るくらい、2GBではメモリが足りなくなってるアプリがたくさんあるぞ
64bit Windowsを前提とした32bitアプリケーション延命法
〜 LAAオプションで32bitアプリケーションのメモリ不足問題を解消
https://www.webtech.co.jp/blog/optpix_labs/programing/6387/
64bit Windowsを前提とした32bitアプリケーション延命法
〜 LAAオプションで32bitアプリケーションのメモリ不足問題を解消
https://www.webtech.co.jp/blog/optpix_labs/programing/6387/
167デフォルトの名無しさん
2018/08/23(木) 20:12:19.28ID:k97Awv43 なぜ確率の問題?
168デフォルトの名無しさん
2018/08/23(木) 20:16:43.95ID:sOVf8lyT ちなみにこのブログ書いてるところはWindows用ソフトもいくつか出してるところだよ
169デフォルトの名無しさん
2018/08/23(木) 20:18:49.99ID:sOVf8lyT170デフォルトの名無しさん
2018/08/23(木) 20:23:47.22ID:k97Awv43 質問に全く答えてない件
171デフォルトの名無しさん
2018/08/23(木) 20:34:21.09ID:sOVf8lyT >>146
実際にどの程度、速度が変わるのか試してみて欲しいもんだな
ただの机上の空論じゃないのか?
大体、配列で何回もデータにアクセスするなら
32bitのDISPを毎回指定するオーバヘッドだってあるんだが
実際にどの程度、速度が変わるのか試してみて欲しいもんだな
ただの机上の空論じゃないのか?
大体、配列で何回もデータにアクセスするなら
32bitのDISPを毎回指定するオーバヘッドだってあるんだが
172デフォルトの名無しさん
2018/08/23(木) 21:08:22.26ID:wxGNRrqx 32bitアプリも2G限定アプリも32bit OSも絶滅して良い
Windowsの話
Windowsの話
173デフォルトの名無しさん
2018/08/23(木) 21:13:40.67ID:sOVf8lyT mov rcx, offset HOGEHOGE01
mov rax, qword ptr [rcx + rbx]
mov rax, qword ptr [rcx + rbx]
mov rax, qword ptr [rcx + rbx]
mov rax, qword ptr [rcx + rbx]
これと
mov rax, HOGEHOGE01[rbx]
mov rax, HOGEHOGE01[rbx]
mov rax, HOGEHOGE01[rbx]
mov rax, HOGEHOGE01[rbx]
これを250個並べて1000万回ループさせてみたが、1%くらいしか差はないよ
mov rax, qword ptr [rcx + rbx]
mov rax, qword ptr [rcx + rbx]
mov rax, qword ptr [rcx + rbx]
mov rax, qword ptr [rcx + rbx]
これと
mov rax, HOGEHOGE01[rbx]
mov rax, HOGEHOGE01[rbx]
mov rax, HOGEHOGE01[rbx]
mov rax, HOGEHOGE01[rbx]
これを250個並べて1000万回ループさせてみたが、1%くらいしか差はないよ
174デフォルトの名無しさん
2018/08/23(木) 21:28:42.56ID:wxGNRrqx 250個並べてキャッシュに収まる?
175デフォルトの名無しさん
2018/08/24(金) 00:12:57.34ID:568m+iHd なんで訳分からなくなりそうになったのか理解できたw
4LRopBJnが変なんだな。
Microsoftが64bitでは絶対アドレスのインデックスは使わないって決めたんだから、その流儀に従うのが高級言語とリンクだよ。
4LRopBJnが変なんだな。
Microsoftが64bitでは絶対アドレスのインデックスは使わないって決めたんだから、その流儀に従うのが高級言語とリンクだよ。
176デフォルトの名無しさん
2018/08/24(金) 00:23:58.73ID:568m+iHd177デフォルトの名無しさん
2018/08/24(金) 01:48:40.54ID:PMMpdZPT178デフォルトの名無しさん
2018/08/24(金) 01:50:43.81ID:PMMpdZPT >>159
いや、それはあなたの勘違い。
そのオプションを指定しても、EXEの中に入っている「初期化データ」のアドレス
が2GB以下に限定されるだけで、動的メモリは、理論上は、100GB でも一気に
確保できる。それは、再三言ってる。あなたは理解出来てないと思う。
いや、それはあなたの勘違い。
そのオプションを指定しても、EXEの中に入っている「初期化データ」のアドレス
が2GB以下に限定されるだけで、動的メモリは、理論上は、100GB でも一気に
確保できる。それは、再三言ってる。あなたは理解出来てないと思う。
179デフォルトの名無しさん
2018/08/24(金) 01:54:49.18ID:PMMpdZPT >>164
再三言ってるけど、あの/LARGEADDRESSAWARE:NO オプションを
付けても、「初期化データ」のアドレスが2GBに制限されるだけで、
new や malloc() などの、ヒープから確保される動的メモリは、64GBの
アドレス空間どこにあっても問題ないんだよ。
再三言ってるけど、あの/LARGEADDRESSAWARE:NO オプションを
付けても、「初期化データ」のアドレスが2GBに制限されるだけで、
new や malloc() などの、ヒープから確保される動的メモリは、64GBの
アドレス空間どこにあっても問題ないんだよ。
180デフォルトの名無しさん
2018/08/24(金) 02:00:34.30ID:PMMpdZPT >>173
そりゃ分かってるよ。
でも逆に、EXEファイルの中に最初から入っている「初期化データ」
の2GB制限とどっちが良いかの話になるんだよ。もちろん、動的メモリ
は何の制限も受けず、64GBアドレスが好きなように使える。
初期化データというのは、何かの埋め込みテーブルのための配列
だとか、文字列データとか、そういうものだよ。
巨大な3Dモデルデータ、テクスチャ、マップデータなどは、外部ファイル
にでも置いておけば、2GBの制限は受けず、仮想アドレスとしては
64BITまるまる使えるから。
実際、EXEの中にある初期化データが2GBを越えるという事は、
EXEファイルが2GBを越えるという事だから、そのアプリの起動
時には、有無を言わさず HDDなどから、2GBの読み込みが
始まってしまうことになる。
そりゃ分かってるよ。
でも逆に、EXEファイルの中に最初から入っている「初期化データ」
の2GB制限とどっちが良いかの話になるんだよ。もちろん、動的メモリ
は何の制限も受けず、64GBアドレスが好きなように使える。
初期化データというのは、何かの埋め込みテーブルのための配列
だとか、文字列データとか、そういうものだよ。
巨大な3Dモデルデータ、テクスチャ、マップデータなどは、外部ファイル
にでも置いておけば、2GBの制限は受けず、仮想アドレスとしては
64BITまるまる使えるから。
実際、EXEの中にある初期化データが2GBを越えるという事は、
EXEファイルが2GBを越えるという事だから、そのアプリの起動
時には、有無を言わさず HDDなどから、2GBの読み込みが
始まってしまうことになる。
181デフォルトの名無しさん
2018/08/24(金) 02:02:34.25ID:PMMpdZPT182デフォルトの名無しさん
2018/08/24(金) 02:18:09.88ID:PMMpdZPT >>173
それでもやはり、1%の速度低下にはなったんだよね。
「初期化データの2GB制限」は、現実的には何の制限にもなってない
事は理解出来てる???? 動的メモリは、64BIT 自由に使える
んだよ。
それでもやはり、1%の速度低下にはなったんだよね。
「初期化データの2GB制限」は、現実的には何の制限にもなってない
事は理解出来てる???? 動的メモリは、64BIT 自由に使える
んだよ。
183デフォルトの名無しさん
2018/08/24(金) 04:19:33.40ID:CXKCSzYg184デフォルトの名無しさん
2018/08/24(金) 04:38:15.52ID:CXKCSzYg >>182
実際に試したことないのが丸わかり
/largeaddressaware:noをつけると本当に試してみるといいよ、
動的メモリも2GB以下しか確保できなくなるから
このページの
https://www.webtech.co.jp/blog/optpix_labs/programing/6387/
この図に載ってるプログラムでも試せるよ
https://www.webtech.co.jp/blog/wp-content/uploads/2013/11/laa_test_prg_thumb.png
実際に試したことないのが丸わかり
/largeaddressaware:noをつけると本当に試してみるといいよ、
動的メモリも2GB以下しか確保できなくなるから
このページの
https://www.webtech.co.jp/blog/optpix_labs/programing/6387/
この図に載ってるプログラムでも試せるよ
https://www.webtech.co.jp/blog/wp-content/uploads/2013/11/laa_test_prg_thumb.png
185デフォルトの名無しさん
2018/08/24(金) 04:39:04.29ID:CXKCSzYg 上のプログラムだと/largeaddressaware:noを付けない時に
無限に確保するので4500MBで終わるように少し改変してみた
これで試してみな
#include <windows.h>
int PASCAL WinMain(HINSTANCE hinst, HINSTANCE hprev, LPSTR cmd, int n)
{
int step = 10; //10MB
int count = 0;
char temp[20];
for (;;)
{
void *p = GlobalAlloc(GPTR, step * 1024 * 1024);
if (p == NULL)
{
break;
}
count++;
if(count > 400 + 50) {
break;
}
}
wsprintf(temp, "Total %d MB\n", count * step);
MessageBox(NULL, temp, "alloc test", MB_OK);
}
無限に確保するので4500MBで終わるように少し改変してみた
これで試してみな
#include <windows.h>
int PASCAL WinMain(HINSTANCE hinst, HINSTANCE hprev, LPSTR cmd, int n)
{
int step = 10; //10MB
int count = 0;
char temp[20];
for (;;)
{
void *p = GlobalAlloc(GPTR, step * 1024 * 1024);
if (p == NULL)
{
break;
}
count++;
if(count > 400 + 50) {
break;
}
}
wsprintf(temp, "Total %d MB\n", count * step);
MessageBox(NULL, temp, "alloc test", MB_OK);
}
186デフォルトの名無しさん
2018/08/24(金) 04:45:01.40ID:CXKCSzYg 上のプログラムは64bitでも、32bitでもコンパイルは通るよ
187デフォルトの名無しさん
2018/08/24(金) 05:30:48.46ID:CXKCSzYg そもそもWindowsは/largeaddressaware:noを付けなくても静的データは2GBまでしか使えない
動的データだけがOSが対応してるメモリ分だけ制限なく使える
WindowsにはLinuxのgccのような-mcmodel=largeや-mcmodel=mediumのようなオプションは存在しない
/largeaddressaware:noを付けると64bitアプリでも動的メモリも含めてすべてのメモリで2GB以下までしか使えなくなる
PGIのコンパイラのページでわかりやすく解説してあるよ
https://www.softek.co.jp/SPG/Pgi/TIPS/opt_64.html
動的データだけがOSが対応してるメモリ分だけ制限なく使える
WindowsにはLinuxのgccのような-mcmodel=largeや-mcmodel=mediumのようなオプションは存在しない
/largeaddressaware:noを付けると64bitアプリでも動的メモリも含めてすべてのメモリで2GB以下までしか使えなくなる
PGIのコンパイラのページでわかりやすく解説してあるよ
https://www.softek.co.jp/SPG/Pgi/TIPS/opt_64.html
188デフォルトの名無しさん
2018/08/24(金) 07:19:19.64ID:ZkSPfVdV189デフォルトの名無しさん
2018/08/24(金) 07:30:57.16ID:ZkSPfVdV >>182
そこだけ抜き出して、
しかも最適化してないコードで1%
こんなコードは全体の中では非常にわずかだろうし
タイムクリティカル部分であれば最適化される
実質差が無いメリットの為に絶対アドレスに依存したコードにする
時代に逆行だ
それでも逆行したければ
0〜2Gのアドレスしか割り当てられない2G限定アプリにしろ
そこだけ抜き出して、
しかも最適化してないコードで1%
こんなコードは全体の中では非常にわずかだろうし
タイムクリティカル部分であれば最適化される
実質差が無いメリットの為に絶対アドレスに依存したコードにする
時代に逆行だ
それでも逆行したければ
0〜2Gのアドレスしか割り当てられない2G限定アプリにしろ
190デフォルトの名無しさん
2018/08/24(金) 07:35:38.16ID:CXKCSzYg191デフォルトの名無しさん
2018/08/24(金) 07:38:24.94ID:ZkSPfVdV uOPキャッシュ
192デフォルトの名無しさん
2018/08/24(金) 07:53:32.13ID:CXKCSzYg193デフォルトの名無しさん
2018/08/24(金) 07:59:52.52ID:568m+iHd なんか初心者スレの趣旨とずれまくりなんだけど。
コンパイラのABIが「変わった」のなら、それに合わせたのを紹介しないと。
Visual Cは64bitではインラインアセンブラも使えなくなったし、AVXやSSEは組み込み関数で大概は満足できるはずって判断されたのだろう。
今のご時世わざわざアセンブリ言語でプログラミングしたいって用途は動画のコーデックやフィルタプラグインDLL、将棋とかの思考ルーチンとかでしょ。
こういうのは2GB制限下でしか使えないコードでは困るはず。
コンパイラのABIが「変わった」のなら、それに合わせたのを紹介しないと。
Visual Cは64bitではインラインアセンブラも使えなくなったし、AVXやSSEは組み込み関数で大概は満足できるはずって判断されたのだろう。
今のご時世わざわざアセンブリ言語でプログラミングしたいって用途は動画のコーデックやフィルタプラグインDLL、将棋とかの思考ルーチンとかでしょ。
こういうのは2GB制限下でしか使えないコードでは困るはず。
194デフォルトの名無しさん
2018/08/24(金) 08:09:12.98ID:568m+iHd >>189
静的配列だとサイズが決まってるから、恐らく最適化されてポインタとオフセット(ディスプレースメント)に変換されるよね。
>実質差が無いメリットの為に絶対アドレスに依存したコードにする
>時代に逆行だ
これに同意。
静的配列だとサイズが決まってるから、恐らく最適化されてポインタとオフセット(ディスプレースメント)に変換されるよね。
>実質差が無いメリットの為に絶対アドレスに依存したコードにする
>時代に逆行だ
これに同意。
195デフォルトの名無しさん
2018/08/24(金) 12:53:22.92ID:7MrYBE0R >>192
ヒント HTT
ヒント HTT
196デフォルトの名無しさん
2018/08/24(金) 14:52:13.41ID:PMMpdZPT >>185
自分は 64BIT 用C/C++コンパイラをインストールして無いので、試せません。
link.exe に、 /largeaddressaware:no を渡した場合にのみ、
GlobalAlloc() が失敗する理由は何ですか?
ポインタが32BITになる? それとも、GlobalAlloc の関数が別のものに
入れ替わってしまう?
そのどちらでもないとしたら何が原因ですか?
自分は 64BIT 用C/C++コンパイラをインストールして無いので、試せません。
link.exe に、 /largeaddressaware:no を渡した場合にのみ、
GlobalAlloc() が失敗する理由は何ですか?
ポインタが32BITになる? それとも、GlobalAlloc の関数が別のものに
入れ替わってしまう?
そのどちらでもないとしたら何が原因ですか?
197デフォルトの名無しさん
2018/08/24(金) 14:54:32.88ID:PMMpdZPT >>187
>/largeaddressaware:noを付けると64bitアプリでも動的メモリも含めてすべてのメモリで2GB以下までしか使えなくなる
>PGIのコンパイラのページでわかりやすく解説してあるよ
>https://www.softek.co.jp/SPG/Pgi/TIPS/opt_64.html
リンク先のページを見たのですが、自分には、
「動的メモリの場合にも2GB以下しか使えなくなる」
という文書が見つかりませんでした。
どこに書かれているか、ご指摘いただければ幸いです。
>/largeaddressaware:noを付けると64bitアプリでも動的メモリも含めてすべてのメモリで2GB以下までしか使えなくなる
>PGIのコンパイラのページでわかりやすく解説してあるよ
>https://www.softek.co.jp/SPG/Pgi/TIPS/opt_64.html
リンク先のページを見たのですが、自分には、
「動的メモリの場合にも2GB以下しか使えなくなる」
という文書が見つかりませんでした。
どこに書かれているか、ご指摘いただければ幸いです。
198デフォルトの名無しさん
2018/08/24(金) 16:51:48.72ID:VlbdtNmU 実験したけど2GBまでだったよ
malloc
アドレスは32bitで保持出来る
32bitアプリからの移植用だろうね
malloc
アドレスは32bitで保持出来る
32bitアプリからの移植用だろうね
199デフォルトの名無しさん
2018/08/24(金) 16:55:58.09ID:VlbdtNmU200デフォルトの名無しさん
2018/08/24(金) 17:07:40.76ID:PMMpdZPT >>199
リンカオプションによって、API の挙動まで変わってしまうんでしょうか。
そして、Win64 API の GlobalAlloc() などが返す値が 31 BIT までに
なるので、malloc() もそれにつられて、勝手に 31BIT までになると?
64BIT COFF だと、COFF Image に、/largeaddressaware:no かどうか
を示す BIT か何かが追加された???
リンカオプションによって、API の挙動まで変わってしまうんでしょうか。
そして、Win64 API の GlobalAlloc() などが返す値が 31 BIT までに
なるので、malloc() もそれにつられて、勝手に 31BIT までになると?
64BIT COFF だと、COFF Image に、/largeaddressaware:no かどうか
を示す BIT か何かが追加された???
201デフォルトの名無しさん
2018/08/24(金) 19:11:45.47ID:5OB8VNk6 >>196
無料のVisual Studio Expressでも2013以降は64bitのビルドにも対応してるよ
64bitのWindowsプログラミングに興味があるなら入れてみれば?
プログラムのコードを見ればわかるように
10MBずつメモリを確保していき
メモリが確保できなくてGlobalAllocの戻り値にNULLが返るか
確保したメモリが4500MBを越えたらbreakでループを抜けて
確保したメモリ容量を表示して終了するようになってる
で、/largeaddressaware:noを指定すると
俺の環境では1970MB確保したところでループを抜けて終了してる
つまり、1970MB確保したところで、
次にGlobalAllocを実行するとメモリが確保できなくてNULLが返る
これは、動的メモリも2GB以下しか確保できないということを示してる
/largeaddressaware:noを指定せずにコンパイルすると
4510MBまで確保して終了する
無料のVisual Studio Expressでも2013以降は64bitのビルドにも対応してるよ
64bitのWindowsプログラミングに興味があるなら入れてみれば?
プログラムのコードを見ればわかるように
10MBずつメモリを確保していき
メモリが確保できなくてGlobalAllocの戻り値にNULLが返るか
確保したメモリが4500MBを越えたらbreakでループを抜けて
確保したメモリ容量を表示して終了するようになってる
で、/largeaddressaware:noを指定すると
俺の環境では1970MB確保したところでループを抜けて終了してる
つまり、1970MB確保したところで、
次にGlobalAllocを実行するとメモリが確保できなくてNULLが返る
これは、動的メモリも2GB以下しか確保できないということを示してる
/largeaddressaware:noを指定せずにコンパイルすると
4510MBまで確保して終了する
202デフォルトの名無しさん
2018/08/24(金) 19:16:32.91ID:5OB8VNk6 >>200
Visual Studioに入ってるdumpbin.exeでコマンドプロンプトで
dumpbin /headers hogehoge.exe
とやると/largeaddressawareを指定した状態(/largeaddressaware:noを指定しない状態)だと
FILE HEADER VALUESの項目とのところに
Application can handle large (>2GB) addresses
これが表示される
なので詳しくは知らないが実行ファイルの中に/lageaddressawareの指定をする部分があるはず
これまたVisual Studioに入ってるeditbin.exeを使うと
実行ファイルそのものに/largeaddressawareや/lageaddressaware:noの指定ができる
LAAを有効にするには
editbin /lageaddressaware hogehoge.exe
LAAを無効にするには
editbin /lageaddressaware:no hogehoge.exe
Visual Studioに入ってるdumpbin.exeでコマンドプロンプトで
dumpbin /headers hogehoge.exe
とやると/largeaddressawareを指定した状態(/largeaddressaware:noを指定しない状態)だと
FILE HEADER VALUESの項目とのところに
Application can handle large (>2GB) addresses
これが表示される
なので詳しくは知らないが実行ファイルの中に/lageaddressawareの指定をする部分があるはず
これまたVisual Studioに入ってるeditbin.exeを使うと
実行ファイルそのものに/largeaddressawareや/lageaddressaware:noの指定ができる
LAAを有効にするには
editbin /lageaddressaware hogehoge.exe
LAAを無効にするには
editbin /lageaddressaware:no hogehoge.exe
203デフォルトの名無しさん
2018/08/24(金) 19:47:12.65ID:568m+iHd VCで64bitの静的配列にアクセスするコードを調べてみた。
#include <math.h>
volatile char str[1024];
volatile char c;
main(int argc, char *argv[])
{
int idx;
idx = (int)(rand() * 1024);
c = str[idx];
}
これの配列アクセス部分が
; 11 : c = str[idx];
0001c 48 63 44 24 20 movsxd rax, DWORD PTR idx$[rsp]
00021 48 8d 0d 00 00
00 00 lea rcx, OFFSET FLAT:str
00028 0f b6 04 01 movzx eax, BYTE PTR [rcx+rax]
0002c 88 05 00 00 00
00 mov BYTE PTR c, al
00028は[rcx+rax]で配列アクセスしてる
そして、00021と0002cはrip相対アドレッシングだよね?(エンコードは自信ないので)
#include <math.h>
volatile char str[1024];
volatile char c;
main(int argc, char *argv[])
{
int idx;
idx = (int)(rand() * 1024);
c = str[idx];
}
これの配列アクセス部分が
; 11 : c = str[idx];
0001c 48 63 44 24 20 movsxd rax, DWORD PTR idx$[rsp]
00021 48 8d 0d 00 00
00 00 lea rcx, OFFSET FLAT:str
00028 0f b6 04 01 movzx eax, BYTE PTR [rcx+rax]
0002c 88 05 00 00 00
00 mov BYTE PTR c, al
00028は[rcx+rax]で配列アクセスしてる
そして、00021と0002cはrip相対アドレッシングだよね?(エンコードは自信ないので)
204デフォルトの名無しさん
2018/08/24(金) 19:58:50.48ID:568m+iHd >>198
時々ポインタをDWORDに変換して構造体に突っ込んでたりすることがあるからね。
argeaddressawareは、こういうコードが含まれたアプリをどうしても64bitで動かさなきゃいけなくなった時とかに仕方なく使うオプションでしょう。
でないと、GlobalAlloc()が大きなアドレス返したら動かなくなるし。
時々ポインタをDWORDに変換して構造体に突っ込んでたりすることがあるからね。
argeaddressawareは、こういうコードが含まれたアプリをどうしても64bitで動かさなきゃいけなくなった時とかに仕方なく使うオプションでしょう。
でないと、GlobalAlloc()が大きなアドレス返したら動かなくなるし。
205デフォルトの名無しさん
2018/08/24(金) 20:08:42.11ID:568m+iHd >>200
プロセスを起動する時にexeのLAAフラグを見てメモリとかハンドルを返すAPIが32bitに収まる値を返すように設定されるんだと思う。
こういうのはプロセスごとに32bitとかにも切り替えられる(この場合はシステムDLLは64bitとは別だけど)ので、
互換性を確保する仕組みが裏で動いてるはずだよ。
プロセスを起動する時にexeのLAAフラグを見てメモリとかハンドルを返すAPIが32bitに収まる値を返すように設定されるんだと思う。
こういうのはプロセスごとに32bitとかにも切り替えられる(この場合はシステムDLLは64bitとは別だけど)ので、
互換性を確保する仕組みが裏で動いてるはずだよ。
206デフォルトの名無しさん
2018/08/24(金) 20:18:03.36ID:568m+iHd >>203のコードバイトの折り返し部分のタブが詰められて見にくいので
0001c 48 63 44 24 20 movsxd rax, DWORD PTR idx$[rsp]
00021 48 8d 0d 00 00 00 00 lea rcx, OFFSET FLAT:str
00028 0f b6 04 01 movzx eax, BYTE PTR [rcx+rax]
0002c 88 05 00 00 00 00 mov BYTE PTR c, al
0001c 48 63 44 24 20 movsxd rax, DWORD PTR idx$[rsp]
00021 48 8d 0d 00 00 00 00 lea rcx, OFFSET FLAT:str
00028 0f b6 04 01 movzx eax, BYTE PTR [rcx+rax]
0002c 88 05 00 00 00 00 mov BYTE PTR c, al
207デフォルトの名無しさん
2018/08/24(金) 21:46:35.00ID:5OB8VNk6 >>203
VC++だと/FAオプションを指定するとアセンブラ出力もされるよ
ただ、64bitのVC++コンパイラが吐き出すアセンブラコードは
そのままではml64.exeでアセンブルできないけど
ml64.exeでアセンブルできるように修正できたらml64.exeでアセンブルする時に
/Flオプションを指定するとリスティングファイルを出力してくれる
VC++だと/FAオプションを指定するとアセンブラ出力もされるよ
ただ、64bitのVC++コンパイラが吐き出すアセンブラコードは
そのままではml64.exeでアセンブルできないけど
ml64.exeでアセンブルできるように修正できたらml64.exeでアセンブルする時に
/Flオプションを指定するとリスティングファイルを出力してくれる
208デフォルトの名無しさん
2018/08/24(金) 22:08:39.28ID:568m+iHd209デフォルトの名無しさん
2018/08/25(土) 04:35:15.70ID:gxBSyOuw プロセスのアドレス空間が、4GB までだから
その内、Linux では1GB、Windows では2GB を、カーネル空間に割り当てているから、
残りのユーザー空間は、3GB, 2GB になる
カーネル空間は、全プロセス共通の空間だから、各プロセスで使えないアドレス
その内、Linux では1GB、Windows では2GB を、カーネル空間に割り当てているから、
残りのユーザー空間は、3GB, 2GB になる
カーネル空間は、全プロセス共通の空間だから、各プロセスで使えないアドレス
210デフォルトの名無しさん
2018/08/25(土) 05:52:55.11ID:5KTEEpUR 64bit Windowsでの2GB制限ってのは、単にメモリ確保時のアドレスの割り当て方やハンドルの値が変わるだけで、
アクセスできない場所では普通に例外が発生するだけのこと。
/largeaddressaware:yesの状態では、32bitの範囲のアドレスがが割り当てられてないから
rip相対を使って静的変数のあるアドレスを取得するってことね。
アクセスできない場所では普通に例外が発生するだけのこと。
/largeaddressaware:yesの状態では、32bitの範囲のアドレスがが割り当てられてないから
rip相対を使って静的変数のあるアドレスを取得するってことね。
211デフォルトの名無しさん
2018/08/25(土) 05:57:44.86ID:5KTEEpUR 割り当てられてないってのは変だったね。
アクセス権限が与えられてないからってこと。
アクセス権限が与えられてないからってこと。
212デフォルトの名無しさん
2018/08/25(土) 11:07:20.24ID:auNeFg4G 偉そうなもんだな。
もうちょっと、言い方ってもんを学んだ方がいい。
人間性に問題あるかも。
もうちょっと、言い方ってもんを学んだ方がいい。
人間性に問題あるかも。
213デフォルトの名無しさん
2018/09/03(月) 04:21:34.86ID:A+X9ST7o アセンブラの命令を覚えたいのと
デバッガーを使いこなしたいんですが
何かお勧めの勉強方法はありますか?
C入門程度だけの知識だけでアセンブラは全く知りません
よろしくお願い致します
デバッガーを使いこなしたいんですが
何かお勧めの勉強方法はありますか?
C入門程度だけの知識だけでアセンブラは全く知りません
よろしくお願い致します
214デフォルトの名無しさん
2018/09/03(月) 11:24:23.57ID:dhYkuZhG CPUは何?
215デフォルトの名無しさん
2018/09/03(月) 12:38:16.62ID:f+M/nyW5 書いてないってことは決まって無いんだろう
Visual Studio Community 2017
x86 64bit
ml64.exe
が環境としては一番簡単かな
何もしない関数をアセンブラで作って
Cからその関数を呼ぶところから始めよう
Visual Studio Community 2017
x86 64bit
ml64.exe
が環境としては一番簡単かな
何もしない関数をアセンブラで作って
Cからその関数を呼ぶところから始めよう
216デフォルトの名無しさん
2018/09/03(月) 20:27:11.25ID:A+X9ST7o os10 64bitです
C++でアセンブラ使えるんですね
知りませんでした。そこら辺も調べてみます
デバッガーでコードを読んで書き換えられるようになりたいです
C++でアセンブラ使えるんですね
知りませんでした。そこら辺も調べてみます
デバッガーでコードを読んで書き換えられるようになりたいです
217デフォルトの名無しさん
2018/09/03(月) 20:36:15.47ID:i7qE7EE1 マカーか
218デフォルトの名無しさん
2018/09/04(火) 16:50:20.52ID:ErgP6cOz 横からだけど、
それに必要なのはバイナリからアセンブラコードを出力する逆アセンブラじゃないの?
それとも基礎知識として習得したいってことなのか
それに必要なのはバイナリからアセンブラコードを出力する逆アセンブラじゃないの?
それとも基礎知識として習得したいってことなのか
219デフォルトの名無しさん
2018/09/04(火) 17:01:04.80ID:hMkkrsf+ チートしたい!
220デフォルトの名無しさん
2018/09/04(火) 22:32:50.81ID:snmgssEj >>218
これから勉強するって段階で逆アセはまだ早い。まずCで簡単なコード書いてアセンブラソース出力
それを見て少しずつ変更して動作を勉強。どきどき暴走させて遊ぶのがいい。
Cやアセンブラのソースがないバイナリを逆アセしても、逆アセはコードとデータの区別なしにコード化するから混乱する。
これから勉強するって段階で逆アセはまだ早い。まずCで簡単なコード書いてアセンブラソース出力
それを見て少しずつ変更して動作を勉強。どきどき暴走させて遊ぶのがいい。
Cやアセンブラのソースがないバイナリを逆アセしても、逆アセはコードとデータの区別なしにコード化するから混乱する。
221デフォルトの名無しさん
2018/09/04(火) 22:50:42.54ID:bj+tb6HS 回答ありがとうございます;
アセンブラの実行環境整える(実機だのエミュだの)用意するのが物凄い敷居高そうに感じるので
チートエンジンやollydbg?ってやつでオフライン用のゲームでも解析しながら
アセンブラ命令群を覚えようと思ってます。
アセンブラの命令を覚えるのだけなら後者でも力つきますかね?目標はウイルスのデバッグとか出来るようになりたいです
アセンブラの実行環境整える(実機だのエミュだの)用意するのが物凄い敷居高そうに感じるので
チートエンジンやollydbg?ってやつでオフライン用のゲームでも解析しながら
アセンブラ命令群を覚えようと思ってます。
アセンブラの命令を覚えるのだけなら後者でも力つきますかね?目標はウイルスのデバッグとか出来るようになりたいです
222デフォルトの名無しさん
2018/09/05(水) 01:22:32.69ID:vQx16S6k >>221
>目標はウイルスのデバッグとか出来るようになりたいです
どうしてそう反社会的な方ばっかり目がいくんだい。
これだから、ハッカー=クラッカー、悪者、のイメージが付く。
昔は、アセンブラといえば、速さのために学んだものなのに。
君みたいなのにはプログラムになんか興味を持たないで欲しい。
>目標はウイルスのデバッグとか出来るようになりたいです
どうしてそう反社会的な方ばっかり目がいくんだい。
これだから、ハッカー=クラッカー、悪者、のイメージが付く。
昔は、アセンブラといえば、速さのために学んだものなのに。
君みたいなのにはプログラムになんか興味を持たないで欲しい。
223デフォルトの名無しさん
2018/09/05(水) 02:37:54.86ID:wyXCwUhn >>どうしてそう反社会的な方ばっかり目がいくんだい。
そう…ではなくてですね
将来ウイルスとかランサムウェアの対策ツールとか作ってみたいから
デバッグスキル付けたいと思って、覚えたいと思いました。
http://www5c.biglobe.ne.jp/~ecb/assembler/assembler00.html 見て実行環境頑張って作って覚えようと思ったんですけど
とっつきづらすぎると思って;
てかVisualStudioって自分のコードアセンブラで出力したり出来るんですね
全然知りませんでした。ありがとうございます
そう…ではなくてですね
将来ウイルスとかランサムウェアの対策ツールとか作ってみたいから
デバッグスキル付けたいと思って、覚えたいと思いました。
http://www5c.biglobe.ne.jp/~ecb/assembler/assembler00.html 見て実行環境頑張って作って覚えようと思ったんですけど
とっつきづらすぎると思って;
てかVisualStudioって自分のコードアセンブラで出力したり出来るんですね
全然知りませんでした。ありがとうございます
224デフォルトの名無しさん
2018/09/05(水) 03:52:48.57ID:EatH13os ウィルスってね、勉強のつもりで作っても、いざ出来上がると使ってみたくなるもんなんだよね。
そういう誘惑に勝てるかどうか
そういう誘惑に勝てるかどうか
225デフォルトの名無しさん
2018/09/05(水) 06:27:13.70ID:wyXCwUhn >>224
そういう方もいらっしゃるんですね。
プログラミング歴はもといパソコンも初心者レベルにしかない自分には縁のない響きですね・・
ところでC++のコードをvisualstudioでアセンブラ出力とはどうやるんでしょうか?
気になって調べてみたんですが デバック(D)→ウィンドウ→アセンブラ っと進むと出てくると書いてあるんですが
そんな項目ありません;
そういう方もいらっしゃるんですね。
プログラミング歴はもといパソコンも初心者レベルにしかない自分には縁のない響きですね・・
ところでC++のコードをvisualstudioでアセンブラ出力とはどうやるんでしょうか?
気になって調べてみたんですが デバック(D)→ウィンドウ→アセンブラ っと進むと出てくると書いてあるんですが
そんな項目ありません;
226デフォルトの名無しさん
2018/09/05(水) 11:13:33.31ID:/V9AsOwQ debug.exe
debug64.exe
debug64.exe
227デフォルトの名無しさん
2018/09/05(水) 11:34:16.13ID:TWmx8fnR OllyDbg とか、
うさぴょんの「うさみみハリケーン・スペシャルねこまんま」とか、
将棋AI「やねうら王」の作者、やねうらおの本「解析魔法少女 美咲ちゃん」とか
デバッガによるx86プログラム解析入門 【x64対応版】、うさぴょん、2014
うさぴょんの「うさみみハリケーン・スペシャルねこまんま」とか、
将棋AI「やねうら王」の作者、やねうらおの本「解析魔法少女 美咲ちゃん」とか
デバッガによるx86プログラム解析入門 【x64対応版】、うさぴょん、2014
228デフォルトの名無しさん
2018/09/05(水) 11:55:15.09ID:gDSR0MtA229デフォルトの名無しさん
2018/09/05(水) 20:44:59.69ID:wyXCwUhn >>227-228
ありがとうございます
ソリューション周辺探しましたが https://gyazo.com/b58d77fd28f08e941c91b337938d1f6c
無かったです……
VSインストールする時2つくらいしか選択しなかったんですがそれがまずかったんでしょうか
ollydbgというのも調べてみます
ありがとうございます
ソリューション周辺探しましたが https://gyazo.com/b58d77fd28f08e941c91b337938d1f6c
無かったです……
VSインストールする時2つくらいしか選択しなかったんですがそれがまずかったんでしょうか
ollydbgというのも調べてみます
230デフォルトの名無しさん
2018/09/06(木) 01:20:57.16ID:UZSBUUik VSでC/C++のデバッギングに入ってステップインしてたらアセンブラのコードが出てこないか?
231デフォルトの名無しさん
2018/09/06(木) 01:24:39.50ID:uY3Jh6lT >>229
C/C++の所のツリー開け
C/C++の所のツリー開け
232デフォルトの名無しさん
2018/09/06(木) 05:22:06.40ID:psScFFtw Cならインラインアセンブラ使えば良いんでない?
233デフォルトの名無しさん
2018/09/06(木) 14:49:24.96ID:jOmc1UUP いや、普通にターゲットCPUのニーモニック表を探して来て見ろよ
234デフォルトの名無しさん
2018/09/24(月) 01:13:48.37ID:rSek34EX 取り敢えずアセンブラ上の数字2進数(或いは16進数)を桁ごとに分けて十進数にして、+30して(文字コードに変換)する事には成功した。
何進数か関係無く、10の位なら10ずつ、100の位なら100ずつ引いて実現。
筆算のアルゴリズムだともっと速いらしいので、時間があれば挑戦したい。
時間があれば。。。
何進数か関係無く、10の位なら10ずつ、100の位なら100ずつ引いて実現。
筆算のアルゴリズムだともっと速いらしいので、時間があれば挑戦したい。
時間があれば。。。
235デフォルトの名無しさん
2018/09/24(月) 01:17:43.11ID:rSek34EX x 何進数か関係無く、10の位なら10ずつ、100の位なら100ずつ引いて
o 何進数か関係無く、(何進数の10でも10進数の10だと言うことは変わらないので)10の位なら10(16進数だとA)ずつ、100の位なら100ずつ引いて
o 何進数か関係無く、(何進数の10でも10進数の10だと言うことは変わらないので)10の位なら10(16進数だとA)ずつ、100の位なら100ずつ引いて
236デフォルトの名無しさん
2018/09/25(火) 01:58:20.74ID:4rHiZGxF 8bitISAの経験はあるんだがIA32やAMD64のプログラミングマニュアルを見ると命令の多さにめまいがする
しかもググってみるとメモリアドレッシングもなにやら作法があるようでよくわからん・・・
な状態なのだがIA32/AMD64のアセンブラを勉強するのにおすすめの資料とかあるかな
今のところ自力で書いたことのあるISAは78K0S、8051、AVR。基本的な概念はわかっているつもり
リンカ周りは不安あり。プラットフォームはWindowsかLinuxかFreeBSDを検討中
しかもググってみるとメモリアドレッシングもなにやら作法があるようでよくわからん・・・
な状態なのだがIA32/AMD64のアセンブラを勉強するのにおすすめの資料とかあるかな
今のところ自力で書いたことのあるISAは78K0S、8051、AVR。基本的な概念はわかっているつもり
リンカ周りは不安あり。プラットフォームはWindowsかLinuxかFreeBSDを検討中
237デフォルトの名無しさん
2018/09/25(火) 08:56:01.40ID:oRUMH9qn >>236
ISAって何のこと?
ISAって何のこと?
238デフォルトの名無しさん
2018/09/25(火) 09:25:52.53ID:oRUMH9qn ISA=instruction set architecture=命令セットアーキテクチャ
や、
ISA=PC/ATの拡張スロットのバス仕様
??
や、
ISA=PC/ATの拡張スロットのバス仕様
??
239デフォルトの名無しさん
2018/09/25(火) 18:37:53.38ID:oPuX37oa このスレでISAをIndustry Standard Architectureと解釈する必要ってあるのか?
240デフォルトの名無しさん
2018/09/26(水) 04:10:17.53ID:GMLyVXjl 誤解を生まないよう書き込む際は気を付けた方がいいね
241デフォルトの名無しさん
2018/09/26(水) 10:35:31.91ID:s/2dxbJy >>236
VCのx64はインラインアセンブラも使えなくなってるんだから、特殊なビット操作やりたいのでなければ
組み込み関数覚えてからの方が楽なんじゃないの
https://software.intel.com/sites/landingpage/IntrinsicsGuide/
右端に対応するニーモニックが書いてある
VCのx64はインラインアセンブラも使えなくなってるんだから、特殊なビット操作やりたいのでなければ
組み込み関数覚えてからの方が楽なんじゃないの
https://software.intel.com/sites/landingpage/IntrinsicsGuide/
右端に対応するニーモニックが書いてある
242デフォルトの名無しさん
2018/09/27(木) 10:28:07.85ID:+X2PETpr >>240
アスペじゃなければこの文脈でそれはない
アスペじゃなければこの文脈でそれはない
243デフォルトの名無しさん
2018/09/27(木) 10:47:26.07ID:JRG0evD8 そもそも8bitISAなんて言い方は一般的ではないもん。
244デフォルトの名無しさん
2018/09/27(木) 10:58:42.91ID:JRG0evD8 かなりアセンブラ経験あるけど、8bit ISAと聞いても意味が分からなかった。
多分、8bit CPUとか、8bit マイコンのことが言いたかったのではないかとは
思ったけど、意味がはっきりしなかったので念のため聞いてみた。
個人的には、Instrucstion Set Architectureの意味での「ISA」という
言い方は、Intelのマニュアルなどで最近目にするようになった印象が
ある言い方。
修正に告ぐ修正を重ねてが複雑化したx86系CPUのあの複雑さのニュアンス
を出すためにIntelが使い始めた言葉かもしれない。
昔、Z80が流行っていたころは、日本の雑誌などでは、8bit CPUと言われて
いたし、炊飯器や冷蔵庫では、今でもCPUよりもどちらかというと
I/OポートやA/Dコンバーターを内蔵しているみたいななニュアンスを
含めて「マイコン」と言われていると思う。
ISAという言葉は、Intelマニュアル以外ではあまり見たことない。
多分、8bit CPUとか、8bit マイコンのことが言いたかったのではないかとは
思ったけど、意味がはっきりしなかったので念のため聞いてみた。
個人的には、Instrucstion Set Architectureの意味での「ISA」という
言い方は、Intelのマニュアルなどで最近目にするようになった印象が
ある言い方。
修正に告ぐ修正を重ねてが複雑化したx86系CPUのあの複雑さのニュアンス
を出すためにIntelが使い始めた言葉かもしれない。
昔、Z80が流行っていたころは、日本の雑誌などでは、8bit CPUと言われて
いたし、炊飯器や冷蔵庫では、今でもCPUよりもどちらかというと
I/OポートやA/Dコンバーターを内蔵しているみたいななニュアンスを
含めて「マイコン」と言われていると思う。
ISAという言葉は、Intelマニュアル以外ではあまり見たことない。
245デフォルトの名無しさん
2018/09/27(木) 11:23:55.29ID:tmnyfQyv ARM でも MIPS でも普通に ISA 使うけど。
8bit の頃は、セカンドソースはあっても、ISA レベルでのライセンシングが無いか稀だったんじゃないかなあ。
どっちにしろ、16bit バスの ISA を思いつくのはちょっと理解できない。
8bit の頃は、セカンドソースはあっても、ISA レベルでのライセンシングが無いか稀だったんじゃないかなあ。
どっちにしろ、16bit バスの ISA を思いつくのはちょっと理解できない。
246デフォルトの名無しさん
2018/09/27(木) 11:29:57.13ID:JRG0evD8247デフォルトの名無しさん
2018/09/27(木) 11:40:30.81ID:JRG0evD8 >>245
「8-bit ISA card」
で検索すると、色々出てくる。
当時、愛器はNEC製だったのでPC/ATのバス規格であったところのISA
については知らなかったけど。
コンピュータは用語が多様なので、省略形は注意が必要だと思う。
ガングロ女子高生が省略後で通じ合えるのは、多分、興味の対象が
狭いか、語彙が少ないからこそかもしれないと思ってる。
語彙が豊富な人ほど、略さずそのまま言う傾向があると思うし。
「8-bit ISA card」
で検索すると、色々出てくる。
当時、愛器はNEC製だったのでPC/ATのバス規格であったところのISA
については知らなかったけど。
コンピュータは用語が多様なので、省略形は注意が必要だと思う。
ガングロ女子高生が省略後で通じ合えるのは、多分、興味の対象が
狭いか、語彙が少ないからこそかもしれないと思ってる。
語彙が豊富な人ほど、略さずそのまま言う傾向があると思うし。
248デフォルトの名無しさん
2018/09/27(木) 11:40:33.72ID:tmnyfQyv249デフォルトの名無しさん
2018/09/27(木) 11:49:44.12ID:JRG0evD8250デフォルトの名無しさん
2018/09/27(木) 11:55:04.47ID:JRG0evD8 アセンブラの基礎が分かっている人なら、Intelの3 Volumeがセットになった
英文マニュアルがお勧め(なお、英語が分かる人は、日本語版は読まない
方がいいと思う。混乱の元になるから。英語が分からない人は、多分、
混乱しながら時間をかけて前後関係から推定して理解することになる。)
ModRMについても書いてある。ただし、32BITのものが詳しく書かれていて、
64BITのものについては、補足のように後から書かれている。
REX prefixとかと関連して。
非常に壮大なマニュアルで、忘れたけど、総ページ数は5,000ページくらい
あったかもしれないけど、必要なところをかいつまんで読めばいい。
アセンブラ経験がある人なら読めるはず。
英文マニュアルがお勧め(なお、英語が分かる人は、日本語版は読まない
方がいいと思う。混乱の元になるから。英語が分からない人は、多分、
混乱しながら時間をかけて前後関係から推定して理解することになる。)
ModRMについても書いてある。ただし、32BITのものが詳しく書かれていて、
64BITのものについては、補足のように後から書かれている。
REX prefixとかと関連して。
非常に壮大なマニュアルで、忘れたけど、総ページ数は5,000ページくらい
あったかもしれないけど、必要なところをかいつまんで読めばいい。
アセンブラ経験がある人なら読めるはず。
251デフォルトの名無しさん
2018/09/27(木) 12:02:53.61ID:yf1/OigC みんなここを読んでいるのが自分と同じ業界の専門家だと思っているのかな?
初心者スレなんだから上級者は来るなよ
初心者スレなんだから上級者は来るなよ
252デフォルトの名無しさん
2018/09/27(木) 12:09:02.87ID:JRG0evD8 >>250
PDFファイルは、Adobe純正のものではなく、SumatraPDFがお勧め。
場合によっては、それと、PDF-XChange Viewerとの両使いも便利。
2つのビューアーがあると、同じファイルの異なるページを同時に
見ることが出来る。
特に、SumatraPDFは、ネットブラウザやWindows用の
テキスト・エディタなどとよく似た使い勝手で便利。
PDFファイルは、Adobe純正のものではなく、SumatraPDFがお勧め。
場合によっては、それと、PDF-XChange Viewerとの両使いも便利。
2つのビューアーがあると、同じファイルの異なるページを同時に
見ることが出来る。
特に、SumatraPDFは、ネットブラウザやWindows用の
テキスト・エディタなどとよく似た使い勝手で便利。
253デフォルトの名無しさん
2018/09/27(木) 12:29:35.23ID:nUEopGTJ254デフォルトの名無しさん
2018/09/27(木) 12:30:49.36ID:lrUHFZkm 自分の知識不足を棚に上げて絡む馬鹿アスペ
255デフォルトの名無しさん
2018/09/27(木) 12:34:10.71ID:JRG0evD8 お互いに知識に偏りがあるからしょうがないんだよ。
だから、分からない言葉があれば言葉の確認が必要となると思う。
名プログラマやIQ170の人でも、知らない分野では知識不足はあるよ。
だから、分からない言葉があれば言葉の確認が必要となると思う。
名プログラマやIQ170の人でも、知らない分野では知識不足はあるよ。
256デフォルトの名無しさん
2018/09/27(木) 12:51:27.68ID:BciEc+9A >>255
うん、78K0S、8051、AVRがなじみの無いCPUと聞いてショックを受けている。
うん、78K0S、8051、AVRがなじみの無いCPUと聞いてショックを受けている。
257デフォルトの名無しさん
2018/09/27(木) 12:59:24.22ID:JRG0evD8 >>256
78K0Sが、NEC製のマイコンだということだけは、昔知ったことがある。
でも、昔といってもとても最近。
8051は、PC-8801のシリアルコントローラに、似たような型番のものがあったような
気がしたが、たぶん関係ないけど、正確な型番は思い出せない。
78K0Sが、NEC製のマイコンだということだけは、昔知ったことがある。
でも、昔といってもとても最近。
8051は、PC-8801のシリアルコントローラに、似たような型番のものがあったような
気がしたが、たぶん関係ないけど、正確な型番は思い出せない。
258デフォルトの名無しさん
2018/09/27(木) 13:05:15.67ID:JRG0evD8259デフォルトの名無しさん
2018/09/27(木) 16:23:11.07ID:JRG0evD8 >>236
命令が多いのは、基本的には、MMX, SSE〜SSE4, AVX, AVX2, AVX512 が
追加されたことが大きい。その辺の命令はまずは、無視。
整数命令(汎用命令)から見るといい。
なおその前に、どんなレジスタがあるかについて勉強する。
「basic execution environment」みたいな節に書いてある。
レジスタは拡張につぐ拡張があったので、理解するのにそれなりの時間がかかる。
アルファベットごとの命令表の、mov, add, sub, mul, div, imul, idiv,
push, pop, call, jmp, jcc 系を中心に見た後、ModRMについて書かれた節を見る。
最初は、16BIT/32BIT の ModRM、SIB について理解する。
その際、operand prefix, address prefix について理解する。
その後、64BIT の long mode, compatible mode の説明を読んだ後、
64BIT の ModRM, SIB について、REX prefix とまとめて理解する。
ちなみに、以下は後回しにする:
fadd, fsub, fmul, fdiv, fldp, fld, fstp, fld は、x87 FPU。
padd, psub は、MMX, addps, addss, subps, subss, mulps, mulss は、SSE系。
mm0〜mm7, xmm, ymm, zmm, に関する movxxxx も最初は無視。
これらの movxxxx は、アルファベット順の命令ごとについての書かれた章
のに解説が書かれているが、アラインだとかの説明が難しい。
実は、同じマニュアルセットの全然別の場所にこれらの movxxxx 命令の
説明が割りと平易な言葉で書かれているので参考になる。ただし、英語。
翻訳版の日本語だと余計に意味が分からないかもしれないの注意。
AVX系命令は、まず、VEX, EVEX prefix を読む。REX prefix が完全に理解
してないと理解は難しいと思う。
命令が多いのは、基本的には、MMX, SSE〜SSE4, AVX, AVX2, AVX512 が
追加されたことが大きい。その辺の命令はまずは、無視。
整数命令(汎用命令)から見るといい。
なおその前に、どんなレジスタがあるかについて勉強する。
「basic execution environment」みたいな節に書いてある。
レジスタは拡張につぐ拡張があったので、理解するのにそれなりの時間がかかる。
アルファベットごとの命令表の、mov, add, sub, mul, div, imul, idiv,
push, pop, call, jmp, jcc 系を中心に見た後、ModRMについて書かれた節を見る。
最初は、16BIT/32BIT の ModRM、SIB について理解する。
その際、operand prefix, address prefix について理解する。
その後、64BIT の long mode, compatible mode の説明を読んだ後、
64BIT の ModRM, SIB について、REX prefix とまとめて理解する。
ちなみに、以下は後回しにする:
fadd, fsub, fmul, fdiv, fldp, fld, fstp, fld は、x87 FPU。
padd, psub は、MMX, addps, addss, subps, subss, mulps, mulss は、SSE系。
mm0〜mm7, xmm, ymm, zmm, に関する movxxxx も最初は無視。
これらの movxxxx は、アルファベット順の命令ごとについての書かれた章
のに解説が書かれているが、アラインだとかの説明が難しい。
実は、同じマニュアルセットの全然別の場所にこれらの movxxxx 命令の
説明が割りと平易な言葉で書かれているので参考になる。ただし、英語。
翻訳版の日本語だと余計に意味が分からないかもしれないの注意。
AVX系命令は、まず、VEX, EVEX prefix を読む。REX prefix が完全に理解
してないと理解は難しいと思う。
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 「おこめ券は米以外の食品も買える。効果的な活用を」 地元で農水相 [山形県] [少考さん★]
- 高市首相の答弁書に「台湾有事答えない」と明記 存立危機発言当時 ★11 [蚤の市★]
- 【速報】「女芸人No.1決定戦 THE W」9代目女王にニッチェ! 7年ぶり3度目で悲願の優勝 [牛丼★]
- 【芸能】『女芸人No.1決定戦THE W』 粗品が最後にバッサリ「優勝賞金1000万円にしてはレベル低い大会」 [冬月記者★]
- 【沖縄】開業4ヵ月でこれは…“国民の税金”投入の『ジャングリア沖縄』で見た衝撃的な光景と、モチベーションが低い一部スタッフの現状 [ぐれ★]
- 今年の流行語大賞 『働いて働いて働いてまいります』が受賞で不快感… 過労自殺の遺族らが会見「家族にむち打つような行為だ」 [冬月記者★]
- __イスラエル紙、ベネズエラ政権交代をトランプに促したのはイスラエル、影響力の大きさを示唆 [827565401]
- __ブルガリア、Z世代の抗議が増税予算と汚職政治への怒りへ、政権が崩壊、若者を無視する政治への警告 [827565401]
- クズ「勉強頑張らなかった奴は一生DQNと一緒に肉体労働しろ」☚勉強頑張れるのも環境と巡り合わせなんだが? [783475554]
- 俺の口癖が「へー」「そう」「どうも」なんだが
- キャッシュレスに対応してない店、手数料が問題ならその分値上げすればいいじゃない、現金の管理や手数料、両替もただじゃない [943688309]
- 【正論】検察「山上よ、どんな事情があろうと暴力が許されない」 [442080748]
