[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 2chのread.cgiへ]
Update time : 02/24 11:23 / Filesize : 211 KB / Number-of Response : 985
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

アセンブラ… (゜□゜) ↑アッー!↓



1 名前:デフォルトの名無しさん [2006/05/24(水) 01:43:34 ]
アセンブラ全般に関するスレッドです。

【前スレ】
アセンブラ… ヽ(゚∀゚)ノフォーウ!
pc8.2ch.net/test/read.cgi/tech/1132761638/

過去ログは>>2辺り

935 名前:デフォルトの名無しさん mailto:sage [2007/02/14(水) 02:24:01 ]
まあ、バイナリエディタで機械語直書きからアセンブラ、コンパイラ組み込み関数までいろいろ書き方はあるけど、
自分が使うCPUにどういう命令があって、その実行にどれだけのコストがかかるかという知識がいらなくなる時代はまだ当分こないだろうな。

重要なのはそういう知識であって、アセンブラの文法とか機能はわりとどうでもいい。

936 名前:デフォルトの名無しさん mailto:sage [2007/02/14(水) 02:25:59 ]
そういう時代がきちゃったら、プログラマは廃れちゃうな
実力が

937 名前:デフォルトの名無しさん mailto:sage [2007/02/14(水) 10:06:54 ]
CASL2のバイブル的な本ってどれですか。
入門書とかじゃなくて。
詳しく買いてるやつ。

938 名前:デフォルトの名無しさん mailto:sage [2007/02/14(水) 13:03:47 ]
最近やたらめったらいろんなアーキテクチャの仕事があるんで
インストラクションセットを覚える暇すらない
みんな8bitとか16bitとかだけど
命令表を斜め読みして
「げ、左シフトねーじゃんこのCPU」とか
「符号反転ねーよ」とか
「乗算命令じゅーよー」だの
「わは。レジスタ4つ、こっちは32個ー」とか言いつつテンパってる

939 名前:デフォルトの名無しさん mailto:sage [2007/02/14(水) 13:55:11 ]
>>938
でも一つもアセンブリ齧ってないとそれも判らないんだよね

940 名前:デフォルトの名無しさん mailto:sage [2007/02/14(水) 16:04:08 ]
>>938
たぶんそう思ったヤツが高級言語作ろうと思ったんだろうな

941 名前:デフォルトの名無しさん mailto:sage [2007/02/14(水) 16:28:30 ]
>>938
4つのせりふのうち3つは何だかわかった。

orz


942 名前:デフォルトの名無しさん mailto:sage [2007/02/14(水) 17:22:05 ]
しかもハーバード型、ノイマン型も満遍なく取り揃えられておりますorz

943 名前:デフォルトの名無しさん mailto:sage [2007/02/14(水) 23:04:01 ]
  そだ  |------、`⌒ー--、
  れが  |ハ{{ }} )))ヽ、l l ハ
  が   |、{ ハリノノノノノノ)、 l l
  い   |ヽヽー、彡彡ノノノ}  に
  い   |ヾヾヾヾヾヽ彡彡}  や
  !!    /:.:.:.ヾヾヾヾヽ彡彡} l っ
\__/{ l ii | l|} ハ、ヾ} ミ彡ト
彡シ ,ェ、、、ヾ{{ヽ} l|l ィェ=リ、シ} |l
lミ{ ゙イシモ'テ、ミヽ}シィ=ラ'ァ、 }ミ}} l
ヾミ    ̄~'ィ''': |゙:ー. ̄   lノ/l | |
ヾヾ   "  : : !、  `  lイノ l| |
 >l゙、    ー、,'ソ     /.|}、 l| |
:.lヽ ヽ   ー_ ‐-‐ァ'  /::ノl ト、
:.:.:.:\ヽ     二"  /::// /:.:.l:.:.
:.:.:.:.:.::ヽ:\     /::://:.:,':.:..:l:.:.
;.;.;.;.;;.:.:.:.\`ー-- '" //:.:.:;l:.:.:.:l:.:
難しい問題ほど、解けると達成感あるのよね。



944 名前:デフォルトの名無しさん [2007/02/17(土) 21:49:42 ]
extern unsigned int crcTable[];
unsigned int updateCRC32( unsigned char *src, unsigned int size, unsigned int crc )
{
while ( size-- )
crc = ( crc << 8 ) ^ crcTable[ ( crc >> 24 ) ^ *src++ ];
return crc;
}
誰かこれを高速化して下され。
Cの範囲じゃやはりこれが限度っぽい。
後はアセンブラしかなさそうなのです。

945 名前:・∀・)っ-○◎●創聖のダンゴリオン ◆DanGorION6 mailto:sage [2007/02/17(土) 22:05:55 ]
せめてここまでコード最適化してからだね。
アルゴリズムの改良を試みずにアセンブラに頼るのは知性の敗北
www.intel.co.jp/jp/developer/technology/magazine/communications/slicing-by-8-0306.htm


コードはこちらからどーぞ
sourceforge.net/projects/slicing-by-8

946 名前:デフォルトの名無しさん mailto:sage [2007/02/17(土) 22:26:40 ]
移植性のないポインタ変換とエンディアンの決め打ちがあるから
どちらかというとアセンブラで書くべきアルゴリズムだけどな

947 名前:デフォルトの名無しさん mailto:sage [2007/02/17(土) 22:35:18 ]
>>937
CASLなんて通過した後は一切触らないから
毎年IPAが配ってる案内書に付属してる仕様書だけで十分。
命令が読めりゃ後は何も困ることないでしょ。

948 名前:デフォルトの名無しさん mailto:sage [2007/02/18(日) 05:22:21 ]
>>944 のコードのままでも、do whileにしただけで1命令は速くなるね。

949 名前:デフォルトの名無しさん mailto:sage [2007/02/18(日) 06:47:01 ]
mov eax, crc
mov ecx, size
mov esi, src
rep crc32


950 名前:デフォルトの名無しさん mailto:sage [2007/02/18(日) 08:06:08 ]
>>948
処がだ、最近のコンパイラはforに特化した最適化をすることが多いから一概には言えない。

951 名前:デフォルトの名無しさん mailto:sage [2007/02/18(日) 14:09:14 ]
最近のコンパイラは賢いからなぁ
ていうかCPUの内部が複雑杉

952 名前:・∀・)っ-○◎●創聖のダンゴリオン ◆DanGorION6 mailto:sage [2007/02/18(日) 14:33:51 ]
>>949
Nehalemキター

953 名前:デフォルトの名無しさん mailto:sage [2007/02/18(日) 14:50:04 ]
コンパイラ何よ?



954 名前:デフォルトの名無しさん mailto:sage [2007/02/19(月) 07:54:37 ]
ファミ通にアセンブラ経験者の求人が乗っててひいた

955 名前:デフォルトの名無しさん mailto:sage [2007/02/19(月) 18:22:15 ]
アセンブラですか・・・漫画は読んだんだけどOKですかね?
とか?                          Z80でいいなら・・・(・∀・)

956 名前:デフォルトの名無しさん mailto:sage [2007/02/19(月) 20:26:41 ]
いまさらZ80みたいな変態CPUは無いだろう。


957 名前:・∀・)っ-○◎●創聖のダンゴリオン ◆DanGorION6 mailto:sage [2007/02/20(火) 00:44:35 ]
どうみてもCell一択です

Wiiでもやるんかな、性能稼ぐために

958 名前:デフォルトの名無しさん mailto:sage [2007/02/20(火) 02:09:12 ]
Wiiは既に死に体だからアセンブラ駆使してまでゲーム作んないぞ。

959 名前:・∀・)っ-○◎●創聖のダンゴリオン ◆DanGorION6 mailto:sage [2007/02/20(火) 02:54:02 ]
>Wiiは既に死に体だから
それはひょっとしてギャグで言ってるのか?

960 名前:デフォルトの名無しさん mailto:sage [2007/02/20(火) 04:53:08 ]
>>956 川崎の石は現役ですよ。日立の64180はさすがに作ってないみたいだけど。

961 名前:デフォルトの名無しさん mailto:sage [2007/02/20(火) 06:07:13 ]
>川崎の石
あの変態なZ80に、更に変態なメモリ管理命令増やした奴だっけ?
#いや、割りと好きですがw

>>957
この前は漏れがそう書いたら社員乙とか書かれた気がするが……

962 名前:デフォルトの名無しさん mailto:sage [2007/02/20(火) 06:52:22 ]
>>957
今時アセで組む必要があるなんて
余程余裕のない組み込みか
Cellみたいな変な石使う時だろうしそうかもね

963 名前:デフォルトの名無しさん mailto:sage [2007/02/20(火) 08:31:10 ]
質問です。ml.exeのインラインアセンブラを使って汎用レジスタと
セグメントレジスタの値を表示したいのですが、次のようなコードで
おkですか?

int eaxv, ebxv, ecxv, edxv, esiv, ediv, ebpv, espv;
wchar_t csv, dsv, ssv, esv, fsv, gsv;
eaxv = ebxv = ecxv = edxv = esiv = ediv = ebpv = espv = 0;
csv = dsv = ssv = esv = fsv = gsv = 0;
__asm {
mov eaxv, eax;
mov ebxv, ebx;
mov ecxv, ecx;
mov edxv, edx;
mov esiv, esi;
mov ediv, edi;
mov ebpv, ebp;
mov espv, esp;
mov csv, cs;
mov dsv, ds;
mov ssv, ss;
mov esv, es;
mov fsv, fs;
mov gsv, gs;
}
printf( "EAX=%08X EBX=%08X ECX=%08X EDX=%08X\n", eaxv, ebxv, ecxv, edxv );
printf( "ESI=%08X EDI=%08X EBP=%08X ESP=%08X\n", esiv, ediv, ebpv, espv );
printf( "CS=%04X DS=%04X SS=%04X ES=%04X FS=%04X GS=%04X\n", csv, dsv, ssv, esv, fsv, gsv );




964 名前:デフォルトの名無しさん mailto:sage [2007/02/20(火) 10:36:56 ]
片っ端から変数に代入しようとすると、結局レジスタを消費してしまって正しく表示できないと思われ。
全部纏めてでなく、一個ずつやらないとダメなんでない?
#つーか、デバッガで見ることはできないのか?

965 名前:デフォルトの名無しさん mailto:sage [2007/02/20(火) 15:47:34 ]
>944
速いかどうかは、解らないが、とりあえず国産CISCCPU(32bit?)の場合

#pragma PARAMETER update32(A0,R3R1,R2R0)
----
_updateCRC32:
$updateCRC32:
PUSHM A1
__loop:
MOV.W R2,A1
SHL.W #-8,A1

XOR.B [A0],A1
SHL.L #2,A1 ; Long Index
SHL.L #8,R2R0
XOR.L _crcTable[A1],R2R0
ADDX #1,A0
SUBX #1,R3R1
JNZ __loop

POPM A1
RTS


966 名前:デフォルトの名無しさん mailto:sage [2007/02/20(火) 18:50:36 ]
>>964
スタックに突っ込めばいいんじゃないかな。
でもってespを適当な構造体のポインタに格納したりして。

967 名前:デフォルトの名無しさん mailto:sage [2007/02/20(火) 19:54:37 ]
>>963
ml.exeのインラインアセンブラってなんだよ。 等の細かいツッコミは置いといて。
表示するだけならそれで良い。

アセンブリ出力(VC++なら/FAs)を出して確認すれ。

968 名前:デフォルトの名無しさん mailto:sage [2007/02/20(火) 23:42:56 ]
インラインasm使う必要すらないじゃん

969 名前:デフォルトの名無しさん mailto:sage [2007/02/21(水) 02:43:28 ]
>>964,>>966,>>967,>>968
みなさん、貴重なアドバイスをありがとうございます。
.asmファイルを見てみると、インラインアセンブラに対応するコードは
下のようになっていました。
余分な処理はないようなので、一応問題なくレジスタの内容を
ストア(?)できているようです。

mov DWORD PTR _eaxv$[ebp], eax
mov DWORD PTR _ebxv$[ebp], ebx
mov DWORD PTR _ecxv$[ebp], ecx
mov DWORD PTR _edxv$[ebp], edx
mov DWORD PTR _esiv$[ebp], esi
mov DWORD PTR _ediv$[ebp], edi
mov DWORD PTR _ebpv$[ebp], ebp
mov DWORD PTR _espv$[ebp], esp
mov WORD PTR _csv$[ebp], cs
mov WORD PTR _dsv$[ebp], ds
mov WORD PTR _ssv$[ebp], ss
mov WORD PTR _esv$[ebp], es
mov WORD PTR _fsv$[ebp], fs
mov WORD PTR _gsv$[ebp], gs


970 名前:デフォルトの名無しさん mailto:sage [2007/02/21(水) 14:15:18 ]
WindowsだったらGetThreadContextで一発というオチ。

971 名前:デフォルトの名無しさん mailto:sage [2007/02/21(水) 14:40:27 ]
GetThreadContextを自スレッドに呼び出すと呼び出しは成功するけど中身の保証は無し

972 名前:デフォルトの名無しさん mailto:sage [2007/02/23(金) 00:05:17 ]
最近勉強中でちょっと悩みがあります。
メモリのアドレスを特定のルーチンだけで利用するんですが、
スタックに入れてpush,popするべきなのか、
メモリから読んでまた書き戻すべきなのか、
どっちがいいんでしょう?
値を更新するので所謂Cのポインタなのですが。
やはりスタックの方が若干速そうなのですがその内バグりそうです。
慣れるまではメモリを使うべきでしょうか?

973 名前:デフォルトの名無しさん mailto:sage [2007/02/23(金) 00:10:01 ]
>>972
レジスタ



974 名前:デフォルトの名無しさん mailto:sage [2007/02/23(金) 01:12:27 ]
65816アセンブラの勉強中で詰まってしまいました。
例えば
AD E0 11 LDA
で11E0の値が260以上ならXにジャンプ
260以下ならYにジャンプという命令はどのようにしたらいいですか?
AD E0 11
CD 60 02
F0 04
5C XX XX XX
5c YY YY YY
とやりましたがゼロフラグを使っての分岐なので
260だったときでした。
「260以上はXにジャンプ、260以下はYにジャンプ」の分岐の方法を
何方かご教授下さい。

975 名前:デフォルトの名無しさん mailto:sage [2007/02/23(金) 01:34:34 ]
>>974
65816は知らんが、ニモニック表をよく見てみ。
条件分岐命令にゼロフラグチェック以外にもキャリーフラグチェックのがあるはずだから。

976 名前:デフォルトの名無しさん mailto:sage [2007/02/23(金) 03:01:21 ]
>>974
おまい、OKWaveでも同じこときいてたな。>>975の説明でも
理解できなさそうだ。

なあ、206以下と260以上で分けるていってるけどさ、「260」のときは
どっちに分岐させんだいw



977 名前:デフォルトの名無しさん mailto:sage [2007/02/23(金) 08:47:17 ]
>>975
65816ではこうやって覚えとけばいい。
同じ(A = CMP xxxx):BEQ F0
以外(A ≠ CMP xxxx):BNE D0
未満(A < CMP xxxx):BCC(BLT) 90
以上(A ≧ CMP xxxx):BCS(BGE) B0

あと、CD 60 02だとCMP $260、つまり$260番地の内容との比較になる。
即値と比較がしたかったらC9 60 02とやるべき。


978 名前:デフォルトの名無しさん mailto:sage [2007/02/23(金) 09:25:36 ]
>>975
フラグの意味がわかってませんでした。

>>976
260以下と260未満でした。
すみません。

>>977
ありがとうございます!
無事260以上の命令が出来ました。

皆様お忙しい中有難うございました。

979 名前:デフォルトの名無しさん mailto:sage [2007/02/28(水) 00:03:34 ]
> 260以下と260未満

980 名前:デフォルトの名無しさん [2007/03/17(土) 23:56:27 ]
あげ

981 名前:デフォルトの名無しさん [2007/03/21(水) 00:07:46 ]
age

982 名前:デフォルトの名無しさん [2007/03/21(水) 17:34:48 ]
NASMでSSE3やそれ以上は使えるのですか。

983 名前:デフォルトの名無しさん mailto:sage [2007/03/21(水) 17:52:27 ]
マクロアセンブラならどんなニモニックだろうと(自分で追加すれば)使える。



984 名前:デフォルトの名無しさん mailto:sage [2007/03/21(水) 20:25:57 ]
まず勉強






[ 新着レスの取得/表示 (agate) ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<211KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef