トップページ⇒tech
1001コメント268KB

アセンブラ… (*´д`*)アハァ…

レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさんNGNG
アセンブラ全般に関するスレッドです。

【過去ログ】
アセンブラ… (゚д゚)ウマー
http://pc2.2ch.net/test/read.cgi/tech/1060928704/
アセンブラヽ(`Д´)ノモルァ
http://pc2.2ch.net/tech/kako/1040/10402/1040297337.html
アセンブラヽ(`Д´)ノモルァ
http://pc3.2ch.net/tech/kako/1016/10169/1016991911.html
アセンブラ… (・∀・)イイ!
http://pc.2ch.net/tech/kako/1002/10022/1002267809.html
0002名無し@沢村NGNG
おい、おまーら聞け、おれのマシン語のサイトにPEフォーマットの仕様をUPしたからな。
恐ろしすぎるぞ!!おまーら↓

http://hp.vector.co.jp/authors/VA015412/
0003デフォルトの名無しさんNGNG
軽やかに3ゲット
0004デフォルトの名無しさんNGNG
【過去ログ】
アセンブラ… (゚д゚)ウマー
http://pc2.2ch.net/test/read.cgi/tech/1060928704/
アセンブラヽ(`Д´)ノモルァ
http://pc2.2ch.net/tech/kako/1040/10402/1040297337.html
アセンブラヽ(`Д´)ノモルァ
http://pc3.2ch.net/tech/kako/1016/10169/1016991911.html
アセンブラ… (・∀・)イイ!
http://pc.2ch.net/tech/kako/1002/10022/1002267809.html
0005デフォルトの名無しさんNGNG
【書籍】
Computer Organization and Design Second Edition : The Hardware/Software Interface
http://www.amazon.com/exec/obidos/tg/detail/-/1558604286/

Computer Architecture: A Quantitative Approach
http://www.amazon.com/exec/obidos/tg/detail/-/1558605967/
0006デフォルトの名無しさんNGNG
とてもエッチなスレですね
0007デフォルトの名無しさんNGNG
さすがはソフトウェア産業の進んだ国だ。
VAX Assembly Language なんて本が廃刊にならずに未だにあるのかよ。
ちょっとびびったぜ(藁
http://www.amazon.com/exec/obidos/tg/browse/-/3954/
0008デフォルトの名無しさんNGNG
Windowsで out とか in とか使って直接ハードウェア読む方法にについて
書いてある本かウェブサイトを知っている方居ましたら、教えていただけないでしょうか。
0009デフォルトの名無しさんNGNG
>>8
昔のスレに情報があったように思う。
たしか
http://www.ddj.com/
の過去の記事で、サンプルコードが今でもダウンロード可能なはず。
・参考
http://www.gijyutu.com/g-soft/automa/nt/automa_nt.html
0010デフォルトの名無しさんNGNG
爽やかに10ゲト
0011デフォルトの名無しさんNGNG
http://www7.plala.or.jp/keny01/
http://black.sakura.ne.jp/~third/
http://sufami.hp.infoseek.co.jp/
0012デフォルトの名無しさんNGNG
前スレより下がってるのでage
0013デフォルトの名無しさんNGNG
(*´д`*)アハァ…
0014デフォルトの名無しさんNGNG
mov large fs:0 ,ecx
↑のlarge fs:0がわからないのでどなたか教えてください。
0015デフォルトの名無しさんNGNG
自分で調べて解決しました。
0016デフォルトの名無しさんNGNG
調べてから聞け
0017デフォルトの名無しさんNGNG
つーかなんだったのか説明しろ
0018デフォルトの名無しさんNGNG
16:32アドレスのことでは?
16:16と区別するための
0019デフォルトの名無しさんNGNG
次スレのタイトルは

「 アセンブラ… (;´Д`) ハァハァ 」

でお願いします
0020デフォルトの名無しさんNGNG
↑馬鹿?
0021デフォルトの名無しさんNGNG
頑張って950をとってくれたまえ。
0022デフォルトの名無しさんNGNG
アセンブラ… (゚∀゚)ノ キュンキュン!
0023デフォルトの名無しさんNGNG
昔のスレ読んでたんだけど、スレが続くほど中身がなくなってる
気がする。
0024デフォルトの名無しさんNGNG
まだまだAMD64があるさ!
マニュアルほとんど整備されてないし('A`)
0025デフォルトの名無しさんNGNG
はぁ、ツマンネ
0026デフォルトの名無しさんNGNG
>>25
ツマルさ!
0027デフォルトの名無しさんNGNG
アセンブラ… ('A`)マンドクセ
0028名無し@沢村NGNG
マシン語… (*´д`*)アハァ…

http://hp.vector.co.jp/authors/VA015412/
0029デフォルトの名無しさんNGNG
>>28のサイトでもう何というか…アレだ
いやもう何も言うことはないよ
0030デフォルトの名無しさんNGNG
いまだにuパイプvパイプを意識してしまう
0031デフォルトの名無しさんNGNG
>>30
え!?もう、意識しなくていいの?
0032デフォルトの名無しさんNGNG
>>30
いいなぁ!PentiumXIIユーザーだね?
0033デフォルトの名無しさんNGNG
まともなアセマーはみんな電子板にいったのかな。
0034デフォルトの名無しさんNGNG
アセモーってなんだよ。
アッセンブララーだろ。
0035デフォルトの名無しさんNGNG
組立工みたいだな
0036デフォルトの名無しさんNGNG
μop
0037デフォルトの名無しさんNGNG
アセンブラ初心者です

8086マクロアセンブラ入門という本を
使ってるんですが

NOWSMART ASSEMBLER
LASM Ver2.32体験版でやっても
.code;
mov ax,bx;
mov al,bh;
mov ah,bl;
mov cl,x;
mov ax,w;
mov ax,3;
mov x,5;
.date;
xdb?;
wdw?;
がコンパイルできないのですが
どうしてでしょうか!?
0038デフォルトの名無しさんNGNG
間違っているから。とりあえず s/.date/.data/な。
あとコンパイルじゃなくてアセンブルと普通はいう。
質問するときはエラーメッセージもきちんと書こう。
0039デフォルトの名無しさんNGNG
セミコロンはどういう意味で入れてるんだ?
0040デフォルトの名無しさんNGNG
改行をコメントアウト
0041デフォルトの名無しさんNGNG
>>40
ナイス
0042デフォルトの名無しさんNGNG
さて
Intelの64bit拡張がAMD64完全互換で
レジスタ名やページテーブルの構成まで一緒となり、
将来もほぼ安泰。
masm系64bitアセンブラの登場が待たれるわけだが。

http://developer.intel.com/technology/64bitextensions/
http://developer.intel.com/technology/64bitextensions/faq.htm
0043鳥取砂丘&rlo;コッ゙タコッ゙タ&lro; ◆Dream/3P/. NGNG
nasm系アセンブラは嫌いですか?
0044デフォルトの名無しさんNGNG
GSレジスタって使われたことがあるのでしょうか?
少なくとも、NT系では使ってないですよね。
0045デフォルトの名無しさんNGNG
TOWNSではGSつかいまくり
フラットモデルなら当然いらないよな
Win32は変態だからFSは使うけど
0046デフォルトの名無しさんNGNG
NTのFSレジスタの使い方も、ほとんど意味がないような気がする
0047名無し@沢村NGNG
おれのマシン語のサイトに掲示板ができたぞ!
ほんにおまいら〜♪

http://hp.vector.co.jp/authors/VA015412/
0048デフォルトの名無しさんNGNG
WINではFSって例外処理に使ってるんだっけ?
0049デフォルトの名無しさんNGNG
使ってるね。
0050デフォルトの名無しさんNGNG
具体的にはどうやってつかってますか?
おしえてください
fsにはセレクターとか入ってないんですか?
0051デフォルトの名無しさんNGNG
fsがTEBのセレクタとなってまっする
0052デフォルトの名無しさんNGNG
TEBじゃなくて、PEB(GDT6番)じゃない?
あと、PCR(GDT7番)のセレクタにもなっています。

でもFSに値を入れて16:32アドレスを使う理由が分からん。
0053デフォルトの名無しさんNGNG
セグメントはちゃんと使えばメリットはある
文句言ってる香具師はただのヘタレ
0054デフォルトの名無しさんNGNG
NT系は、CPUの機能になるべく依存しないように作られている。

仕組み上x86はディスクリプタとセレクタに値を埋めなければ
CPUは動かないので、仕方がなく使っている(と思う)
0055デフォルトの名無しさんNGNG
g++が例外フレームをどうやって扱ってるか教えてくれろ
0056デフォルトの名無しさんNGNG
>>54
あんた周りからとんがり過ぎてるよ・・・角度とか
0057デフォルトの名無しさんNGNG
gccのインラインアセンブラを使用しているのですが、
ラベルと外部変数の関係がわからず悩んでいます。
例えば、
extern short data[];

void func(void)
{
register int t1, t2;
asm("data:;add %0, %1, %1":"=&r"(t1):"r"(t2));
}

のようなソースであったとして、参照指定された外部変数dataは
asm文中のdataラベルと関係があるようなのですが、文法的な相互関係が
よくわかりません。data変数はexternを外して実際にそこに定義すると
エラーとなります(変数の再定義エラー)。つまりasm文中のdataラベルが
変数(?)のように扱われているようなのです。gccのマニュアル等色々
調べたのですが結局わかりませんでした。
どなたかお分かりでしたら、ご教授ください。
0058デフォルトの名無しさんNGNG
gccのインラインアセンブラを使用しているのですが、
ラベルと外部変数の関係がわからず悩んでいます。
例えば、
extern short data[];

void func(void)
{
register int t1, t2;
asm("data:;add %0, %1, %1":"=&r"(t1):"r"(t2));
}

のようなソースであったとして、参照指定された外部変数dataは
asm文中のdataラベルと関係があるようなのですが、文法的な相互関係が
よくわかりません。data変数はexternを外して実際にそこに定義すると
エラーとなります(変数の再定義エラー)。つまりasm文中のdataラベルが
変数(?)のように扱われているようなのです。gccのマニュアル等色々
調べたのですが結局わかりませんでした。
どなたかお分かりでしたら、ご教授ください。
0059デフォルトの名無しさんNGNG
gccのインラインアセンブラを使用しているのですが、
ラベルと外部変数の関係がわからず悩んでいます。
例えば、
extern short data[];

void func(void)
{
register int t1, t2;
asm("data:;add %0, %1, %1":"=&r"(t1):"r"(t2));
}

のようなソースであったとして、参照指定された外部変数dataは
asm文中のdataラベルと関係があるようなのですが、文法的な相互関係が
よくわかりません。data変数はexternを外して実際にそこに定義すると
エラーとなります(変数の再定義エラー)。つまりasm文中のdataラベルが
変数(?)のように扱われているようなのです。gccのマニュアル等色々
調べたのですが結局わかりませんでした。
どなたかお分かりでしたら、ご教授ください。
0060デフォルトの名無しさんNGNG
連投する奴には教えない
0061デフォルトの名無しさんNGNG
変数ってイメージとしては特定の番地に名前を付けたものだからね。
リンカが云々とかは別として。

番地に名前を付けるという意味ではラベルも同じで、メモリー上の
コード列の内の特定の場所に名前を付けることだから。

インラインアセンブラを用いて定義されたdata:に続く機械語列
をshortの配列と見なしてそこを参照してるわけでしょう。

externを外したらそりゃあエラーが出るでしょう。
dataという名前のシンボルが2つあるんだから。
0062デフォルトの名無しさんNGNG
gccのインラインアセンブラを使用しているのですが、
ラベルと外部変数の関係がわからず悩んでいます。
例えば、
extern short data[];

void func(void)
{
register int t1, t2;
asm("data:;add %0, %1, %1":"=&r"(t1):"r"(t2));
}

のようなソースであったとして、参照指定された外部変数dataは
asm文中のdataラベルと関係があるようなのですが、文法的な相互関係が
よくわかりません。data変数はexternを外して実際にそこに定義すると
エラーとなります(変数の再定義エラー)。つまりasm文中のdataラベルが
変数(?)のように扱われているようなのです。gccのマニュアル等色々
調べたのですが結局わかりませんでした。
どなたかお分かりでしたら、ご教授ください。
0063デフォルトの名無しさんNGNG
gccのインラインアセンブラを使用しているのですが、
ラベルと外部変数の関係がわからず悩んでいます。
例えば、
extern short data[];

void func(void)
{
register int t1, t2;
asm("data:;add %0, %1, %1":"=&r"(t1):"r"(t2));
}

のようなソースであったとして、参照指定された外部変数dataは
asm文中のdataラベルと関係があるようなのですが、文法的な相互関係が
よくわかりません。data変数はexternを外して実際にそこに定義すると
エラーとなります(変数の再定義エラー)。つまりasm文中のdataラベルが
変数(?)のように扱われているようなのです。gccのマニュアル等色々
調べたのですが結局わかりませんでした。
どなたかお分かりでしたら、ご教授ください。
0064デフォルトの名無しさんNGNG
gccのインラインアセンブラを使用しているのですが、
ラベルと外部変数の関係がわからず悩んでいます。
例えば、
extern short data[];

void func(void)
{
register int t1, t2;
asm("data:;add %0, %1, %1":"=&r"(t1):"r"(t2));
}

のようなソースであったとして、参照指定された外部変数dataは
asm文中のdataラベルと関係があるようなのですが、文法的な相互関係が
よくわかりません。data変数はexternを外して実際にそこに定義すると
エラーとなります(変数の再定義エラー)。つまりasm文中のdataラベルが
変数(?)のように扱われているようなのです。gccのマニュアル等色々
調べたのですが結局わかりませんでした。
どなたかお分かりでしたら、ご教授ください。
0065デフォルトの名無しさんNGNG
through siru
0066デフォルトの名無しさんNGNG
akukin sinnsei suru?
0067デフォルトの名無しさんNGNG
dekirunoha resusakujoirai made.
akusitunanoha unneiga handan suru.
0068デフォルトの名無しさんNGNG
sizukani natta
0069デフォルトの名無しさんNGNG
Mac OS X で PowerPC のアセンブラをこの週末を使って勉強しようと考えています。
全くの素人ですが、とりあえず、gcc -S で勉強しようかと思います。PowerPC
アセンブラの資料は少ないので、一般的なアセンブラのテキストがあると嬉しいのですが、
良い資料はないでしょうか。
0070デフォルトの名無しさんNGNG
>>69
アセンブラはCPU固有の命令の集合体。なので一般的なテキストってのは
多分ないと思う。
0071デフォルトの名無しさんNGNG
せめて RISC 系の CPU なら似ているかなぁと思ったのですが、正直上手い勉強方法が
分かりません。x86 なマシンは持っていません。SPARC ならあるのですが。
0072デフォルトの名無しさんNGNG
メモリからデータを読み込んで加工して書き出す一連の流れは
どのCPUも大体同じだと思うんだけど
0073デフォルトの名無しさんNGNG
PowerPCって遅延スロットとかあるんだっけ?
0074デフォルトの名無しさんNGNG
>>69
アセンブラ自体初めてならCASL IIは?
単純化されてる分だけ簡単だし、エミュレータも出回ってるし、
テキストも多い。

ただ、CASL自体は全く実用にはならないので少し慣れてきたあたりで
なんとかPowerPCの資料を探して頑張るしかない。
0075デフォルトの名無しさんNGNG
>>74
実は CASL II は少し取り組んだ事があります。実際の CPU で動かないので長続き
しませんでした。満足に取り組んだ訳ではないので、もう一度最初から勉強して
みようと思います。PowerPC の資料はある事はあるのですが、私にはまだ難しい
感じでした。読めるようになるまで CASL II で頑張ってみます。
0076デフォルトの名無しさんNGNG
資料があるなら、
レジスタ、アドレッシング、ビット演算、フラグ、分岐なんかの知識があれば
基本的な命令は難しくないと思うよ。大抵のCPUなら。
0077デフォルトの名無しさんNGNG
あ、gas(モトローラ系)の記法に慣れる必要はあるね。
0078デフォルトの名無しさんNGNG
資料(というか仕様書)はこれです。
「PowerPCアセンブラに関するスレ」にありました。

ttp://www.mot.co.jp/SPS/html/lit/pdf/MPCFPE32BJ_R0.pdf

同じスレのこれは読みました。
ttp://www-6.ibm.com/jp/developerworks/linux/021004/j_l-ppc.html

>>77
難関はそこかなと思っています。それとどのレジスタを何に使えば良いのか、
アドレッシングも怪しいです(全然ダメですね)。
0079デフォルトの名無しさんNGNG
gccの出力を見るなら
・スタックフレーム(ローカル変数)へのアクセスに使用しているレジスタ
・レジスタ変数として使用するために予約しているレジスタ
は把握しておいてからの方が読みやすいかも。
あと、最適化の度合いによっては
全然別物に見えるコードになっちゃったりするから。
0080デフォルトの名無しさんNGNG
コンピュータの構成と設計って本でMIPSを勉強するのがいいよ。
RISCに関する基本的なことは全部載ってる。
0081デフォルトの名無しさんNGNG
アセンブラで簡単なソース作ってアセンブルリスト見てるとおもしろいです。
初心者にもいい勉強になるんでないでしょうか。
0082デフォルトの名無しさんNGNG
適当に C のプログラムを書いて、逆汗。
0083デフォルトの名無しさんNGNG
なんで逆アセンブル?
コンパイラにアセンブラソースを吐かせりゃいいじゃん。
0084デフォルトの名無しさんNGNG
>>83
82はきっと機械語と照らし合わせてるんだよ。
0085デフォルトの名無しさんNGNG
アセンブラを吐けないコンパイラもありますから
0086デフォルトの名無しさんNGNG
皆さんどうもありがとうございます。Mac OS X のレジスタの割当が書いてある
ドキュメントを見つけました。スタックフレームやバイナリファイルフォーマット
も書いてあるので、これを参考にします。

http://developer.apple.com/documentation/DeveloperTools/Conceptual/MachORuntime/index.html

>>80
spim をダウンロードしてドキュメントを色々読んでみました。PowerPC は
mips にかなり似てる感じですね。SPARC も似ているのかなぁ。
0087デフォルトの名無しさんNGNG
lddqu 命令の使用感レポートキボンヌ
0088デフォルトの名無しさんNGNG
アセンブラはお腹を一杯にしてくれまつか?
0089デフォルトの名無しさんNGNG
食ってみろよ
0090デフォルトの名無しさんNGNG
(゚д゚)ウマー
0091デフォルトの名無しさんNGNG
(+д+)マズー
0092デフォルトの名無しさんNGNG
bcc5.5.1を使ってます。

以下のように
const char hello[] = { 'h','e','l','l','o' };
文字列を確保したとき、const配列なので、
読み取り専用セクションに配置されそうだ
と思いました。

読み取り専用セクションの名前は
.rdata でしょうか?

それから、このセクションは、
同じプログラムを複数起動したときに、
共有される(メモリ使用量が減る)のでしょうか?
0093デフォルトの名無しさんNGNG
.code
じゃないの?

>共有される(メモリ使用量が減る)のでしょうか?
されないかと
0094デフォルトの名無しさんNGNG
.text
0095デフォルトの名無しさんNGNG
AMD64向けに何かコード書いてる香具師はいないのか?
0096鳥取恥丘 ◆Dream/3P/. NGNG
  _
  /〜ヽ
 (。・-・) オレオレ
 ゚し-J゚
0097デフォルトの名無しさんNGNG
>>95
さっきゅんだけどなんか質問ある?
http://pc.2ch.net/test/read.cgi/os/1074144781/

なんかrubyとかの青木さんところでチョト紹介されてたぞ。
0098デフォルトの名無しさんNGNG
>>92
dumpbin.exeで確認できる
0099デフォルトの名無しさんNGNG
>>87
たとえば、256個づつのDWORD値を加算する場合、16バイトアライメントされていないとすると、
mov esi, srcadr
mov edi, destadr
mov ecx, 16
lp:
movdqu xmm0, [esi]
movdqu xmm4, [edi]
movdqu xmm1, [esi+16]
movdqu xmm5, [edi+16]
movdqu xmm2, [esi+32]
movdqu xmm6, [edi+32]
movdqu xmm3, [esi+48]
movdqu xmm7, [edi+48]
paddd xmm0, xmm4
paddd xmm1, xmm5
paddd xmm2, xmm6
paddd xmm3, xmm7
movdqu [edi], xmm0
movdqu [edi+16], xmm1
movdqu [edi+32], xmm2
movdqu [edi+48], xmm3
sub ecx, 1
jnz lp
とすると、FP_MOVポートと、MMX_ALUが別ポートなので、ループによってアウトオブオーダーで
処理が折り込まれて、レイテンシがある程度隠蔽されるので、高速化が出来るのですが、
movdqu のペナルティ遅延がひどくて、アライメントの合っている処理(MOVDQA)と比べて、
30%くらい遅くなってしまう場合があります。
(更に言うと、128ビットオペランドでアライメントが合っていれば、レジスタに入れなくても直接演算できる)
そこに、lddquをそのままmovdquと置換(ただし、ロード側のみ、ストアは代えられない)すると、15%位、スループットが改善するようです。
まあ、アライメントをうまく合わせられればそっちのほうが良いと思います。お手軽高速化用ですね。
010099NGNG
>>99
sub ecx,1
の前に、
add esi, 64
add edi, 64
を入れるの忘れてました。スマソ。
0101デフォルトの名無しさんNGNG
BCDってなんのためにあるんですか?
0102鳥取恥丘 ◆Dream/3P/. NGNG
  _
  /〜ヽ
 (。・-・) 10進数の計算とか
 ゚し-J゚
0103デフォルトの名無しさんNGNG
>>102
それはそうなんですが、1バイトで10進数の一桁を
表現することの意味が分りません。具体的な使用例
見たいなのがあれば教えて下さい。
0104デフォルトの名無しさんNGNG
4bitで一桁ですね。
0105デフォルトの名無しさんNGNG
>>103
電卓
0106デフォルトの名無しさんNGNG
COBOLの数値表現形式の一つですので、
アセンブリ言語でBCDをサポートすると実行を高速化できます。

COBOLは、銀行などの事務計算によく使われますが、
そういうアプリケーションでは小数を扱ったときの桁落ちが許されません。
そんなとき10進数で演算できると便利なのです。
1%の金利(=0.01)というのを2進数で表してみるとわかります。
0107デフォルトの名無しさんNGNG
>>106
分り易い解説ありがとうございます。
0108デフォルトの名無しさんNGNG
昔のアーケードゲームのスコアとかではよく使われたもんだが>BCD
0109デフォルトの名無しさんNGNG
Intel「Pentium® 4 プロセッサおよびインテル Xeon プロセッサ
最適化命令」のレイテンシ一覧で

 ADDPD レイテンシ7、スループット2、実行ユニット MMX_SHFT,FP_MISC
 DIVPD レイテンシ4、スループット2、実行ユニット MMX_SHFT

ってありますが、これ間違いですよね?
0110デフォルトの名無しさんNGNG
Intel「Pentium® 4 プロセッサおよびインテル Xeon プロセッサ
最適化命令」のレイテンシ一覧で

 ADDPD レイテンシ7、スループット2、実行ユニット MMX_SHFT,FP_MISC
 DIVPD レイテンシ4、スループット2、実行ユニット MMX_SHFT

ってありますが、これ間違いですよね?
0111109NGNG
連カキコ、すいません。
0112デフォルトの名無しさんNGNG
電卓のCPUはBCD計算に特化されているものだよー。

なにしろ、4ビットマイコンのくせに16桁のBCDの加減算を1命令で
できたりする(w
某社の16ビットポケコンは86じゃ遅いから、専用のBCD演算コプロを
積んでいたりする。さすが電卓屋。
0113デフォルトの名無しさんNGNG
少なくとも、
"Intel Pentium 4 and Intel Xeon Processor Optimization"
http://www.math.grin.edu/~walker/courses/211.fa01/pentium-4-optimization.pdf
のTable C-2によると、

ADDPD xmm, xmm 4 2 FP_ADD
...
DIVPD xmm, xmm 62 62 FP_DIV

になっている。
0114デフォルトの名無しさんNGNG
>>110
日本語と英語のマニュアルでは、CVTxxx命令、割り算命令が違ってるね。
間違っているのは日本語のマニュアルの方みたいだけど。
0115デフォルトの名無しさんNGNG
>>110
日本語マニュアルは、急いで作ってるのかタイプミス多いし、
コピペして作ってあるところが多くて、
ひとつ間違ったら連続で間違っている場合が結構ある。
(だから逆に間違いが分かりやすいという話も有る・・・)
それと、Xeon込みで無い時の
「Intel Pentium4プロセッサ最適化リファレンスマニュアル」
だと、ADDPS,DIVPSのレイテンシ、スループットには、
正しい値が記述してあるので、版を更新する際にエンバグしたと思われ。

それでも、AMDと違ってちゃんと日本語マニュアル作ってるだけ全然良い。
ただ、
http://www.intel.com/technology/itj/q12001/pdf/art_2.pdf
みたいな周辺資料の日本語版が無いのはなんでだろう…。
突っ込んだ最適化をするときは結構重要なのだけど。
0116鳥取恥丘 ◆Dream/3P/. NGNG
  _
  /〜ヽ
 (。・-・) 日本語のPDFにHTの使い方書いてないよね・・・
 ゚し-J゚
0117デフォルトの名無しさんNGNG
>>115
それ(art_2)の日本語Web版は以前あったよね。
今はなくなってしまったみたいだけど。(こんな事もあろうかと、俺はHDDに保存しておいた)
日本スタッフはもっとしっかりしろ!ですな。
0118デフォルトの名無しさんNGNG
Cの?演算子(三項演算子だっけ?)はcmov系と
相性がいいだろうと思ってたんだけど、
bcc5.5.1では-6オプションを付けても
comvを使ったコードを吐きません
他のコンパイラではどうなのでしょうか?
そもそも相性が悪い?
0119デフォルトの名無しさんNGNG
>>118
そもそも bcc5.5.1 は cmov 系を使ったコードを吐くの?
0120デフォルトの名無しさんNGNG
BCCの最適化に多くを望んではいけない。
0121デフォルトの名無しさんNGNG
int foo(int a){
 return a ? 100 : 300;
}

をgcc -O2にかけたら、

foo:
  pushl %ebp
  movl  %esp, %ebp
  xorl  %eax, %eax
  cmpl  $0, 8(%ebp)
  sete  %al
  decl  %eax
  andl  $-200, %eax
  addl  $300, %eax
  leave
  ret

こんなの吐きました。
0122デフォルトの名無しさんNGNG
>>121
うちのgccではこうなるけど。

foo:
pushl %ebp
movl $100, %eax
movl %esp, %ebp
movl 8(%ebp), %edx
popl %ebp
testl %edx, %edx
movl $300, %edx
cmove %edx, %eax
ret

多分 -march を指定する必要があるんじゃない。
0123デフォルトの名無しさんNGNG
-O2 でもスタックフレーム確保してるの? gcc って。
0124デフォルトの名無しさんNGNG
-O3 でもするぞ。明示的に殺さなきゃだめぽ。
0125デフォルトの名無しさんNGNG
>>123
禁止しなきゃ問答無用で確保したような気がする。
0126デフォルトの名無しさんNGNG
だから糞なんだな
0127デフォルトの名無しさんNGNG
てこたぁ、別フラグなのかな。
分かりやすいっちゃぁ分かりやすいけど、
面倒いっちゃぁ面倒いな。
0128デフォルトの名無しさんNGNG
-fomit-frame-pointer を指定するナリ。
0129デフォルトの名無しさんNGNG
-O also turns on -fomit-frame-pointer on machines where doing so
does not interfere with debugging.

って書いてあるのはどうなの?
0130デフォルトの名無しさんNGNG
mov ecx, DWORD PTR [esp+4]
mov edx, 100
mov eax, 300
cmp ecx, 0
cmovne eax, edx
ret

IntelC++7.1
0131デフォルトの名無しさんNGNG
こんなのでた。
@VC++7.1

mov eax, DWORD PTR _a$[esp-4]
neg eax
sbb eax, eax
and eax, -200 ; ffffff38H
add eax, 300 ; 0000012cH
ret   0

P4最適化すると4行目が
and al, 56
になる。
パーシャルレジスタストールがないからか。
0132デフォルトの名無しさんNGNG
P4では、130の方が倍速いな。
0133NASM初心者NGNG
NASMを使い始めた初心者です。
NASMはすばらしいですね。
使っている皆さんよろしくご指導下さい
0134デフォルトの名無しさんNGNG
OpenWatcom1.2

   test eax,eax
   je L$1
   mov eax,100
   ret
L$1:
   mov eax,300
ret

かつての最適化伝説も今やダメポ   
0135鳥取恥丘 ◆Dream/3P/. NGNG
>>134
マジ?
0136デフォルトの名無しさんNGNG
>>134
レジスタ呼び出しなので a = eax ね。
0137デフォルトの名無しさんNGNG
やっぱvc、intel-cがいい感じ屋根
0138デフォルトの名無しさんNGNG
$gcc -O99 -march=pentium4 -S -fomit-frame-pointer test2.c
foo:
cmpl $1, 4(%esp)
sbbl %eax, %eax
andl $200, %eax
addl $100, %eax
ret
.size foo, .-foo
.ident "GCC: (GNU) 3.4.0 20040112 (experimental)"
3.4だとこんなんなりました。
0139デフォルトの名無しさんNGNG
ところでPC-UNIX界の人(例えばlinus)ってGCCの最適化に文句垂れるの
多いけど、だったら自分らで少しは開発に貢献すればいいのにな。
カーネルのつまらないチューニングなんかより、これの方がよっぽど
価値がありそうなもんなのに。
0140デフォルトの名無しさんNGNG
注文つけた奴が貢献しなくちゃいけないってことはない
そんなこと行ったらLinuxの一般ユーザーは、全員
羊のように大人しくしなくてはならなくなる
0141デフォルトの名無しさんNGNG
ライナス新じゃったらもうだれもよりつかないね>Linux
かわいそうに
0142デフォルトの名無しさんNGNG
>>139
餅は餅屋。って事で、
コンパイラの事はコンパイラ屋さんに任せておくのが
一番確実なのですよ。
0143デフォルトの名無しさんNGNG
>>139
そういう「嫌なら使うな」式の思考停止すんなって
0144デフォルトの名無しさんNGNG
Borland CとDigital Mars Cの結果うpキボンヌ
0145デフォルトの名無しさんNGNG
foo:
cmpl $0, 4(%esp)
movl $300, %edx
movl $100, %eax
cmove %edx, %eax
ret
gcc-3.3.3 -Os -fomit-frame-pointer -march=pentium4
オプションやバージョンで結構変わるみたい。
0146デフォルトの名無しさんNGNG
gccもいい感じやね。
gccが16ビットコードはいてくれればマイ日曜PG的には最高
なんだよなー
0147デフォルトの名無しさんNGNG
>>146
つーかOpenWatcomが期待外れだったつーか。
じつはデバッグモードだったとかいう展開きぼん。
0148デフォルトの名無しさんNGNG
fsレジスターつかうコートはくのは
どのこんぱいらー?
0149デフォルトの名無しさんNGNG
検索しろ
0150デフォルトの名無しさんNGNG
同じレジスタを連続して使うのはあまり賢くないような。
0151デフォルトの名無しさんNGNG
・Digital Mars 32bit (dmc -mn -6 -o+all -c foo.c)
_foo:
  cmp     dword ptr 4[esp],1
  sbb     eax,eax
  and     eax,0c8H
  add     eax,64H
  ret

・Digital Mars 16bit (dmc -ms -2 -o+all -c foo.c)
_foo:
  push    bp
  mov     bp,sp
  cmp     word ptr 4[bp],1
  sbb     ax,ax
  and     ax,0c8H
  add     ax,64H
  pop     bp
  ret

・Open Watcom 32bit (wcc386 -6r -ox foo.c)
>>134

・Open Watcom 16bit (wcc -2 -ox foo.c)
foo_:
  test    ax,ax
  je     L$1
  mov     ax,64H
  ret
L$1:
  mov     ax,12cH
  ret
0152鳥取砂丘 ◆Dream/3P/. NGNG
Digital Mars 32bitのコードに寒気を覚えた。
折れの脳内トランスレータじゃとてもそんなコード吐けない orz
0153デフォルトの名無しさんNGNG
なんか後付けっぽく嫌なんだが、おれが考えなし
に書いたらdmcのコードにする。

ここの常駐人もだいたいそうだと思うんだが
0154デフォルトの名無しさんNGNG
こうして見るとOpenWatcomの遅れぶりがめだつな
関数呼び出しを定義できるくらいしか、面白みないな

コードジェネレータのソース読んでみたけど全然
わからんし・・・
0155鳥取砂丘 ◆Dream/3P/. NGNG
最適化ほとんどできないヘタレプルグラマなんでorz
0156デフォルトの名無しさんNGNG
コテは放置が基本だorz
0157デフォルトの名無しさんNGNG
つか鳥取砂丘って共有コテって聞いたけど?
0158デフォルトの名無しさんNGNG
orzてなに?
0159デフォルトの名無しさんNGNG
あ、わかりました。一秒長く考えるべきでした。
0160デフォルトの名無しさんNGNG
orzてなに?>>159
0161デフォルトの名無しさんNGNG
http://orz.jp/
0162デフォルトの名無しさんNGNG
>>153
150のとおり、依存関係バリバリのコードは
賢くないよ。レジスタに使用に制限があるなら別だが。
0163デフォルトの名無しさんNGNG
↑「に」が1個多いね
0164デフォルトの名無しさんNGNG
主張はコードでよろしく。cmovはだめだかんね
0165デフォルトの名無しさんNGNG
なんでcmovccはだめなの?
0166デフォルトの名無しさんNGNG
はっきり言ってこちらが聞きたい。
なぜ使ってよいのかと。
0167鳥取砂丘 ◆Dream/3P/. NGNG
AMD64ならcmovバンバンOKですYO?
0168デフォルトの名無しさんNGNG
あーでももともとはcmovの話だったのかー御免
じゃ使ってもいいよな。>>166も俺が悪かった

でも俺はcmovが使いたくないし、たぶんdmcのコードを
使うと思う
0169デフォルトの名無しさんNGNG
こんなやり方が正しいがわかりませんが、それぞれ10万回ループさせて
クロックを計測してみました。(引数ロードとret部分は削除)

lp1:
mov edx, 100
mov eax, 300
cmp ebx, 0
cmovne eax, edx
sub cx, 1
jne lp1

lp2:
neg eax
sbb eax, eax
and eax, -200 ; ffffff38H
add eax, 300 ; 0000012cH
sub cx, 1
jne lp2

Pentium4でlp1は真でも偽でも大体20万クロック、lp2が27万クロックでした。
0170デフォルトの名無しさんNGNG
お手数じゃなかったらこれ計ってみて
L1が.codeにくる感じで

.code
mov eax, [esp+4]
cmp eax, 1
sbb eax, eax
mov eax, [L1 + 4 + eax*4]
ret

align 4
L1 dd 300, 100

0171デフォルトの名無しさんNGNG
>>121 をbcc32でコンパイル
_foo proc near
; int foo(int a){
@1:
push ebp
mov ebp,esp
; return a ? 100 : 300;
cmp dword ptr [ebp+8],0
je short @2
mov eax,100
jmp short @4
@2:
mov eax,300
; }
@5:
@4:
pop ebp
ret
_foo endp

OpenWatcomもBCCには何とか勝った模様。
0172デフォルトの名無しさんNGNG
bcc...
0173デフォルトの名無しさんNGNG
>>169
lp1は入力ebxと出力eaxが別々で、入力ebxはずっと固定で出力eaxに依存していないのに、
なぜlp2は入力と出力が同じeaxで、入力が出力に依存しているのか。
なぜループカウンタcxで10万回回せるのか疑問におもた。
0174デフォルトの名無しさんNGNG
lp2の方は、cmovやjccを使わない方法だから使われるレジスタは
eaxだけになっちゃうよ。
cxはおかしいな。
0175デフォルトの名無しさんNGNG
やってみた
アスロン 1GHz(サンダーバード)で lp1が30万、lp2が40万だった

;MASM32を使用
;ml /c /coff test.asm
;link /subsystem:console test.obj

.686
.model flat,stdcall
option casemap:none
include windows.inc
include user32.inc
include kernel32.inc
includelib user32.lib
includelib kernel32.lib

.data
format db "%010u",0dh,0ah,0
.code
0176デフォルトの名無しさんNGNG
;続き
start proc uses ebx edi
LOCAL buf[16]:BYTE,readsize,stdout

invoke GetStdHandle,STD_OUTPUT_HANDLE
mov stdout,eax

rdtsc
mov edi,eax
mov ecx,100000
lp1:
mov edx, 100
mov eax, 300
cmp ebx, 0
cmovne eax, edx
sub ecx, 1
jne lp1
rdtsc
sub eax,edi
invoke wsprintf,ADDR buf,ADDR format,eax
invoke WriteConsole,stdout,ADDR buf,12,addr readsize,NULL

0177デフォルトの名無しさんNGNG
;続き
rdtsc
mov edi,eax
mov ecx,100000
lp2:
neg eax
sbb eax, eax
and eax, -200 ; ffffff38H
add eax, 300 ; 0000012cH
sub ecx, 1
jne lp2
rdtsc
sub eax,edi
invoke wsprintf,ADDR buf,ADDR format,eax
invoke WriteConsole,stdout,ADDR buf,12,addr readsize,NULL

invoke ExitProcess,0
start endp
end start
0178169NGNG
>>173
cxは間違いです。
ecxに書き直してもう一度やってみました。
結果はlp1が30万、lp2が70万でした(値が安定しなかったのでHTをOff)
0179デフォルトの名無しさんNGNG
ということで、cmovを吐くコンパイラの勝ちということで
終了
0180デフォルトの名無しさんNGNG
cmovて何?
Pentiumにあた?
0181デフォルトの名無しさんNGNG
↑シーラカンス
0182デフォルトの名無しさんNGNG
プログラム言語知識まったく無しなんだけど逆アセンブラ勉強したいのだけど
初心者でもわかる本教えて下さい
0183デフォルトの名無しさんNGNG
本なんてありません
0184デフォルトの名無しさんNGNG
いまやP6以降のプロセッサが主流なのに、
頑なに元祖386由来の命令に拘る理由って
なんなんでしょ>コンパイラ作ってる人
0185デフォルトの名無しさんNGNG
>>182
わざわざ本を買う必要はありません。
初心者が勉強する程度なら、ネット上の解説や資料で十分。
0186デフォルトの名無しさんNGNG
>>184
ここにいる素人には永遠にわからんよプゲ
0187デフォルトの名無しさんNGNG
初心者の勉強に最適なネット上の解説や資料ってどこにありますか?
0188デフォルトの名無しさんNGNG
ハカーキタ━━━━━━(゚∀゚)━━━━━━ !!!!!
0189デフォルトの名無しさんNGNG
>>187
>>187=>>182だよね?
逆アセンブラということは、恐らくゲームの解析とかだろうから、
とりあえず、下のサイトへ。
色々な資料やツールへのリンクもあるし。

http://gamereverserz.cjb.net/
0190118NGNG
ところどころわからないのがある
(cmovを使う使わないとか依存がどうこうとか)
のですが、cmov系の勝ちで終了ということだそうで
みなさんありがとうございます

>>119
bcc5.5.1 が cmov 系を使ったコードを吐くのは
私はみたことないです
cmovに限らずmmxやxmmレジスタを使うコードも
みたことがないです
他のコンパイラはきちんと使うんでしょうか…

>>171
bcc32のコードの例示わざわざありがとうございます
わたしがするべき苦労でした

ところで、ゼロがどうかをチェックするところで
test系 gcc, OpenWatcom
cmp系 gcc, IntelC++, DigitalMars32
とわかれているようですが、ここって何か
意味がありますか?たんなるコンパイラのクセ?
0191デフォルトの名無しさんNGNG
文章の真意がそのカッコの中に書かれたことにあると思い込むのは
間違いですね。本当のことは行間にかかれているのに。
0192デフォルトの名無しさんNGNG
>>186
教えてください。Pen3,4と指定してコンパイルする分には
cmovを使うことになんの問題もないように思いますが。
0193デフォルトの名無しさんNGNG
?
cmpもtestもそれぞれ意味があって使いわけてる
ように見えるけど
0194デフォルトの名無しさんNGNG
そろそろスレ違いな話題はやめましょう。
0195190NGNG
>>130で IntelC++7.1 は
cmp ecx, 0
とあるけど
test ecx,ecx
ではないのは何故なんでしょうか?
どんな使い分けの意味があるのかなと思いました

>>176 で
sub ecx, 1
とあって
dec ecx
にしないのはレジスタの影響が少ないので
subの方が推奨されるそうですが、
cmpとtestもそんな意味があるのでしょうか?
0196デフォルトの名無しさんNGNG
inc/decはフラグのストールがある
0197デフォルトの名無しさんNGNG
スレ違いじゃないと思うから続けるべ

>>195
ん。見落としてた。正直理由はわかりません

>>cmpl $0, 4(%esp)
  
こういうのはtestにできないって事ぐらいの意味
0198デフォルトの名無しさんNGNG
>>192
わざわざ上げんな。晒してるつもりか?
0199デフォルトの名無しさんNGNG
>>198
ba-ka
0200デフォルトの名無しさんNGNG
メール欄に書き込むのが面倒なだけじゃねーの。
0201デフォルトの名無しさんNGNG
249 マロン名無しさん sage 04/02/28 14:25 ID:???
●やさしい煽り学

文字で何と書いてあるかではなく書いた人間が一体何を狙って
そこにその文章を書いたのかを考える。
文字自体はほとんど読む必要がない。
なぜなら彼の本当の狙いは文字としては書かれていない。
狙いが分かったら後はそれを失敗させる。

? 「狙い」の典型的なパターン
場の雰囲気を悪化させたい。
誰かのやる気を無くさせたい。
誰かと誰かの関係を悪化させたい。
煽りに反応させることで相手の人望を失わせたい。
それらを為すことで自己顕示したい。

煽る人間はその行為によって何かが変わって欲しいと考えている。
従って先方からしてみれば反論だろうと罵倒だろうと
とにかく誰かから何らかの反応を引き出せたら成功であるということに注意しなくてはならない。
最も多くのケースを効果的に解決できる手段は、安易ではあるが、「全員一致での無視」である。
もし不幸にも煽りに対して真面目に反応してしまう人間が身内にいるなら
何とかしてその人間を黙らせなくてはならない。
そういった中途半端な味方は煽り本人より厄介である。
また、煽りという手法をよく知る人間にとっては、
煽りに対して真面目に反応している人間というのは極めて無様に写ることにも注意すべきである。
もしあなたが既に人望を持つような立場の人間であるなら、
全ての煽りに対して常に冷酷に対処しなくてはならない。

0202デフォルトの名無しさんNGNG
>>201
ヘタレ
0203デフォルトの名無しさんNGNG
最近このスレ荒れやすくなったと思わないか?
0204デフォルトの名無しさんNGNG
春が近いからこんなもんだろう。
他のスレも変なの増殖してるっぽいし。
0205173NGNG
俺が言いたかったのは、lp1とlp2では計測している時間の意味が全く異なるって事。
lp1が計測しているのは三項演算子のスループット。
lp2ガ計測しているのは三項演算子のレイテンシ。
lp2と同じ意味(レイテンシ)でlp1を計測するのであれば、
次のように三項演算子の出力が次の三項演算子の入力になるようにしなければならない。

lp1:
cmp eax, 0
mov edx, 100
mov eax, 300
cmovne eax, edx
sub ecx, 1
jne lp1
0206153NGNG
俺のせいで荒れちゃったのかな。
マジで誤ったつもりなんで、まったり進攻にもどって下さいよ

まぁそれは別として、コンパイラの吐くコードの品評は
なかなか面白いな
0207153NGNG
s/進攻/進行/g
0208デフォルトの名無しさんNGNG
>>205
上にあったICCの出力を参考にしてるんじゃない?

mov ecx, DWORD PTR [esp+4]
mov edx, 100
mov eax, 300
cmp ecx, 0
cmovne eax, edx

入力がecx(あれ?)で出力がeaxになってるよね。
0209デフォルトの名無しさんNGNG
>>195
Pentium4の場合、cmpはポート0とポート1どちらでも発行できるが、
testはポート0でしか発行できないから。
0210195NGNG
>>209
む、むずかしい…
ポート0とポート1のどちらでも、とか
ポート0のみ、とかって、つまり、
計算する部品はいくつかあるけど
それらの部品には対称性がないので
どの部品でも計算できるcmpの方が
特定の部品でしか計算できないtestよりも
都合がいいということでしょうか?

それから、もしよろしければ、ポートとかについて
参考サイトとか参考pdfとか教えてください
0211デフォルトの名無しさんNGNG
a:
rdtsc
mov dword ptr t1, eax
mov dword ptr t1 + 4, edx

cmp eax, 0
mov edx, 100
mov eax, 300
cmovne eax, edx

rdtsc
mov dword ptr t2, eax
mov dword ptr t2 + 4, edx

b:
rdtsc
mov dword ptr t3, eax
mov dword ptr t4 + 4, edx

neg eax
sbb eax, eax
and eax, -200
add eax, 300

rdtsc
mov dword ptr t3, eax
mov dword ptr t4 + 4, edx

===================

a=88clock、b=92clock。a,bの順番を逆にしても同じ。
Xeon HT-OFF
0212211NGNG
○t4 + 4
×t3 + 4
0213デフォルトの名無しさんNGNG
クロックはかるまでも無く、cmov使った方が当たり前に
速いと思うんだけど

ついでに言うとwinなりlinuxなりではかっても、参考値
ぐらいにしか思えない
0214デフォルトの名無しさんNGNG
↑バカ?
0215デフォルトの名無しさんNGNG
↑バカ
0216デフォルトの名無しさんNGNG
>>210
http://developer.intel.com/design/pentium4/manuals/248966.htm
これの1-18ページにPentium4のポートの説明図が書いてある。
cmpはADD/SUBに属する命令。testはLogicに属する命令。

このマニュアルを見ててマニュアルの間違いに気が付いた。
1-17ページにはポート1のALUでもlogic or branchが実行できるみたいに書いてあるけど、
これは間違い。
0217デフォルトの名無しさんNGNG
JPEG/MPEGでおなじみのDCT演算をSSEで組んでみました。小数点演算はナシで、
wordの整数演算のみで組んでみたのです。バタフライ演算とかいうやつですね。
100万回ループさせてタイムを計ると、mmxで真正直にDCTを計算させたものより
4割近く遅いし、コードもデカイ。いいことなしです。

さて問題です。どうすればPen4でDCTが速くなるでしょうか?

1. コードが増える整数演算は止め、固定小数点あるいは浮動小数点演算を行う。
2. 同様にコードが増えるバタフライ演算をやめ、真面目にDCTを実行する。
3. バタフライ演算かつ整数演算でも早くなる。精進しろ。

3案のうちどれが適切でしょうか。ただし、根拠のない3はお断りです。ソースコードがあれば参考にしたいですね。
0218デフォルトの名無しさんNGNG
まずお前がコード提示しろ
0219デフォルトの名無しさんNGNG
>>216
4.ここにある「ストリーミング SIMD 拡張命令2 (SSE2) を使用した逆離散コサイン変換」を
 参考にしてみる。
http://www.intel.com/jp/developer/download/index.htm
0220デフォルトの名無しさんNGNG
宿題スレのノリだな
0221デフォルトの名無しさんNGNG
>>213
分岐予測が当たる場合は、cmovよりは速いから全ての代入のための分岐を
cmovで置き換えるのはいただけない
0222デフォルトの名無しさんNGNG
突然一般論を持ち出すな

いまの話題になにも分岐予測に関する前提条件がないわ
0223デフォルトの名無しさんNGNG
・・・春が近いな
0224デフォルトの名無しさんNGNG
              ry、
             / / }
           _/ノ.. /、
           /  <   }
      ry、     {k_ _/`;,  ノノ パンパン
    / / }      ;'     `i、 
   _/ノ../、   _/ 入/ /   `ヽ, ノノ
  / r;ァ  }''i" ̄.   ̄r'_ノ"'ヽ.i   ) ―☆
 {k_ _/,,.'  ;.  :.      l、  ノ  
    \ `  、  ,i.    .:, :, ' / / \
     ,;ゝr;,;_二∠r;,_ェ=-ー'" r,_,/   ☆


【ラッキーレス】
このレスを見た人はコピペでもいいので
10分以内に3つのスレへ貼り付けてください。
そうすれば14日後好きな人から告白されるわ宝くじは当たるわ
出世しまくるわ体の悪い所全部治るわでえらい事です


0225210NGNG
>>216
Figure 1-4
Execution Units and Ports int the Out-Of-Order Core
の図をみました
おっしゃっていたのはここのことだったんですね

ところでこの図では、Por1のFP_Executeのところに
MMXの記述がありますが、ここには
SSE/SSE2/SSE3も含まれているのでしょうか?
1-17に
port 1 can dispatch either one floating-point
execution (all floating-point operations except
moves, all SIMD operations) μop
とあります
0226デフォルトの名無しさんNGNG
>>217
SSEで、単に組んでも、MMXよりスループット、レイテンシ共に遅いので、高速化は出来ない。
>>216さんが書いている資料などを見て、アウトオブオーダーで効率よく
命令ユニットが平行動作するようなコードを書いて初めて、SSEなりの利点が出る。
また、DCT演算は、整数より、実数のほうが早く実行できる可能性が高い。
(有効制度が結構必要だからね)ので、実数演算がお勧め。
ちなみに、アウトオブオーダーを使った高速化を突き詰めてしまうと、
AMD64ではポートの構造が違うので、殆どの場合相当に遅くなるので注意。
0227デフォルトの名無しさんNGNG
386以降で4バイトのnop相当ってないですか?
nop4つでもかまわないんですが。
0228デフォルトの名無しさんNGNG
8D 44 20 00 : lea eax,[eax+0]
0229デフォルトの名無しさんNGNG
Opteronのマニュアルを見たら、コードパッディングの方法にこんなのがあったけど、
 66 66 66 90 (NOPの前に66hプリフィックスを3つ重ねる)
これってどんなx86プロセッサでも問題なく動くの?
0230デフォルトの名無しさんNGNG
nop
nop
nop
nop

より

lea eax,[eax+0]

とかが使われてるのは何でだろう?逆アセがすっきり
するので、見やすいけど。

>>229
8086、80286不可
0231デフォルトの名無しさんNGNG
プロテクトモードならOKなのか?
0232デフォルトの名無しさんNGNG
>>230
そりゃ、デコーダの消費も実行ユニットの消費も少なくて済むからでしょう
0233デフォルトの名無しさんNGNG
http://www.amd.com/us-en/assets/content_type/white_papers_and_tech_docs/25112.PDF
こっちのP.85にはNOPの前に複数の66hプリフィックスを重ねろとか書いてあるのに、

http://www.amd.com/us-en/assets/content_type/white_papers_and_tech_docs/24592.pdf
こっちのP.86には同一グループのプリフィックスを複数指定した場合は、不定であると書いてある。
Pentiumのマニュアルにも同じ事が書いてあった。
0234デフォルトの名無しさんNGNG
ありがとうざいます。
プリフィックスについてはよくわからないので、
lea使ってみます。
0235鳥取砂丘 ◆Dream/3P/. NGNG
pause命令って2バイトnopなんだよね。アレプレフィックス一杯つけたらどうなるんだろう
0236デフォルトの名無しさんNGNG
winXP sp2ではPAEモード(64Gのメモリが使えるやつ)がデフォルトになるの?
もしそうなら、パフォーマンスが落ちたりしないのかな
0237鳥取砂丘 ◆Dream/3P/. NGNG
PAEがデフォルトになるのは64bit版だけじゃないの?
0238名無し@沢村NGNG
>>217
DCT演算ならCASL�Uで業務用アプリを組んだときに、使ったことがあるよ。
0239236NGNG
ttp://www.microsoft.com/japan/msdn/windows/windowsxp/securityinxpsp2.asp
ここの「SP2でのメモリ保護」をみるとSP2で搭載される"実行保護"とやらはNXビットを使ったもののようです。
それでAMDのAthlon64の資料を見るとレガシーモードでは、NXビットはPAEモードのPage Table Entry(PTE)にしか無いんですよね。
(非PAEの4kページPTEには空きビットがないため?)
なのでPAEモードがデフォルトになるのかなと思ったのですが。
0240鳥取恥丘 ◆Dream/3P/. NGNG
AMD64のPAEでしか使えないから32bitプロセッサ積んでるなら関係ないんじゃない?
0241デフォルトの名無しさんNGNG
>>239
レガシーモードのページング方式はK8からいくつか追加されたけど、
従来型の4kニ階層のやり方ではNXビットなど置くスペースはPTEにはないかと。
XPSP2での拡張は新しいページング方式と一緒に使わなくてはならない。
物理メモリ搭載量が例え4Gよりはるかに少なかったとしても。
0242デフォルトの名無しさんNGNG
っていうか、NXビットってCPUが見るフラグでしょ。
置く置かないの問題ではないよね。
0243デフォルトの名無しさんNGNG
>>242
いやだからCPUのプログラムインタフェイスの設計の問題として
0244AMD命NGNG
これはインテルの陰謀に違いない。
K8でのみPAEをイネーブルにしてK8のパフォーマンスを落とすつもりだ。
0245デフォルトの名無しさんNGNG
ページディレクトリが2→3階層になることで
どれぐらいパフォーマンス落ちるのかな。
自作板だと元麻布って人がPAEでパフォーマンスが落ちる
なんて書いてるから、そう思ってるひとも多いだろうけど。
メモリ空間が広大になったからといって、それらをランダムに
アクセスするわけじゃなくて、ある局所的な領域をなんども
参照するだけだろうからそんなに負担にもならないような。
まあ、こればっかりはカーネル弄ってるひとしか分らないか。
0246デフォルトの名無しさんNGNG
>>243
IA-32eの資料では、ページエントリの63bit目をReservedにしてあるよ。
多分将来NXビットが入ると思われ。
0247デフォルトの名無しさんNGNG
ということは、AMD64かIA-32eなCPUではPAEをイネーブルにして、それ以前のCPU
ではディセーブルになるのかな。
0248デフォルトの名無しさんNGNG
ということでは。
WinXP sp2でいうAMD64のPAEは新しい64bit長のエントリを持つもの。
これまでのPAEとは違う。
0249デフォルトの名無しさんNGNG
これまでもPAEのときはエントリは64bitだったよね。
上位ビットは大部分が使われていないけど
0250デフォルトの名無しさんNGNG
>>245
自作板では元麻布の記事は信用されていませんが。

【淫厨】妄想ライター元麻布春男を語るスレ【信者】
http://pc3.2ch.net/test/read.cgi/jisaku/1077161594/
0251デフォルトの名無しさんNGNG
>>248
あまり変わってないと思うが。
NXビットとの追加と物理アドレスが36bitから51bitになっただけだよね。
あとPAEじゃないけどPSE-36がPSE-40(?)になってる。

>>245
IA-32インテルデベロッパーズ・マニュアル下巻の3-29ページによるとPAEの
ページ・ディレクトリ・ポインタ・テーブル・エントリ(PDPE)はキャッシュされないみたい。
ひょっとしたらPDPE用のTLBも無いのかもしれない。
だとすると、かなり遅くなるような気がする。
0252デフォルトの名無しさんNGNG
>>251
もともとTLBって、最下層のエントリしか保持してないよね。
0253デフォルトの名無しさんNGNG
>>252
>プロセッサは、直前に使用されたページ・ディレクトリ・エントリとページ・テーブル・エン
>トリをトランスレーション・ルックアサイド・バッファ(TLB) というオンチップのキャッシュ
>に記憶する

って>>245の資料に書いてあるけどー
0254デフォルトの名無しさんNGNG
そうなの?
さっきのやつの3-33ペ−ジに
「プロセッサは、直前に使用されたページ・ディレクトリ・エントリとページ・テーブル・エン
トリをトランスレーション・ルックアサイド・バッファ(TLB) というオンチップのキャッシュ
に記憶する」
って書いてあるんだけど。
0255デフォルトの名無しさんNGNG
ごめん、>>251の資料の間違い
0256デフォルトの名無しさんNGNG
かぶったw
0257251&254NGNG
思いっきりかぶっちゃったね(´ー`)
0258デフォルトの名無しさんNGNG
xor eax, eax
mov al, byte ptr[ecx]

と、

movsx eax, byte ptr[ecx]

ってどっちが速いんでしょうか
サイズは前者が4、後者が3ですけど
0259デフォルトの名無しさんNGNG
>>258
xor+movの方が速かったはず。
検証してくれる人よろしく。
0260デフォルトの名無しさんNGNG
っていうか xor するなら movzx じゃね?
0261デフォルトの名無しさんNGNG
そうです
movzxの間違いです…

え、
あーいや、なんか認識間違いっぽいです
符号拡張して欲しいし。
つーことはxorに変換するっての間違ってるわ、これ(w
movsxしかないじゃん

すんません終了〜
0262デフォルトの名無しさんNGNG
>>261
しかし禿げしく気になるので試してしまった。
Pen4 2.8G、XP ProSP1、BCC5.6.4

ループのアンロールは16回

movzx = 9619
xor = 9564

movzx = 9297
xor = 9615

movzx = 9680
xor = 9333

Pen4ではあまり差がない。Partial Register Stallがないせいか。
Pen3だと結構差が出る予感なんだが。
0263デフォルトの名無しさんNGNG
classic-pentiumあたりならxor+mov推奨
pentiumiiiあたりならmovzx推奨
0264デフォルトの名無しさんNGNG
>262
xorやsubでクリアした後は、パーシャルレジスタストールは起こらないよ
0265デフォルトの名無しさんNGNG
>>264
そうでしたかスマソ。そしたらP3環境でも似たような結果?
0266デフォルトの名無しさんNGNG
P3とP4の速度差は、ペナルティではなくて、デコーダと
マイクロアーキティクチャの違いによるものでしょう。
(P3のデコーダの性質上の物でもあるかな?)
MOVZX非対応のCPUの場合XORを使う手法が必須ですが、
それ以外では、原則MOVZXやMOVSXで良いでしょう。
0267デフォルトの名無しさんNGNG
いまどきmovzx非対応CPUって・・・
0268デフォルトの名無しさんNGNG
movzxは386で搭載されたから、32ビットOS上でなら無条件で使えるでしょ。
ペンティアムはmovzxが遅いので、ターゲットのCPUがペンティアム2以降かどうかで、
どっちにするか決めればいいんじゃない。
0269デフォルトの名無しさんNGNG
仮に、movsxがなかった場合はどうすんの?
0270デフォルトの名無しさんNGNG
>265
念のためPen3で測定してみたよ
@Win2K VC++7.1インラインアセンブラ RDTSC使用でクロックを計測 loop命令で1000万回ループ

movzxの方が1処理あたり0.3クロックくらい速い。いや、xorが遅いと言うべきか。
アンロール数を増やすとそれに反比例して差が減っていく。
20回で0.15クロックくらいになるよ。

P4でも試したけどほぼ同じだった。
0271デフォルトの名無しさんNGNG
>>245
Windows 2000 Advanced ServerでPAE on/offで比較してみました。
PAE on/offの確認の為、とあるツールで読み出したCR4の値も書いておきます。

SuperPI 104万桁, Pentium II
7分56秒 : PAE on (CR4=000000F1)
7分54秒 : PAE off (CR4=000000D1)

SuperPI 419万桁, Pentium 4
10分38秒 : PAE on (CR4=000006F1)
10分37秒 : PAE off (CR4=000006D1)
0272デフォルトの名無しさんNGNG
>>269
or eax,-1
mov al, byte ptr[ecx]
かな?
あ、これだとパーシャルレジスタストールが起きるか。

>>271
ほとんど変わらないってこと?
でもSuperパイってメモリ読み込み以外の部分が大きいから、あまり参考にならないかも。
0273デフォルトの名無しさんNGNG
>>272
>or eax,-1
>mov al, byte ptr[ecx]

alが0x00〜0x7fだと正しく符号が拡張されないヨカーン。
0274デフォルトの名無しさんNGNG
mov al, byte ptr [ecx]
cbw
だと、パーシャルレジスタストール起きちゃうのかな?
0275271NGNG
>>272
SuperPIは多倍長乗算にFFTを使っており
ビット逆順アクセス処理にランダムメモリアクセスを伴います。
このため、メモリアクセスには敏感なソフトだと思います。
試しにEDO DRAMのメモリセッティングを変更した場合の結果を書いておきます。

SuperPI 104万桁, Pentium II, PAE off
7分54秒 : EDO DRAM 60nsセッティング
8分50秒 : EDO DRAM 70nsセッティング
0276271NGNG
自分でちょこっとテストコードを書いて試してみた感じでは、
TLBヒット時のメモリアクセスはPAE on/offで全く差はなし。
PAE onでもTLBはきちんと機能するようです。
TLBミス時のメモリアクセスは、PAE onの場合はPAE offより数クロック増えるようです。

>>251のPDPがキャッシュされないという件を確かめてみようといろいろと試してみましたが(
アドレス40000000hより前と後のアドレスを交互にアクセスして遅くなるかどうか等)、
結局、それらしい現象は確認できませんでした。
0277さっきゅん ◆GG1SfzBGbU NGNG
というかTLBがないと一回のメモリ参照で何回メモリアクセスが起きると思ってるんだ?
0278デフォルトの名無しさんNGNG
TLBエントリを余計に消費する可能性は?
0279デフォルトの名無しさんNGNG
K8のレガシーモードにはページサイズ2MBの変換方法もあるよ。
Windowsはこれは使わないのかな。これならディレクトリは2階層だけど。
だけどページサイズはいろんなところに影響及ぼしそうだ。
0280デフォルトの名無しさんNGNG
あと386からの伝統的なページエントリと違って
エントリのサイズが8byteになってることの影響って
あんまり関係なし?TLBのサイズが沢山必要に思えるのは
素人だからだろうか。
0281デフォルトの名無しさんNGNG
>>279
使っているうちに、メモリのいたるところで大きな穴が開く。
今の時代でも2MBは大きいんじゃないかな。
0282さっきゅん@まりーあんとわねっと ◆GG1SfzBGbU NGNG
  _
  /〜ヽ
 (。・-・) 。oO( >>278 TLBが足りないならTLBを増やせばいいじゃない
 ゚し-J゚
0283デフォルトの名無しさんNGNG
隊長!Athlon64のインストラクションマニュアルが見つかりません!
URL教えてください!
0284デフォルトの名無しさんNGNG
  _
  /〜ヽ
 (。・-・) 。oO( >>283 検索もできねーやつは書き込むなorz
 ゚し-J゚
0285さっきゅん ◆GG1SfzBGbU NGNG
  _
  /〜ヽ
 (。・-・) 。oO( >>283 日本語のマニュアルなんてどこにもないから英語読めない香具師は諦めるしかない
 ゚し-J゚
0286デフォルトの名無しさんNGNG
  _
  /〜ヽ
 (。・-・) 。oO( 誰が日本語でと言ったんだろうorz
 ゚し-J゚
0287さっきゅん ◆GG1SfzBGbU NGNG
  _
  /〜ヽ
 (。・-・) 。oO( 日本語マニュアルほしいから聞いてるんじゃないの?
 ゚し-J゚
0288デフォルトの名無しさんNGNG
  _
  /〜ヽ
 (。・-・) 。oO( 誰も日本語とか言ってねぇよ、えいご読めないのはお前なの!w >>287
 ゚し-J゚
0289さっきゅん ◆GG1SfzBGbU NGNG
  _
  /〜ヽ
 (。・-・) 。oO( 喪前の事を少々見くびっていたようだ。スマンカッタ
 ゚し-J゚
0290デフォルトの名無しさんNGNG
AMD64
http://www.amd.com/us-en/Processors/TechnicalResources/0,,30_182_739_7044,00.html

IA32-e
http://www.intel.com/technology/64bitextensions/

IA32-eで追加された命令
CMPXCHG16B m128
MOVZX r64, r/m32

MOVZX r64, r/m32 についての疑問
32bit演算すると上位32bitはゼロ拡張されるはず。
MOV r32, r/m32 ではいけないのか。
MOVZX r64, r/m32 を使うメリットはあるのか。
0291デフォルトの名無しさんNGNG
>>290
素晴らしい!
サンクス
0292290NGNG
>>290
間違えたIA32-eじゃないIA-32eだ
0293デフォルトの名無しさんNGNG
>>290
32bit演算なら上位は保存されるんじゃないの?
386移行のときは割りこみで上位16bit破壊されて難儀したな
0294デフォルトの名無しさんNGNG
まぬある見ずに言う

lea r64. [r32]
0295デフォルトの名無しさんNGNG
>>290
いままでも、1つ目のオペランドは2つ目オペランドの
倍のサイズだったと思うが。
0296デフォルトの名無しさんNGNG
は?
0297デフォルトの名無しさんNGNG
>>290
マニュアルを見る限り、どうもIA-32eとAMD64で命令の食い違いがあるみたいだね。

REX.W + 0F B7 /r は
 IA-32eでは MOVZX r64,r/m32
 AMD64では MOVZX r64,r/m16

REX.W + 0F BF /r は
 IA-32e,AMD64共に MOVSX r64,r/m16

おそらく、IA-32eのMOVZXの記述が間違い(マニュアルのミス)だと思う。
MOVZX r64,r/m32 という命令は存在しないと思う。
0298290NGNG
>>297
サンクス
結構マニュアルのミスあるみたいですね。

MOV r/m64, imm32 (32bit即値の符号拡張)も
IA-32eのマニュアルでは、32bit即値のゼロ拡張になってるし。
0299デフォルトの名無しさんNGNG
全然関係ないけど、movdの一つ目のオペランドの上位ビットが
0クリアされるのがムカツク。余計なことを
0300デフォルトの名無しさんNGNG
>>299
多分
movd レジスタ, メモリ
の場合を言っているんだろうけど、
ゼロクリアされないと、レジスタの余計な依存関係が発生して、
スケジューラにかなりの負担が掛かるので却下。
(例えば、レジスタを部分的に残してしまう movhpd とかは、
使うタイミング間違うとかなり面倒な依存関係が起きて
パフォーマンスの低下を招く)
同じ理由で、中途半端にフラグの変化する
inc,dec も、P4以降では使わないほうがいい。
0301デフォルトの名無しさんNGNG
gccのインラインアセンブラの文法がよく分からないのですが、詳しく書かれているサイトや本などありませんか?
0302デフォルトの名無しさんNGNG
>>299
同感。
Aviutlのデータ、ダブルワードにして欲しい。
0303デフォルトの名無しさんNGNG
>>301
ttp://www.sra.co.jp/public/sra/product/wingnut/gcc/gcc-j.html
0304デフォルトの名無しさんNGNG
>>301
asm文のことならMinGWスレにも
http://pc2.2ch.net/test/read.cgi/tech/1042611308/501-600

movlとかがわからないのなら、

gcc -masm=intel -S -fverbose-asm -o test2.S test2.c

とすると、intel形式が使えます。%%eaxとかしなくてもいいです。
少し前のgccだと、

-mcpu=i386:intel

で使える場合もあるし、ダメな場合もある。
0305デフォルトの名無しさんNGNG
な、なんだってー(AA略
0306304NGNG
i386:intelはobjdumpとかで使うターゲットの名前でした。スマソ
0307デフォルトの名無しさんNGNG
アセンブラにできて、Cにできないことって何でしょう。
ちょっと列挙してくれるとありがたいです。
0308デフォルトの名無しさんNGNG
プロセッサの特権命令の利用とか。
0309デフォルトの名無しさんNGNG
in/out, int
0310デフォルトの名無しさんNGNG
ハード叩くときに、ローテート出来ないのをなんとかしてほしいと思うことがある。
ビットシフトでがんばればいいんだけどね。
0311デフォルトの名無しさんNGNG
ほとんどのまともなCPUがローテート命令持ってるのに未だにCにローテートが無いのは何故なんだろう
0312デフォルトの名無しさんNGNG
ビット数に依存してるから.・・・とか?

もしCにローテートいれるとしたら演算子はどんなが
いいかな
0313デフォルトの名無しさんNGNG
右ローテート ><
左ローテート <>
他言語の否定と紛らわしいかな。
0314デフォルトの名無しさんNGNG
その演算子だと右だか左だかわかりにくw
0315デフォルトの名無しさんNGNG
右 >><
左 <<>
これでどうだ!
0316デフォルトの名無しさんNGNG
<|
|>

シフトしてORをするという意味で
0317デフォルトの名無しさんNGNG
記号にこだわらなくてもいいよね。
0318デフォルトの名無しさんNGNG
とはいえ識別子を使うとCだと予約語になってしまうわけで、
予約語が増えるよりは記号の方がいいんじゃないかと。
0319デフォルトの名無しさんNGNG
@<と@>
0320デフォルトの名無しさんNGNG
@_@>と<@_@
0321デフォルトの名無しさんNGNG
:> <: とか。

そういやC以外でも、ローテート演算子持ってる高級言語ってないね。
・・・いや、あるかもしれないけど俺は知らない。
0322デフォルトの名無しさんNGNG
ローテートて、使い道ないだろ?
なんかある?
0323デフォルトの名無しさんNGNG
現代暗号とか組んでみようとしたときに必要だった気が・・・
0324デフォルトの名無しさんNGNG
キャリーを巻き込んでのローテートとかもあるよな。
0325デフォルトの名無しさんNGNG
ローテート命令でで掛け算をする。
ってかもう使わんか。
0326デフォルトの名無しさんNGNG
>>312
→⊃
⊂←
0327デフォルトの名無しさんNGNG
Fortran90でも標準でビット・ローテート関数があるけど
演算子はないね。
ttp://www1.jpn.hp.com/products/software/development/dvf/docs/vf-html/az/az06_47.htm

それほど使用頻度は高くなさそうなんで、Cなんかなら
必要なとこだけインライン・アセンブラで済ませれば
いいような気もするが。
0328デフォルトの名無しさんNGNG
>>322
シフトの桁数が多い時に、逆方向にローテートして余りをマスクする。
安物CPUには任意の桁数をシフトする命令がないのですよ。

>>327
最適化の邪魔になるのであんまし使いたくない。
0329デフォルトの名無しさんNGNG
PC-98のグラフィック描画で、ローテート命令はよくつかったけど。
0330デフォルトの名無しさんNGNG
すみません。OSとアセンブラはどのような関係にあるのでしょうか。
0331デフォルトの名無しさんNGNG
吉野家と牛丼の関係ぐらい?
0332デフォルトの名無しさんNGNG
何か違うような気がする
0333デフォルトの名無しさんNGNG
>>330
体と心の関係
0334デフォルトの名無しさんNGNG
特にこれといった関係は無いと思うが。
OS の一部分はアセンブラ使って書かれると思うけど。
0335デフォルトの名無しさんNGNG
system call とかは?
0336デフォルトの名無しさんNGNG
某OSのコードだとアセンブラの部分は極一分しかなかった。
0337デフォルトの名無しさんNGNG
最近のコンパイラの最適化は結構賢い
昔、Cなんてのはトロい代名詞だった…
(最近はCPUパワーにおんぶされてるというのもあるが)
0338デフォルトの名無しさんNGNG
昔はコンパクトでかわいげがあったけど
今は顔もみたくない

関係でいえば嫁みたいなものかなぁ
見たくないけど一番の理解者
0339デフォルトの名無しさんNGNG
MS-DOSでは、コンパクトに.COMで作るのが好きだった
最近は全部.EXE。。。
0340デフォルトの名無しさんNGNG
洩れは殆んど .HEX。。。
0341デフォルトの名無しさんNGNG
>>329
つ|EGC|
0342デフォルトの名無しさんNGNG
EPSONのPC-CLUB使っていたけど、EGC付いてなかった・・・
0343デフォルトの名無しさんNGNG
EPSONのPC-486P使ってたけど、EGC互換で8プレーン同時書き込み出来た。
0344デフォルトの名無しさんNGNG
VMじゃ動かないし、EPSONで問題あるから、普通はGRCG止まりじゃない?
EGCは98でもVX21以降でサポートだと思ったけど。。。

でも、なにげにVGAはEGCほどじゃないけど、結構いろんなことが
できるんだよなー。
0345デフォルトの名無しさんNGNG
EGCはまだ統一されてる方だと思うけど最近はアクセラレータでしょ?
Linuxとか最初からドライバがいくつかついてると思うけど
仕様をどこで調べたんだろう。
0346デフォルトの名無しさんNGNG
そりゃあんた
リバーsくぁwせdrftgyふじこlp;@:
0347デフォルトの名無しさんNGNG
情報ってのは必ずもれるもんだぜ
PSのエミュなんてどうやって作るんだよ
0348デフォルトの名無しさんNGNG
VGAはVGAであって最近のビデオチップの追加機能とは別の話だろう
0349デフォルトの名無しさんNGNG
ARMでアセンブラは楽しい。
0350デフォルトの名無しさんNGNG
VGAっていうかVESAでしょ
0351デフォルトの名無しさんNGNG
http://black.sakura.ne.jp/~third/programming/asm/assembly.html

プログラミング等の知識0でも分かりやすかった。
このくらいの初歩から教えてくれる本ないかなぁ・・・。
0352デフォルトの名無しさんNGNG
初めて読む8086
初めて読むMASM
おれはこの2冊から始めたんだが、今となっては内容が古すぎるかも。
いまさらセグメントなんか覚えても役に立たないだろうしなあ。
0353デフォルトの名無しさんNGNG
初めて読む−>はじめて読む だった。
買うのはもったいないので図書課で借りるのがいいです。
0354デフォルトの名無しさんNGNG
度々すまん。
図書課−>図書館です。
念のため。
0355デフォルトの名無しさんNGNG
>>352
今でもあまり変わらないんじゃないかな。
他に今だと「はじめて読む486」も要るか。
まあ猛者にはIntelのマニュアルだけで十分らしいけど。
0356デフォルトの名無しさんNGNG
アセンブラ
アセンブリ
アセンブル
アセンブレ
アセンブロー
0357デフォルトの名無しさんNGNG
movaps xmm1,xmm2
addps xmm1,xmm3
より
pshufd xmm1,xmm2,11100100b
addps xmm1,xmm3
の方が速い?
0358デフォルトの名無しさんNGNG
>>357
シフト演算、MMX演算のユニットが空いていれば早い。
スループットが問題になる場合は微妙。
Pen4でアセンブラ高速化する際は、ポートの構造やパイプラインなど
CPUの全体を把握しないと駄目。

更に言うと、
pshufd xmm1, xmm2, 11100100b
addps xmm2, xmm3
とか、
pxor xmm1, xmm1
por xmm1, xmm2
addps xmm2, xmm3
の方が早い場合が多い。(依存性解決の必要が無いからね)
0359デフォルトの名無しさんNGNG
昔ここhttp://www.intel.co.jp/jp/developer/design/litcentr/index.htm
にあった日本語のマニュアル郡はいずこ?
0360デフォルトの名無しさんNGNG
>>359
http://www.intel.co.jp/jp/developer/download/
これ?
0361デフォルトの名無しさんNGNG
hosyu
0362デフォルトの名無しさんNGNG
VC++.Netで/arch:SSE2 を有効にしたら実数演算でSSE/SSE2命令
をこれでもかこれでもかという程使いまくったコードを吐くようになっ
たが、あまり早くなった気がしねー。

実数演算がメモリを経由せず夢のレジスターレジスタ間演算になる
のでかなり早くなると期待したんだがな。
0363デフォルトの名無しさんNGNG
それよりも実数演算の速度は鱈セレ→北森P4にした時の方が
劇的に速くなった。物にもよるが逆行列を求める場合1000×1000
の行列だと3〜5倍の速度が出るな。マジで。
0364デフォルトの名無しさんNGNG
>>363
それはメモリアクセス・キャッシュの影響じゃなかろうか
0365デフォルトの名無しさんNGNG
鱈セレ=PC100
北森P4=DDR400(Dual?)

実数演算自体は、確かクロック比程度のアップしかしないんじゃなかったかな。
P6自体がK6やP5と比較してかなり速かったし。
実際にはK7がもっと速くて、さらにメモリ速度の分K8が速いと思う。
0366デフォルトの名無しさんNGNG
#34de2080 67 38 43 09 00 00 00 80-00 00 00 00 00 00 00 00 g8C.............
#34de2090 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................

WinXP sp2のページエントリテーブル。
NXビット確認
0367デフォルトの名無しさんNGNG
>>366
で、速度は?
0368デフォルトの名無しさんNGNG
PAEで特に速度は落ちてないよ。

↓でDEPに引っかかりまつ

char *p;
p= malloc(1);
*p = 0xc3;
_asm call p
0369デフォルトの名無しさんNGNG
これで引っかからなくなるの?

char *p;
DWORD old;
p=(char*)malloc(1);
*p=0xc3;
VirtualProtect(p,1,PAGE_EXECUTE_READWRITE,&old);
_asm call p;
0370デフォルトの名無しさんNGNG
大丈夫じゃないの?

モリアガラン
0371デフォルトの名無しさんNGNG
初歩的な質問で申し訳ないですがnasmについて質問させてください。
nasmでとりあえずhello, worldを表示させようと下記のHPにあるソースを
アセンブルしてみた所「hello.asm:1: fatal: unable to open include file `system.inc'」
というエラーが出ました。
http://www.freebsd.org/doc/en_US.ISO8859-1/books/developers-handbook/x86-first-program.html

findコマンドでsystem.incを調べても見つからないのですがこのファイルは何なのでしょうか?

---
OS:FreeBSD 4.8 RE
NASM version 0.98.38 compiled on Apr 3 2004
0372デフォルトの名無しさんNGNG
http://www.freebsd.org/doc/en_US.ISO8859-1/books/developers-handbook/x86-portable-code.html

16.5.5 Using an Include File
If you are releasing your software as (or with) source code, you can use macros and place them in a separate file, which you include in your code.

Porters of your software will simply write a new include file. No library or external object file is necessary, yet your code is portable without any need to edit the code.

Note: This is the approach we will use throughout this chapter. We will name our include file system.inc, and add to it whenever we deal with a new system call.

We can start our system.inc by declaring the standard file descriptors:

%define stdin 0
%define stdout 1
%define stderr 2

0373デフォルトの名無しさんNGNG
>>372
上手く行きました。
ありがとうございました。m(_ _)m
0374名無し@沢村NGNG
おまいらよ、超便利マシン語エディタ「Visual E++」ができたから見ちみれ!!
プログラム言語の歴史が変わった歴史的瞬間だ。

http://hp.vector.co.jp/authors/VA015412/
0375デフォルトの名無しさんNGNG
>>374
もちろんそのプログラムはマシン語で開発したんだろうな?
0376デフォルトの名無しさんNGNG
恐ろしくでかいEXEができるのはなぜ?
0377デフォルトの名無しさんNGNG
>>374
なんだか面白そうだね。
でも、”Visal E++のダウンロード”ってなっているよ。
0378デフォルトの名無しさんNGNG
>>374
だから、E 言語は既に他にあるんだって。
http://erights.org/
0379さっきゅん ◆WAHAH0fe4c NGNG
沢村を弄るスレはここですか?
0380デフォルトの名無しさんNGNG
あ、さっきゅんだ。俺だよ俺
0381さっきゅん ◆WAHAH0fe4c NGNG
俺俺詐欺キタ━━━━(゚∀゚)━━━━!!!!!!
0382デフォルトの名無しさんNGNG
不覚にも藁田
0383名無し@沢村NGNG
>>378
馬鹿、それはまがいものだ。
おれのがホントのE言語だ!
0384デフォルトの名無しさんNGNG
なんでEにしたの?
マシン語ならMじゃないの?
0385デフォルトの名無しさんNGNG
+-----------------------------------------------------------------+
名前:名無し@沢村 日付:4月8日(木) 22時24分
そのE言語はまがいものです(笑)
+-----------------------------------------------------------------+
383 :名無し@沢村 :04/04/08 20:40
>>378
馬鹿、それはまがいものだ。
おれのがホントのE言語だ!
+-----------------------------------------------------------------+


どっちが本人よ
0386デフォルトの名無しさんNGNG
どっちもまがいもの
0387デフォルトの名無しさんNGNG
沢村のE言語はSSE2使えんのか?
0388デフォルトの名無しさんNGNG
BIOSのルーチンはリアルモードでないと叩けないんでしょうか?
0389デフォルトの名無しさんNGNG
>>388
この世にBIOSがいくつあると思ってるんだ?
0390デフォルトの名無しさんNGNG
アセンブラ… (*´ェ`*)ポヨ
0391デフォルトの名無しさんNGNG
>>388
エミュレーションしてしまうという手がある。

x86以外のハードで、ROMにx86のコードが載ってる
PCIデバイスとかを使うときはそうすることもあるし。
0392デフォルトの名無しさんNGNG
↓沢村をエミュレーション
0393デフォルトの名無しさんNGNG
アセンブラ… (*´ェ`*)ポヨ
0394デフォルトの名無しさんNGNG
おまいらは
PowerPCとARM。どっちのアセンブラ(というかニモニックというかインストラクションセットというか)が
好きでつか?
0395デフォルトの名無しさんNGNG
gas以外なら何でもいいやw
0396デフォルトの名無しさんNGNG
>>394
ARMが好きな奴っているのか?
0397デフォルトの名無しさんNGNG
ARM32 Thumb混在は勘弁
0398デフォルトの名無しさんNGNG
HP-UXのPA-RISCとか判る人いる?
つーか需要あると思う?
0399デフォルトの名無しさんNGNG
41 :Socket774 :04/04/10 02:43 ID:yFYAz/Ak
>>38
ロングパイプライン・キャッシュリロード・投機実行
これらのワーストで250000クロック分の処理が無駄に破棄されます。
Windowsでは、この破棄が秒間に100回以上起こる可能性があるそうです。
つまり、この回避しがたい100回以上の破棄をいかに軽微にこなすかが
CPUに求められているというわけです。
つまりもっさりの改善は、パイプラインストールの回避・分岐予測の精度向上・メモリ帯域の向上・キャッシュミスの回避と、
すべて理にかなった当然の結果として落ち着くわけであります。

秒間数十億個というのはあくまでもクロックから推定できる理論値。
今のPen4は、キャッシュ1ライン埋める程度の作業に10000クロックかかるんですよ?
0400デフォルトの名無しさんNGNG
どっかからのコピペか?
キャッシュにロードされるのに10000クロックはかからないだろうに。
0401デフォルトの名無しさんNGNG
>>399
コピペか・・・・
WindowsXPのデフォルトのコンテクストスイッチ時間は50ms
間隔、Server2003は300msだ。前者はどう考えても20回/秒
しか切り替えが起きないように思えるが・・・・
0402デフォルトの名無しさんNGNG
300msだと目に見える速度で切り替わってるん?
0403デフォルトの名無しさんNGNG
>>402
らしいよ。ちなみにXPでもバックグラウンドサービスを優先にする
にすると300msに切り替わるからやってみるといい。但しその時
同時にバックグラウンドプロセスに割り当てられる時間も長くな
るので、表で重い処理をしていると不都合が生じる事があるらしい。

ttp://homepage2.nifty.com/winfaq/c/ntperf.html#1292
0404デフォルトの名無しさんNGNG
[スタートボタン] → [ファイル名を指定して実行]
で "perfmon" と入力して[OK]を押と、パフォーマンスモニタが立ち上がる。

╋ボタンを押して[カウンタの追加]ダイアログボックスを出す。
[パフォーマンスオブジェクト]に"System"を選択し、
[一覧からカウンタを選ぶ]から"Context Switches/sec"を選択して
[追加]ボタンを押す。

これで1秒間に何回コンテキストスイッチが起こっているか
リアルタイムで確認できます。
0405デフォルトの名無しさんNGNG
>>401
割り込みも含んでいるのでは?

でも・・・「キャッシュ1ライン埋める程度の作業に10000クロック」で
なんか説得力失くしてるような
0406デフォルトの名無しさんNGNG
>>404
だいたい百回くらいになったよ
0407デフォルトの名無しさんNGNG
タイムアウト以外でもコンテクストスイッチは発生するし
intelのキャッシュはライン全てが埋まる前に順次アクセス可能になったような気がする
0408デフォルトの名無しさんNGNG
P4のキャッシュラインって、確か64byteでしょ。
せいぜい数百クロックで埋まると思うんだが。
0409デフォルトの名無しさんNGNG
メモリアクセスのコストはでかいよ。
0410デフォルトの名無しさんNGNG
今日「いまどきのアセンブラプログラミング」なる本を買ってきました。早速勉強してみます。
0411デフォルトの名無しさんNGNG
>>410
南無
0412デフォルトの名無しさんNGNG
>>411
もしやさほどいい本でもないと・・・・?
0413デフォルトの名無しさんNGNG
早速7Pで誤字を発見、こういうことなのであろうか・・・・。
0414さっきゅん ◆WAHAH0fe4c NGNG
立ち読みした事あるけど地雷だね
0415デフォルトの名無しさんNGNG
パラパラとめくって見たけど・・・・なんだこりゃ誤字だとか誤記だとかが多すぎます。
なんとか頑張ってみます。
0416デフォルトの名無しさんNGNG
その本の紹介文の一部です
>ゲームやソフトを実際に解析する具体例を以て行う実践解析ガイド
>ゲームで「キャラクターを無敵にしたい」とか、特定のソフトで機能制限を解除したい」などが

導入としてこの手の話題は悪くないと思いますが
肝心のアセンブラの解説にいくまでに息切れした感があります
ゲームラボの延長のような位置付けなんでしょうね
0417デフォルトの名無しさんNGNG
たしかに・・・ツールの説明でページ使いすぎです。
0418デフォルトの名無しさんNGNG
>>410
その本はゲーム解析者の間では「買う価値の無い本」として有名です。
ゲームの改造ネタは色々なゲーム解析サイトの解説を参考にしていますが、
ライターに知識がないのでこの本の解説では間違いだらけになっています。
それに、インテルのアーキテクチャマニュアル丸写しのページは、
索引がないのでとても使いにくく評判が悪いです。

ゲームの解析がやりたいのなら、下のサイトで勉強した方が良いでしょう。
「いまどきのアセンブラプログラミング」よりもはるかに役に立ちます。
アセンブリ言語のソースコードもありますし。
http://gamereverserz.cjb.net/
0419デフォルトの名無しさんNGNG
>>418
そうですか・・・・衝動買いはいけませんね、ありがとう。
0420デフォルトの名無しさんNGNG
>>410
アセンブリを真面目にやりたいならはじめて読む8086でも嫁。
ゲーム解析は知らん
0421デフォルトの名無しさんNGNG
「プログラミングの力を生み出す本」って読んだことある人いる?
評判いいみたいなんだが、実際どうなんでしょう?
0422デフォルトの名無しさんNGNG
アセンブラのシンプルな美しさがたまらん。
コードを一行書くたびにうっとりしてる。
高級言語のゴテゴテした記述には吐き気がする。
0423デフォルトの名無しさんNGNG
>>422
そんなあなたにはWhitespaceがおすすめ
ttp://compsoc.dur.ac.uk/whitespace/
0424デフォルトの名無しさんNGNG
>>422
瀕死のコボラーみたいなこと言ってないで働けよ
0425デフォルトの名無しさんNGNG
すまぬ。おしえてくれ・・・
CPU8086の組み込み機器用プログラムがあって、
組み込みLinux(!)に移植せねばならぬのだ・・・。
ソースコードは一部C言語+大部分アセンブラ。

アセンブラをC言語に逆アセンブル出来る?
出来たとしても、Linuxへの移植に役に立つCのソースが得られる????

すまん、アプリ屋なもので、判断できんのだ・・・。
できないならできないで、しょうがないので、流用はあきらめて作り直しなのだけど・・・・。



0426デフォルトの名無しさんNGNG
age
0427デフォルトの名無しさんNGNG
>アセンブラをC言語に逆アセンブル
???
0428デフォルトの名無しさんNGNG
>>425
一度解析して、仕様書を起こしたほうがいいと思う
0429デフォルトの名無しさんNGNG
Cで書けないプログラムはない
CでVM作ってその上で元のプログラムを動かせばOK
0430デフォルトの名無しさんNGNG
8086程度ならエミュってしまえ。エンジンもフリーでたくさんあるよ。
0431デフォルトの名無しさんNGNG
対象も組み込みのようだからそれは厳しいんでは
0432デフォルトの名無しさんNGNG
>>421
アセンブリ使える香具師には必要なし
Cをもっと理解したい香具師にはちょうどいい
0433デフォルトの名無しさんNGNG
レスありがと・・・。
>>427 さま
あまりのタコ質問で、反応するのがあほらしい感じですか?
自分はアプリ屋なので、恥ずかしながら、
私のアイディアが、どの観点でどのくらいトンチンカンなのかすら
わからないのですよ・・・。
できたら、私のアイディアのタコさ加減を教えてもらえるとありがたいです。
見極めついたら、とっととあきらめて、つくりなおします・・・
しょうがないので。

>>428 さま
やっぱりそうですかねぇ。仕様書はメモリマップぐらいしかないので、
結構気合がひつようだなぁ。(鬱)

0434デフォルトの名無しさんNGNG
アセンブリ言語からC言語は逆「コンパイル」な。
逆コンパイラは皆無ではないが、技術的に困難で、
どんな場面でも実用的に使えるようなものはないと思う。
コンパイラのことをよくわかった人間が書いたアセンブリプログラムなら、
十分構造化されてて、手作業でも逆コンパイルができるかもしれないが、
スパゲティ状態だったら、あきらめるのが得策。
0435デフォルトの名無しさんNGNG
C言語風にディスアセンブルするツールがあったような・・・・
0436デフォルトの名無しさんNGNG
>> 434さま
>>逆「コンパイル」
なるほど、用語が誤っていたということですね。
>>十分構造化されて
なるほど、たしかに、構造化を意識して、かつ、C言語のような構造化言語
をコンパイルしたようなアセンブラでないと、
構造化言語への変換は、意味的に不可能ですね。
親切なコメントありがとうございます。

>>435さま
IDA Pro http://www.datarescue.com/idabase/
なるツールを見つけましたが、これでしょうか?
上記と絡みますが、これはC言語をコンパイルしてできた機械語を逆コンパイルする
という位置付けなのでしょうかね・・・Webだけではちょっとわかりませんね・・・

0437デフォルトの名無しさんNGNG
Boomerang
http://boomerang.sourceforge.net/
も、IDA Proを意識した逆コンパイルツールだな。
どちらも、自動的にってことはたぶんあきらめてて、
「十分知識をもった」ユーザーが介入することを前提にしているはず。
8086に対応してるかは知らん。

機械語とこういったツールに習熟し、さらに手間をかけて使うコストと、
仕様から単純にソースを設計しなおすコストと、
どっちが安いかは規模によるだろうな。
0438デフォルトの名無しさんNGNG
アセンブラはおなかがいっぱいになりまつか?
0439デフォルトの名無しさんNGNG
debugでGUIできる?
0440デフォルトの名無しさんNGNG
>>439
は??
いったいどういうものを想定してるの?
0441デフォルトの名無しさんNGNG
>>440
win32のやつ
0442デフォルトの名無しさんNGNG
意味のわからないレスが続いております。
0443デフォルトの名無しさんNGNG
GUIなデバッガがあるかと言うことだろうか?
もしそうならOllyDbgなどがあるけど
0444デフォルトの名無しさんNGNG
意味のわからないレスが続いております。
0445デフォルトの名無しさんNGNG
母国語(日本語)をおろそかにしていると、外国語の習得
もおぼつかないぞぉ
0446デフォルトの名無しさんNGNG
debugでGUIできる?、という意味自体いまだにわからん俺はバカですか
0447デフォルトの名無しさんNGNG
debug.comでGUIのpろぐらむが
0448デフォルトの名無しさんNGNG
>>446
debugとGUIに関する知識をつけてから来るように。
はい、次の人。
0449デフォルトの名無しさんNGNG
>>448
貴方は超能力者様ですか
0450デフォルトの名無しさんNGNG
439=441=448
ヽ||´ ∀`||.。oO(知ってるがお前の態度が気に入らない にははーっ)
0451デフォルトの名無しさんNGNG
知ってるがお前の態度がピッチャーデニー
0452デフォルトの名無しさんNGNG
90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90
0453デフォルトの名無しさんNGNG
RET?
0454デフォルトの名無しさんNGNG
>>453
C3
0455デフォルトの名無しさんNGNG
>>439
>debugでGUIできる?
debugとGUIの単語を入れ換えれば意味が分かる俺は天才ですか?
0456デフォルトの名無しさんNGNG
意味が変わる罠
0457デフォルトの名無しさんNGNG
中学生お断り
0458デフォルトの名無しさんNGNG
ぶでむし
0459デフォルトの名無しさんNGNG
>>443
OllyDbgは使えそうだが、Winか。
Linux環境のやつを探しているのだが。
0460デフォルトの名無しさんNGNG
>>459
>>439ではないよね?
kdbgとかgdbのGUIフロントエンドの類はいくつかあるみたいだが
0461デフォルトの名無しさんNGNG
おなかはいっぱいでつか?
0462デフォルトの名無しさんNGNG
http://www.csl.sony.co.jp/person/fnami/asm.htm
こんな感じで高速サーキットをガンガン組むスレかと思ってました・・・・。











( ゚ρ゚ )b逝ってくれ
0463439NGNG
できますか?
0464デフォルトの名無しさんNGNG
できちゃった。。。
0465デフォルトの名無しさんNGNG
>>425 です。
結局、基本方針は作り直しに限りなく近い移植
となりました。 アセンブラを参考にしつつ、作業をすすめるつもりですが・・・。

アドバイスありがとうございました・・・。
0466デフォルトの名無しさんNGNG
>>452
声に出して読みたいマシン語
0467デフォルトの名無しさんNGNG
>>466
1D?(6809)
0468デフォルトの名無しさんNGNG
>>467
14(6809)
0469デフォルトの名無しさんNGNG
そう言えば $00 $00 は6809では NEG $00 だっけか・・・
0470デフォルトの名無しさんNGNG
Z80で初めてマシン語に触れた俺は
00はNOPなのが当然だと思っていて
8086で呆然としたよ。
0471デフォルトの名無しさんNGNG
nopが00ってのは最近は少数派?
0472デフォルトの名無しさんNGNG
6502では未定義コードが多くて、それらはすべてBRKという
ニーモニックに割り当てられていた。ソフトウェアインタラプト
の事かな?NOPは0xEAだっけか。

なにせ命令数が少ないのにいろんなコンシュマー機に乗って
それはそれは偉大なソフトウェア資産を残しましたよねえ、この石。
0473デフォルトの名無しさんNGNG
BRK (break)
・この命令を実行したチップは物理的に破壊されシステムは二度と復旧できません。
・自己爆破プログラムなどの作成によく使用します。
0474デフォルトの名無しさんNGNG
そう言えば6502はリセットor電源投入でPCの値が不定という恐ろ
しい仕様になっていたな。だから電源投入後ほんのしばらくだけ
暴走状態になり、未定義命令(すべてBRK命令になる)に遭遇して
インタラプトベクタ(ROM)の指すアドレスにジャンプしていた。

6502は電源投入かリセットによるものかをハード的に検出する機構
を持たず、どうやら電源投入時にはRAMの内容が不定なのを利用
して判別していたらしいが、その詳細は寡聞にして知らない。ある
特定のRAMを未使用にし、内容を$00にするなどして判別していた
のだろうか。

6502はDMA割り込みにも対応していず、強制的にCPUをHLT状態
にしてバス占有権をデバイスに譲り渡していたような記憶がある。
ソフトウェア的には面白いCPU(MPUというらしい)だが、ハードウェア
的にはまだまだ不備が多かった。
0475デフォルトの名無しさんNGNG
リセットベクタはどうした?
0476デフォルトの名無しさんNGNG
>>474
電源投入時のみPCが不定なんじゃなかった?
0477デフォルトの名無しさんNGNG
Reset線あるし、初期化に6クロック必要というだけかと。

未定義命令は全てBRKになるのは大嘘。

電源投入かリセットかの判別をRAMが特定の値になって
いるかどうかで判別するのは普通に使われてると思うけど。

DMA割り込みがなくても特殊用途以外困らないな。
0478あっせんぶらNGNG
ちょっと質問なんですが、インラインアセンブラでレジスタの値を配列に入れるには
どうすればいいでしょうか?

char str[10]
__asm__("movl %ebx, ????");

????はなにを入れるんでしょうか?linux上のgccでコンパイルしたいのです。
0479あっせんぶらNGNG
str[0]に入れたいんです。
0480デフォルトの名無しさんNGNG
>>478
それができると何がうれしいの?
0481デフォルトの名無しさんNGNG
>>478
__asm ("movl %%ebx,%0" : "=m" (str[0]) );

かな。これ読んどけ
http://www.sra.co.jp/wingnut/gcc/gcc-j.html#Extended%20Asm
0482デフォルトの名無しさんNGNG
str[0]はcharだからebx全部収めるには小さいと思うけど大丈夫?
0483デフォルトの名無しさんNGNG
>>478 ではありませんが、参考になりました。
char c;
asm ("movb $0x41, %%al;\n\
movb %%al, %0;" :"=r" (c) );
putchar(c);
0484デフォルトの名無しさんNGNG
おまいらアセンブリのコーディングにはどんなエディタ使ってる?

俺はedit.exeだが・・・
0485デフォルトの名無しさんNGNG
>>484
edlin.com
0486デフォルトの名無しさんNGNG
>>484
cat
0487デフォルトの名無しさんNGNG
>>486
ネ申
0488デフォルトの名無しさんNGNG
http://compiler.e-city.tv/
即デリだろ
0489デフォルトの名無しさんNGNG
ビデテープかよ
0490デフォルトの名無しさんNGNG
プロテクトモード移行関連のいい資料ないかな・・・
インテルのマユアルぐらいしかしかないか
0491デフォルトの名無しさんNGNG
まゆある
まゆタン(*´Д`)ハァハァ
0492デフォルトの名無しさんNGNG
>>488
即デリだよ。直前に落としたけど。
0493デフォルトの名無しさんNGNG
>>492
こういう時だけは2chに張り付いてるキモい奴が裏山しくなるんだよな…。
0494デフォルトの名無しさんNGNG
お前も張り付いてんじゃんw
0495デフォルトの名無しさんNGNG
>>492
また復活した。多分最小限のWin32APIとかが入ってるのかな。
即デリされて即同じ垢取ったんだろうからまた即デリか?
0496デフォルトの名無しさんNGNG
またビデテープだし
0497デフォルトの名無しさんNGNG
ナニコレ?
0498493NGNG
>>494
あのレス速度と書き込み内容見てもそう思ったのか?相当頭腐ってるようだが
0499部外者NGNG
>498
まだ493から2時間もたっとらん
0500デフォルトの名無しさんNGNG
ニヤニヤしていいですか?いいですよね。(・∀・)ニヤニヤ
0501デフォルトの名無しさんNGNG
>>compiler.e-city.tv
ホンマに一発で豆32できるね。Warningだらけだが。
ホンマにIntel C++使えるね。Warningだらけだが。
0502デフォルトの名無しさんNGNG
一応
タダで使えるVisual C++
http://pc5.2ch.net/test/read.cgi/tech/1082177340/l50
0503488NGNG
そこが少なくともここより糞スレだからこっちに書いた
0504デフォルトの名無しさんNGNG
mov dx,NIYA
mov ah,09h
int 21h

segment data
NIYA: db 'NIYA NIYA',0dh,0ah,'$'
0505493NGNG
>>499
ああ部外者さんすいません。時感覚が全然違うようなので話になりませんね。
0506デフォルトの名無しさんNGNG
gccで以下のCのソースをアセンブラ出力すると、
int main(){ int i=123,j=456; printf("%d %d\n",i,j); }

以下のように出力されるが
何でAの箇所で"-16"を"andl"してるのか理解できない。
main:
 pushl  %ebp
 movl  %esp,%ebp
 subl  $24,%esp
 andl  $-16,%esp  ← A
 movl  $456,8(%esp)
 movl  $123,4(%esp)
 movl  $.LC0,(%esp)
 call  printf
 leave
 ret

何故ですか?教えてエロイ人
0507デフォルトの名無しさんNGNG
16バイトアライン
0508デフォルトの名無しさんNGNG
・・・するとデータの並びが綺麗になって処理が少し早くなる
0509506NGNG
ってことはAの箇所は無くても動作上は問題ないってことですね。
これがアラインなのか。ナルホド
どうもアリガトン >>507,508
0510デフォルトの名無しさんNGNG
引数をどういう順序で積むかとか、関数内で変更しちゃいけないレジスタの一覧とか、
そういう規則(calling conventionっていうんでしょうか?)はどこ見れば書いてありますか?

x86のLinuxでインラインアセンブラで遊んでいます。
0511デフォルトの名無しさんNGNG
これか?
ttp://homepage2.nifty.com/yashiromann/memo/x86_proccall.html
0512510NGNG
>>511
サンクスコ
しかしなんつーかもっと公式っぽいのはないもんですかね・・
0513デフォルトの名無しさんNGNG
>>511
見てみたけどあんまぱっとしないね
VCの呼び出し規約だったらMSDNにあったはず
0514デフォルトの名無しさんNGNG
>>510
gcc/config/i386/i386.h
マクロの説明はinfoにある。

インラインアセンブラなら引き数ちゃんと指定すりゃ、
そんなん気にしなくてもいいはずだが。
0515510NGNG
>>514
さんくす。見てみます。
気にしなくていいはずってのは確かにその通りですね。
正確には、gcc -Sした出力を読むときの参考にしたいってとこでした。

0516デフォルトの名無しさんNGNG
gdbで、$eflagsの内容を数値じゃなくてフラグ名で表示する方法ないですか?
Linuxでgdb-5.3です。xemacs -e gdb で使ってます。
0517デフォルトの名無しさんNGNG
>>516
漏れは泥臭いけどこうしてる。

.gdbinitに

define printflag
printf "flag = %s%s%s%s%s\n",\
$eflags & 1 ? "C":"-",\
$eflags & 4 ? "P":"-",\
$eflags & 16 ? "A":"-",\
$eflags & 64 ? "Z":"-",\
$eflags & 128 ? "S":"-"
end

もっとスマートな書き方あったら教えてくれ。
0518デフォルトの名無しさんNGNG
自分は516でないけど
>>517
(゚д゚)ウマー
0519デフォルトの名無しさんNGNG
>>517
さんすこ!いい感じです。
0520519NGNG
もいっこ、、gdbは、Cソースとasmリストを両方表示するような、いわゆる混合モード?のようなのはないのでしょうか?
disas結果とにらめっこはつらいっす。
0521デフォルトの名無しさんNGNG
>>520
emacsはどうよ?
0522519NGNG
>>521
いや〜、emacsでM-x gdbしてるんすが、混合モードにできるんすか??!!
0523521NGNG
>>522
スマソ
間違った。
0524デフォルトの名無しさんNGNG
http://www.ascii-store.com/catalog.cgi?id=00061989
はじめて読むPentiumキタ━━━━━━(゚∀゚)━━━━━━ !!!!
0525デフォルトの名無しさんNGNG
いまさらpentium・・・
0526デフォルトの名無しさんNGNG
目次紹介ぐらいつければいいのに
0527デフォルトの名無しさんNGNG
解説がこれだけだと地雷かどうか判断つけかねるね
0528デフォルトの名無しさんNGNG
>>524
はじめて読む486の続編?
0529デフォルトの名無しさんNGNG
はじめて読むAMD64キボン
0530デフォルトの名無しさんNGNG
それはちょっと欲しいなぁ
0531デフォルトの名無しさんNGNG
はじ486よりははじ8086を今風に書き直したようなイメージの予感。
今更pentium出されても486と大して変わってないし。。。
0532デフォルトの名無しさんNGNG
「はじめて読むPentiumPro」なら欲しい気がする。
0533デフォルトの名無しさんNGNG
はじめての…(*´д`*)アハァ…
0534デフォルトの名無しさんNGNG
アッセンブラの想い出♪… (*´д`*)アハァ…
0535デフォルトの名無しさんNGNG
ハァハァ
0536デフォルトの名無しさんNGNG
どうやって486と差別化するんだ?
まぁあの人なら「いまどきの〜」みたいなのは絶対書かないから良いとして・・
0537デフォルトの名無しさんNGNG
差別化する必要あるの?
いいかげん486じゃ売れないだろ、とか思って
改訂ついでに486→Pentiumに変更したものかとオモタ。
s/486/Pentium/ + 若干のお茶濁し程度のPentium固有説明と予想。

0538デフォルトの名無しさんNGNG
486は本体2427円か。
0539デフォルトの名無しさんNGNG
486DXに無くてPentiumにあるものってなんだったかな
FPUのバグか?
0540デフォルトの名無しさんNGNG
Pentiumって言っても、さすがに素のPentiumってことはないだろうよ。
MMXとかSSEとかネーノ?
PSEとかPAEとかHyperThreadingとかも含まれればいいなと妄想。
0541デフォルトの名無しさんNGNG
P4最適化コンパイラ(C/C++)の優劣はこれでOK?

Intel > Microsoft > Borland > gcc
0542デフォルトの名無しさんNGNG
P4に限れば

Intel > Microsoft > Borland >>>>>>>>>>>> gcc

じゃないの?知らんけどどーせP4最適化の不具合残ってるんでしょ?gcc3.4
0543デフォルトの名無しさんNGNG
MS の最適化 (inlineの処理)のバグがつらいですね。。。
信用できないので inline を使えないです。。。

Intel & Borland の 配列処理のコードは賢いです。

Intel Compiler + VTune ってのが最強ですか!?
0544デフォルトの名無しさんNGNG
漏れのハンドアセンブルが最強だよ
0545デフォルトの名無しさんNGNG
>>544
ハンドアセンブルは間違わなければ誰がやっても同じ結果になるのでは。
0546デフォルトの名無しさんNGNG
というかハンドアセンブルで間違えたら、余程運がよくないと
大抵そのまま暴走する罠。
0547デフォルトの名無しさんNGNG
>>545=アセンブリ言語とマシン語が常に一対一で対応すると思ってる香具師
0548デフォルトの名無しさんNGNG
( ´_ゝ`)
0549デフォルトの名無しさんNGNG
>>488
勝手にミラー作った。
http://compiler.web-zz.com/
0550デフォルトの名無しさんNGNG
>>549
ATLは割れ物?
0551デフォルトの名無しさんNGNG
多分PPC何とかのSDKから抜いたんじゃないか?
0552デフォルトの名無しさんNGNG
通報していいの?
0553デフォルトの名無しさんNGNG
>>539
CPU動作クロックカウントする奴とかありませんでしたっけ?
CPUID実行すると随分結果違いそう。

あっ、CPUIDがDX4以降だった(大和田爆)!
0554デフォルトの名無しさんNGNG
RDTSC
0555デフォルトの名無しさんNGNG
移植性に限れば
gcc >>>>>>>>>>>> Borland > Intel >|越えられない壁|> Microsoft

gccの最適化もそんなに悪くはないはず
0556デフォルトの名無しさんNGNG
アセンブリのスレですよ。
0557デフォルトの名無しさんNGNG
>>555
なにをどう移植する気だ
0558デフォルトの名無しさんNGNG
オブジェクトに互換性は無いの?
開発環境がWindowsに限定されるからやる人がいないだけで
リンカさえ用意すればx86環境はMicrosoftでも統一できないか?
0559デフォルトの名無しさんNGNG
>>558
できん
0560デフォルトの名無しさんNGNG
>>552
割れというよりフリーソフトの無断転載だがいけないと思うので通報した。
ちゃんと落とした後に確認してから。
0561デフォルトの名無しさんNGNG
なぁ、最近高級言語でアセンブリとかいっちゃってんの、なんとかならんの?
0562デフォルトの名無しさんNGNG
ならん
0563デフォルトの名無しさんNGNG
だれか、MSのアセンブラが吐く.LIBをディスアセンブルできる
ディスアセンブラ知らないですか?
今昔のソースのないライブラリ使いたくて困ってるんだけど
なかなか見つからなくて。
ないのかなぁ、そんなの。
0564デフォルトの名無しさんNGNG
できん
0565デフォルトの名無しさんNGNG
>>563
LIBからOBJ引っ張り出してすべてのシンボルを参照する
プログラムとリンクすれば?
0566デフォルトの名無しさんNGNG
>>565
objにすればリンカに食わせるだけでいい。
obj用の逆アセンブラってのもあったような気がするけど。
0567デフォルトの名無しさんNGNG
>obj用の逆アセンブラ
obj2asmで検索すればいくつか見つかるな。
32bitやCOFF対応のとなると少ないが。(Digital Marsのヤツが対応してたかな。)
0568デフォルトの名無しさんNGNG
>>567
DC++ じゃなくてその前身のSC++だけど、軽く試した感じだとCOFFにも対応してる気がす。
まぁ、対応して無くても coff2omf が付いてるのでなんとかなる。
0569デフォルトの名無しさんNGNG
ret word 00008h
ってどういう意味ですか?
0570デフォルトの名無しさんNGNG
>>569
ret後にespに8加算
これくらいインテルのマニュアル見たほうが速かろうに
0571デフォルトの名無しさんNGNG
修行不足でした。ありがとうございます
0572デフォルトの名無しさんNGNG
$ilhlbaialabeldword
dd0
dd1
;(省略)
dd9

?live1@0:;main関数の呼び出し
push ebp
mov ebp,esp
add esp,-40
push esi
push edi

@1:mov esi,offset $ilhlbaia
lea edi,dword ptr [ebp-40]
mov ecx,10
rep movsd

xor eax,eax;i=0
?live1@48: ; EAX = i
@2:
inc dword ptr [ebp+4*eax-40]
inc eax;i++
cmp eax,4;i<4となっているか?
jl short @2

;(省略)
0573572NGNG
配列の使い方が分からないです。
Cで

int main(){
int s[]={0,1,2,3,4,5,6,7,8,9};int i;

for(i=0;i<4;i++){
s[i]++;
}
return 0;
}

ってなるのを、bcc32 -Sでアセンブリ化したのですが、よく分かりません。
@1:の最初の方でesiがs[0]を参照しているみたいですけど、
何故[ebp+4*eax-40]がs[i]を表わす事になるかが良く分からないんです。
参照したのはesiなのに・・・
0574デフォルトの名無しさんNGNG
ebp-40が配列のベースアドレス
siozef(int)は4
0575デフォルトの名無しさんNGNG
@1でやってるのは、ローカル配列の初期化な。
0576デフォルトの名無しさんNGNG
dd 0〜dd 9 に対応するのは{0,1,2,3,4,5,6,7,8,9}の定数部分
@1では、この定数を変数にコピーしてる(s[]={0,1,2,3,4,5,6,7,8,9})

sに対応するのがebp-40で、iに対応するのがeax
つまりs[i]に対応するのが[ebp-40 + eax*4]

こんな説明で分かるかな?
0577572NGNG
>574-576
なんとなく分かりました
ありがとうございます
0578デフォルトの名無しさんNGNG
xemacs上でgdbを使っているんですが、実行中および前後の命令を表示しつつ
ステップ実行することはできないでしょうか? gcc -S結果のファイルをあらかじめ
用意しておくなどの方法でもかまいません。

よろしくおねがいします。
...と。
0579デフォルトの名無しさんNGNG
>>578
define hogehoge
x/1i $pc
si
x/2i $pc
end

くらいでどうよ。
0580デフォルトの名無しさんNGNG
>>579
なるほど、ありがとうございました
0581デフォルトの名無しさんNGNG
おまいら何つかってコーディングしてるよ?
0582デフォルトの名無しさんNGNG
紙とエンピツ
0583デフォルトの名無しさんNGNG
エディター
0584デフォルトの名無しさんNGNG
>>581
脳味噌
0585美留上位NGNG
cat > file
0586デフォルトの名無しさんNGNG
努力と根性
0587デフォルトの名無しさんNGNG
カロリー
0588デフォルトの名無しさんNGNG
おいアセンブラはやる価値あるか?
0589デフォルトの名無しさんNGNG
>>588
そんな事よりきいとくれ。
俺が学生の時に60過ぎの教授、「アセンブラと言ってもこれでは有りません」
とか言って、プログラミング言語の講義中に麻宮騎亜の「アセンブラ0X」を出して来た
んだけどどう思う?
0590デフォルトの名無しさんNGNG
それがどうしたよ、おっさん。
0591デフォルトの名無しさんNGNG
反応する人間=仲間を探したかったんだよ。うん。
0592デフォルトの名無しさんNGNG
アセンブラ勉強しようと思うんですが
お勧めなサイトとか本とかあったら教えてください
0593デフォルトの名無しさんNGNG
ぐぐれ
0594デフォルトの名無しさんNGNG
>>592
国内で有名どころと言えばここかな。
ttp://www.e-net.or.jp/user/missing-link/assembler/menu.html
過去ログ必読!!膨大な量のログがあります。
0595デフォルトの名無しさんNGNG
>>592
勉強する目的を書いた方が良いかと。

例えば、目的がアセンブリ言語でのプログラミングの場合と、
目的がゲームの解析の場合では、回答も違ってくるから。

いずれにせよ、「いまどきのアセンブラプログラミング」という書籍は買わないように。
絶対に後悔するから。
0596デフォルトの名無しさんNGNG
ここにはモトローラの石使いはおらんのかい?
LDAA #8AH
CMPA FG
BCC SWCAL

などの命令が見られないのが寂しい。。
0597デフォルトの名無しさんNGNG
STAB
ぐさりと刺す。

SEX
オニーチャンノエッチー(AA略。
0598592NGNG
>>593-595
ありがとうございます
ゲームの解析をやりたいと思ってます
0599デフォルトの名無しさんNGNG
>>598
ゲームの解析なら、下のサイトとそのリンク先で勉強するのがお勧め。
わざわざ本を買う必要はありません。
http://gamereverserz.cjb.net/
0600デフォルトの名無しさんNGNG
NAGOA
http://www.visual-assembler.pt.vu/

NASM用IDE
0601592NGNG
>>599
ありがとうございます。
某オンラインゲームのチートスレでそこは初心者には難しすぎるから
もっと優しいところから始めろと言われたのですが大丈夫でしょうか?
0602デフォルトの名無しさんNGNG
>>601

>>599のサイトは、プロセスメモリエディタすら使いこなせない初心者には難しいが、
これからアセンブリ言語のゲーム解析への応用を学ぶ人には丁度いい難易度だと思う。
「Questions/Suggestions」のコーナーで、初心者はどう勉強すればいいか解説してあるし。
0603デフォルトの名無しさんNGNG
emacsやvimはアセンブリ言語では作られていないのですか?
0604デフォルトの名無しさんNGNG
いません。
0605603NGNG
どおりで重いわけだ
0606デフォルトの名無しさんNGNG
(・∀・)はアセンブリ言語では作られていないのですか?
0607デフォルトの名無しさんNGNG
いません。
0608606NGNG
どおりで重いわけだ
0609デフォルトの名無しさんNGNG
>>591
え〜?「60過ぎの教授」なんだろ?
きっと一世一代のネタだったんだよ。
0610デフォルトの名無しさんNGNG
最近の女の子はアセンブラで作られていますか?
0611デフォルトの名無しさんNGNG
いません。
0612デフォルトの名無しさんNGNG
>>610
フロントホックブラなら付けています。
0613デフォルトの名無しさんNGNG
>>611
どおりで重いわけだ。

>>612
むしろTシャツブラのような気が。
0614デフォルトの名無しさんNGNG
mov 半島, 在日;
0615デフォルトの名無しさんNGNG
xor 在日, 在日
0616デフォルトの名無しさんNGNG
mov ah,半島
int 三国人

不正な割り込みが発生しました。
0617デフォルトの名無しさんNGNG
喪前等ひどいなw
0618デフォルトの名無しさんNGNG
新しいPentiumMが出たそうだけど
SSEは1,2,3のどこまでじっこうできるんでしょうか?
0619デフォルトの名無しさんNGNG
>>614
モトローラだと半島→在日になっちまうんだが(w
0620デフォルトの名無しさんNGNG
move 在日,半島
0621デフォルトの名無しさんNGNG
add 半島, 産廃
mov ブラックホール, 半島
0622デフォルトの名無しさんNGNG
rol 在日, 8
ズタズタグチャグチャ
0623デフォルトの名無しさんNGNG
石原都知事 macro
    cmp 人,在日
    je  刑務所
endm
0624デフォルトの名無しさんNGNG
マウスでスクロール!(PS/2マウス専用) ※アセンブラソース付き
http://rd.vector.co.jp/soft/dl/dos/util/se046783.html

このソフトはマウスの動きを方向キーに割り当てるものですが上下のみ。
左右も対応して欲しいのと、マウスのボタンを好きなキーに割り当てるように改造して欲しいです。

ノートパソコンではマウスの代用として
ジョイステックに似たステックやリブポイントがIBMや東芝などで使われてます。
これを方向キーのエミュレーションとして使いたいのです。
(逆のキーでマウスを動かすソフトは沢山あるんですけどね)
ステックでゲームができると大変操作性があがります。

作者に頼むにしても1997年で開発が止まってるようで、今更w
なんとか改造出来ないでしょうか?
僕はアセンブラもDOSもダメです。
0625デフォルトの名無しさんNGNG
>>624
アセンブラやDOSを知らなくてもバイナリエディタでキーコード書きかえるだけで済むじゃないか
0626デフォルトの名無しさんNGNG
ソースより
MKY_UP_SBCS EQU 48E0H ;上方向入力時SBCSコード(↑)
MKY_DN_SBCS EQU 50E0H ;下方向入力時SBCSコード(↓)
MKY_LB_SBCS EQU 1C0DH ;左ボタン入力時SBCSコード(Return)
MKY_RB_SBCS EQU 011BH ;右ボタン入力時SBCSコード(ESC)


moukey.comファイル
$0030: 05B8 0D1C EB07 A802 7423 B81B 011E 53BB

$0032 にある $0D1C がマウス左ボタン用、リターンキーのコード
$003B にある $1B01 が右ボタン用のEscキーのコード

みたいです。
この部分を変更したいキーのコードに書き換えれば
マウスボタンのキーの割り当てが変更できると思います。

が、キーに対応するコードが分かりませんね。
$0D, $1B はリターンキーとEscキーのコードですが$1Cとか$01がくっついてるんで
何か資料がないと…
06278086使った事ないNGNG
左右スクロールはこんな感じか?
(1) キーコードを調べて左右キーのコードを定義する。

MKY_UP_SBCSEQU48E0H;上方向入力時SBCSコード(↑)
MKY_DN_SBCSEQU50E0H;下方向入力時SBCSコード(↓)
MKY_LF_SBCSEQU****H;左方向入力時SBCSコード(←)
MKY_RG_SBCSEQU****H;右方向入力時SBCSコード(→)

(2) 元のコードの91〜94行目の
MKY_ME_LCHK:
CMPByte Ptr[BP+MOUSEINF.X],0;無意味なキー入力を避ける為
JNZMKY_ME_LAST
TESTAL,01H;左ボタン

を下のように書き換える。つーか資料がないので全然分かりませんが。

MKY_ME_LCHK:
CMPByte Ptr[BP+MOUSEINF.X],0;X方向動作チェック
JZMKY_ME_LCHK_0
TESTAL,**H;X方向の符号 ← これも資料をあたって調べないと。
JNZMKY_ME_MINUS_Right
DB0B8H;MOVAX,MKY_LF_SBCS
DWMKY_LF_SBCS
JMPMKY_ME_KWRT
MKY_ME_MINUS_Right:
DB0B8H;MOVAX,MKY_RG_SBCS
DWMKY_RG_SBCS
JMPMKY_ME_KWRT
MKY_ME_LCHK_0:
TESTAL,01H;左ボタン
0628627NGNG
タブが完全に飛んでしまった。
つか、上下チェックでやってるコードを参考に
左右チェックのコードを書き加えれば動くんじゃないかなと。

ソースの75-90行あたりに上下チェックのコードが書かれてます。
0629デフォルトの名無しさんNGNG
ここあたりのscancode参照
http://www.asahi-net.or.jp/~bg3k-ysd/pocketlinux/src/keycode.txt
実際はDOSの内部バッファの2バイト形式なのでESCとRETがちょっと違うけど
左右はscancodeのままでよいので問題無し
0630デフォルトの名無しさんNGNG
>>624
>僕はアセンブラもDOSもダメです。
じゃあ諦めろよ。
それとも何か?「誰か改造して!」っていう依頼なのか?
0631デフォルトの名無しさんNGNG
ちゃんと答えてやったところで、アセンブル&リンクできるかどうか
非常に疑問だな。そもそもアセンブラとリンカはあるのかな?
0632デフォルトの名無しさんNGNG
>>623
ワロタ
0633リブポイントゲーマーNGNG
>>626さん

ありがとうございます。
これからアセンブラを始めてみます。

フリーのコンパイラとかあるんですかね?
ヤフオクで中古のコンパイラ捜すのもいいかな。
ターボーアセンブラのDOS/V版とかがいいのかなー
0634デフォルトの名無しさんNGNG
おお、がんがれ。
主要部分は50行程度だ。
0635デフォルトの名無しさんNGNG
ここで超亀レス
>>578
display/i $pc
を試してみよう
0636デフォルトの名無しさんNGNG
CODE領域への格納についてよくわかりません。
例えば、
addw $1234,%ax  ならCODE領域に格納する際に
6605 3412  です。6605がaddw、3412が1234を表す。
しかし、%axは、CODE領域に格納されていないように見えるのですが。
いったい、どういうふうに格納されているのでしょうか?
%axも数字にしないとどこに格納するかっていう情報がわからないと思うんですが。
0637デフォルトの名無しさんNGNG
>>636
8086?
8086は知らないけど6605に含まれてるんじゃないの?
addwを指定してるのは上位xビットで、
どこかの3ビットでレジスタを指定しているとか
そんな感じでオペコードは作られてるから。

 addw $1234,%bx

とかしたら6605の方が変化するんでない?
0638デフォルトの名無しさんNGNG
>>636
66 はサイズオーバーライド プリフィックス。
05 が add eax,〜
まぁ、結果的には変わらないが、念のため。

で、問題のaxの情報は、05 (axに特化した命令コード)の中に含まれる。
他の16Bitレジスタだと、05のところが 81 ?? になるんで、試して見るよろし。
ちなみに、例示されてるコードはこの81 ?? を使って 66 81 c0 34 12 とも表せるが、
長いのでメリット無し
0639デフォルトの名無しさんNGNG
>>637さん
>>638さん
どうも、レスありがとうございます。05にaxの情報が入るんですね。
最近、アセンブラを勉強し始めて最初につまったところです。
ほかの16ビットレジスタでも確認をしてみようと思います。
0640デフォルトの名無しさんNGNG
ax レジスタはアキュムレータ(積算器、加算器)レジスタって言って、
いくつかの計算命令で専用のコードが用意されてることがあるのです。
0641デフォルトの名無しさんNGNG
>>635
>display/i $pc
>を試してみよう
なんてCooooooooooooooooooLなんだ!!
私は今感動している!!

ありがとう!>>635

PS.ちなみに私は>>578ではないのであしからず。
0642デフォルトの名無しさんNGNG
>>641
めでたいな
0643デフォルトの名無しさんNGNG
女子高生に人気の
斡旋ブラ
好評発売中!
0644デフォルトの名無しさんNGNG
アセンブルポ
0645デフォルトの名無しさんNGNG
アセンブルマ
汗ブルマ
0646デフォルトの名無しさんNGNG
どんなブラやねん(w
0647デフォルトの名無しさんNGNG
アセンブラってCPUが理解するプログラムでしょ?
それなのにどうしてウインドウズのAPI呼び出したり
ウインドウやアイコンを表示したりできるのさ?

CPUの世界にはAPIもGUIも無いはずなのに
0648デフォルトの名無しさんNGNG
たまーにagaってるかと思えばこんなんか。
0649デフォルトの名無しさんNGNG
>>647の高度な縦読み/斜め読みを誰か解読してくれ。
0650デフォルトの名無しさんNGNG
BDOS EQU 0005H
CR EQU 0DH
LF EQU 0AH
EOS EQU 00
ORG 100H
LD HL,MESG
LOOP:
LD A,(HL)
OR A
RET Z
PUSH HL
CALL CHROUT
POP HL
INC HL
JP LOOP
0651デフォルトの名無しさんNGNG
CHROUT:
LD C,2
LD E,A
CALL BDOS
RET

MESG:
DB CR,LF,'あぼーん',CR,LF,EOS
END
0652デフォルトの名無しさんNGNG
        CPUが
          ウ
         コン
0653デフォルトの名無しさんNGNG
仮想マシンだヴォヶ
0654デフォルトの名無しさんNGNG
なつかしい命令がいっぱい。
0655デフォルトの名無しさんNGNG
>>643はCが何を吐いてるのか知らない馬鹿
0656デフォルトの名無しさんNGNG
>>655
>>643のPCはwindowsとCPUがバラバラに動いてるから
0657デフォルトの名無しさんNGNG
たとえCコンパイラがマシン語を吐いているとしても
それはマシン語からOSのAPIを呼び出せる理由の説明にはならない
0658デフォルトの名無しさんNGNG
>>643 じゃなくて >>647 じゃないの?
0659デフォルトの名無しさんNGNG
>>658
>>643は馬鹿などでは無いと言いたげだな
0660デフォルトの名無しさんNGNG
馬鹿ではない。ネタだ。
0661デフォルトの名無しさんNGNG
いや、ネタじゃなくてマジなんですけど
世間でもアセンブラでWin32は無理とか言われてるし
0662デフォルトの名無しさんNGNG
>>643 って、斡旋ブラなんだけど...。
0663デフォルトの名無しさんNGNG
>>662
655 名前:デフォルトの名無しさん[sage] 投稿日:04/05/17(月) 21:07
>>643はCが何を吐いてるのか知らない馬鹿

656 名前:デフォルトの名無しさん[sage] 投稿日:04/05/17(月) 21:08
>>655
>>643のPCはwindowsとCPUがバラバラに動いてるから
の自作自演がバレてるよねw
0664デフォルトの名無しさんNGNG
だってさ、アセンブラの機械語ってCPUが理解する0と1の数値の連続でしょ?
でもってAPIはDLLファイルに入っている関数でアルファベットの名前も付いてる

どうして01010101みたいな数列でファイルの中のプログラムを呼び出せるのさ?
0665デフォルトの名無しさんNGNG




                  O     S
0666デフォルトの名無しさんNGNG
void dumpClientRect(HWND hWnd) {
 RECT rect;
 __asm {
  push hWnd
  lea  eax, rect
  push eax
  call  dword ptr GetClientRect
 }
 _RPT4(_CRT_WARN, "(%d,%d)-(%d,%d)\n", rect.left, rect.top, rect.right, rect.bottom);
}

めっちゃ呼べるけどね...。
0667デフォルトの名無しさんNGNG
>>661
>世間でもアセンブラでWin32は無理とか言われてるし

無理ではないと思うよ。無茶かもしれないが。
http://www.vector.co.jp/soft/win95/hardware/se254476.html
0668デフォルトの名無しさんNGNG
つーか、RosasmっていうWin32バイナリを作る為のアセンブラもあるんだけどね。
0669デフォルトの名無しさんNGNG
>>664
>でもってAPIはDLLファイルに入っている関数でアルファベットの名前も付いてる

それもマシン語なんだが
0670デフォルトの名無しさんNGNG
なんだかなあ…
>>664
一度、アセンブリコード付きのコンパイルリストを出してみろ。
0671デフォルトの名無しさんNGNG
ダイナミックリンクの動作、仕組みが知りたいって事でしょ。
俺は知らんけど。
文字列をOSに渡してOSは指定されたものをメモリ上にロードして
よろしく実行してくれるんじゃないの?
0672デフォルトの名無しさんNGNG
bcc21 -S test.c
で、アセンブラコード吐けるんじゃなかった?
APIを使ったプログラムをCで書いてアセンブラではいたら、出て来るんじゃない?
0673デフォルトの名無しさんNGNG
誤 bcc21
正 bcc32
0674デフォルトの名無しさんNGNG
起動時にリンクするのと実行時にロードするのとでは
扱いがちょい違うよね。
0675デフォルトの名無しさんNGNG
>>661
できるけどめちゃくちゃ面倒なんで無理って言われているだけでできないわけじゃない。
http://www7.plala.or.jp/keny01/masm/103-05.html

プログラム(アセンブリ、Cその他何でも)からAPI呼び出せるのは、
リンクした後のEXEファイル内にDLLを呼び出すコードが埋め込まれるから。
そしてプログラムではそのコードを呼び出す形になっている
(ただしGetProcAddressの場合は別)
0676デフォルトの名無しさんNGNG
アセンブラできることが小さなプライドなんだろう。
そっとしとけよ。
0677デフォルトの名無しさんNGNG
せめてポート直叩きしたり、割り込みハンドラ定義したり、
Cのスタートアップを自力で書いたりしてくれないと、
アセンブラできるとは言って欲しくない。
0678デフォルトの名無しさんNGNG
>>677
全部Cでできるな
0679デフォルトの名無しさんNGNG
>>677
お前なんかPICに引き篭ってろ
0680デフォルトの名無しさんNGNG
678 いぢめた方が暇つぶしにはよさそうな…
0681デフォルトの名無しさんNGNG
Z80アセンブラのプログラムで、9000h番地から256バイト分のメモリの
値を、0,1,2,3・・・255の値で埋めるというプログラムを教えてください
最初はORG8000Hってかんじです。お願いします。
0682デフォルトの名無しさんNGNG
>>681
そんな難問ここにいる香具師に解かるわけないじゃん。
自分で考えたほうが早いって、絶対。
0683デフォルトの名無しさんNGNG
661必死だな
0684デフォルトの名無しさんNGNG
このスレは自慢房のオナニースレだから
0685682 != 661NGNG
>>683-684
たぶん俺にだよな?
681 に対して助言半分、厭味半分のつもりだったんだが。
0686デフォルトの名無しさんNGNG
>>685==1
0687682NGNG
>>686
お子ちゃまはもう寝なさい(大笑い
0688デフォルトの名無しさんNGNG
6809版

   ORG $8000
   LDX #$9000
   CLRA
LOOP STA ,X+
   INCA
   BNZ LOOP
   RTS
0689デフォルトの名無しさんNGNG
>>688 周囲の失笑を買うことが多くありませんか?
0690デフォルトの名無しさんNGNG
× BNZ LOOP
○ BNE LOOP
だったか。

>689
久しぶりに書いてみてぇ、とか思ったんで。
0691デフォルトの名無しさんNGNG
>>687
もう少しだけ論理のお勉強をしなさい
0692!= 687NGNG
>>691 突っ込むなら具体的におながいしたい。意味不明だぞ。
0693デフォルトの名無しさんNGNG
眠れないので、Z80は知らないけど勘で

 ORG8000H
 LD HL.9000H
LOOP:
 LD (HL),L
 INC L
 JR NZ,LOOP
 RET
0694デフォルトの名無しさんNGNG
朝起きたらこんなのが・・・
ということで、正しいかどうかわからないけど勘で
 LD HL,9000H
 LD B,0
LOOP1:
 LD A,R
 CP 122
 NOP
 JR NZ,LOOP1
LOOP2:
 LD A,R
 OR B
 LD (HL),A
 INC A
 AND 80H
 LD B,A
 INC L
 NOPを126個
 JP NZ,LOOP2
 RET
0695デフォルトの名無しさんNGNG
>>693 のでだいたいイイけど、
 INC L
LD A,L
OR A,A
 JR NZ,LOOP
としないといけない。 INC L ではPSWのZフラグは変化しないから。
>>694はなんか勘違いっぽい。
0696デフォルトの名無しさんNGNG
>>692
682 != 661→true(1) or false(0)、そしてレス番0はありえないから1と。
0697デフォルトの名無しさんNGNG
それと、ストアする場所が9000HからだからLを変化させるこの手法が使えるけど、
ストアする場所がchar[256]であるようなもう少し一般性のある問題にも通用するような
コードの書き方をするなら、>>688みたいにストアする内容はAを使うほうがよい。
 ORG8000H
 LD HL.#変数<----char array[256]だとしたら#array
SUB A,A
LOOP:
 LD (HL),A
 INX HL
 INC A
 OR A,A <----INC A でフラグが変化するかしないか未確認なので入れておく
 JR NZ,LOOP
RET は「8000H番地から始まるサブルーチンを書け」とは言ってないから必須ではない
0698デフォルトの名無しさんNGNG
テーブルを使う暴挙。
 ORG 8000H
 LD HL,TBL
 LD DE,9000H
 LD BC,0100H
 LDIR
 JR *
TBL:
 DEFB 00H,01H,02H,.....FFH
0699デフォルトの名無しさんNGNG
良い子の皆さんは真似しないでね。
ORG 8000H
LD HL,9000H
LD (HL),L
INC L
…(上の2行を合計255回繰り返し)
LD (HL),L
0700デフォルトの名無しさんNGNG
変わった方法で目立ちたいならこれ。同じく真似するべからず。
ORG 8000H
LD SP,9100H
LD HL,FFFEH
LD DE,FDFEH
PUSH HL
ADD HL,DE
…(上の2行を合計127回繰り返し)
PUSH HL
0701デフォルトの名無しさんNGNG
INC LでZは変化するはず
0702デフォルトの名無しさんNGNG
INC r でZは変化するね。おそらく次のいずれかと勘違いしたものと思われ。
・INC r (8bit) ではCは変化しない
・INC ss (16bit) ではどのフラグも変化しない
0703デフォルトの名無しさんNGNG
ORG8000H
ORG9000H
DATA 00H,01H,02H,...

ロードした瞬間にできあがってる。
0704デフォルトの名無しさんNGNG
そういえば、ウチのPC(Win9x系)のDosにdebug(C/C++とかJavaと
かのコンパイラー入れてるけどどうやら関係なさそうなうえに
日本語なんでDosの標準装備だと思われる。9ってコマンドがあって
?を入力するとアセンブリっつうコマンドがあったけどあれで
アセンブリ言語アセンブリできるの?

asm初心者なんで意味不明だったらスマソ。
0705デフォルトの名無しさんNGNG
       `ヽ、\
      、-‐一ァ '' ´  ̄ ``ヽ 、
      <  / /,.ィ ,..    \
       L,r'/,rT,フメ/ { ,ィ   ヽ─-- 、.._
       / 7/,r',r- ヽ   lフTト、 !   l \ー-
       { (/ { {::::::::::} ,r ,ニヽレメ ! }  \
.       Y  ヽニニン { {:::::::::} } | / ,'  r-
      /{       ゝヽ::ソノ !ニYヽiヽ}
    ∠  ヽ   ,. 、..  ``""  /ノ ノ
     └┐/\ ゝ、...)     ,.、../
       ´ /( ー  ..... ィ'´  l
      ,r':::::::::ヽ、_ ,ノ::ヽ Vヽ、ヘ}
      /:::::::::/` ー-‐´}::::l
.     /:::::::::::|     l::::::|
0706デフォルトの名無しさんNGNG
>>704
意味不明なのは、asm初心者だからでは無いような気がする。
試しに、日本語に翻訳してみた。

>うちのWin9x系PCのDosプロンプトにdebugというコマンドがあります。
>日本語でメッセージが表示されるので、C/C++やJavaとは関係ない
>Dos標準のコマンドだと思います。
> debugを起動してから、? を入力するとコマンド一覧が表示されますが
>その中にアセンブルというコマンドがありました。このdebugを使って
>アセンブリ言語をアセンブルすることが出来るのでしょうか?
0707デフォルトの名無しさんNGNG
>>704
大抵のPCには入ってるでしょうね。<debug
16bit 命令しか受け付けない上に
ワンステップアセンブラなのでラベルは使えません。
DOS 時代のデバッガですからねえ。
0708デフォルトの名無しさんNGNG
あ、因みに debug は Win2000 にも XP にも入ってますよ。
0709デフォルトの名無しさんNGNG
中学生にムキになるな。
0710デフォルトの名無しさんNGNG
「9ってコマンド」は?

…あ、9はとじ括弧なのか。
よく解読できたな。
0711デフォルトの名無しさんNGNG
>>710
あんたも、すごいよw
0712デフォルトの名無しさんNGNG
すげえ、感動した。
元は「多少冗長だけど、普通に意図は理解できる文章」なのに、
")"を"9"に変えただけで、これほど
「何いってんだか全然わけわかんねえ文章」になるなんて。
0713デフォルトの名無しさんNGNG
>>706はネ申
0714デフォルトの名無しさんNGNG
手元のキーボードだと Shift+'9' -> '(' なんだが...
0715デフォルトの名無しさんNGNG
うちも刻印はそうだが、>>714は日本語環境もそうなのか。
0716デフォルトの名無しさんNGNG
>>701,702 サンクス。しばらく書いてなかったんで忘れてた。
>>703 ワラタ そのすぐ後に704が来たから目立たなくなったが。
0717デフォルトの名無しさんNGNG
>>704
マジレス
http://www79.sakura.ne.jp/~third/programming/asm/assembly.html
0718デフォルトの名無しさんNGNG
>>714-715
OS がどんなキーボード(101 106 109 等)だと思っているかって話ですよね?
少なくとも『刻印』は関係ないんじゃないかと……(^^;
0719デフォルトの名無しさんNGNG
他のコンパイラはどのようなコードを吐くのか教えて下さい。

void f();

int g(int a, int b)
{
 if ( (a -= b) > 0 ) f();
 return a;
}

これについて、Borland C++ 5.5.1 で bcc32 -S -O2 -6 test.cpp の場合
push ebp
mov ebp,esp
push ebx
mov ebx,dword ptr [ebp+8]
;
;{
; if ( (a -= b) > 0 ) f();
;
sub ebx,dword ptr [ebp+12]
test ebx,ebx
jle short @2
call @@f$qv
; return a;
@2:
mov eax,ebx
;}

sub の時点でのフラグを使えば test をするまでもないと
疑問に思ったのですが、どうなんでしょうか?
0720デフォルトの名無しさんNGNG
>>719
gcc -S -O2 test.c
(gcc 3.3.2 AT&T形式)

 pushl %ebp
 movl %esp, %ebp
 pushl %ebx
 subl $4, %esp
 movl 8(%ebp), %ebx
 subl 12(%ebp), %ebx
 testl %ebx, %ebx
 jle .L2
 call f
.L2:
 movl %ebx, %eax

確かにtestなくてもいいよな。
試しにtestを削除してやっても、まったく問題なく動作する。
う〜む。
0721デフォルトの名無しさんNGNG
>>704は逆アセンブルして読んで下さい。
0722デフォルトの名無しさんNGNG
現在Windows98を使っていて、Z80の勉強しようと思い
vectorで「Z80CPU Assembler & Simulator」ってのを見かけたので
落として使ってみてるんですけど、解像度が低くて美味しくありません。
何か他に便利なフリーソフトはないでしょうか?
0723722NGNG
>>解像度が低くて美味しくありません

当方の解像度がSVGAでソフトの方がSXGA推奨なので orz
0724デフォルトの名無しさんNGNG
>>722
真のアセンブラマスターになるのに環境にこだわってはいけない。
未踏のジャングルを突き進む探検家や未知の洞窟を探索する冒険家のように
その場にあわせた環境に適応して生きていかねばならない。
0725722NGNG
>>724
ハッ! (゚д゚;)
申し訳御座いません、自分が甘えておりました、
今から 根性叩き直して参ります (゚д゚*)ゞ
0726名無し@沢村NGNG
おまいらよ、おれはつい最近つーか、たったいまさっきtcl/tkつーコンパイラの存在を知ったよ。
いまDLしてるところで、まだ開けて見てないんだが、Webでの説明を見た限りじゃなんか良さげだった。
つーか、GUIに関しては、Visual C++よりもちゃんとしたGUIアプリが簡単につくれるとのことだ。
ただ計算的な処理には不向きということだが、そこは何かC言語で書いて追加できるとのことだ。
おれはちょっとこのtcl/tkを調べてみるが、ホントにGUIに関して良さげだったら、いま開発中の「Vicual E++」は、
このtcl/tkで書き直してもいいな。Visual C++じゃエディタの予約語の色づけとかチョー面倒だしな…
そして内部のメインの処理だけをC言語で書くようにすればいいからな…
それができそうかどうかをまず調べてみようと思う。
次に調べたいことは、おれが次につくりたい高級言語に、tcl/tkはオープンソースらしいから、パクレる部分があるかどうかということだ。
ともあれ、おれのコンパイラの開発は飛躍的に前進しそうだな。
おまいらよ、おれはtcl/tkいま知ったぞ。おまいらは、tcl/tk知らなかっただろう?
0727デフォルトの名無しさんNGNG
二人は双子、似てない双子。
0728デフォルトの名無しさんNGNG
>>726
tcl/tkはインタープリタですが
●●●●TCL/TKなら俺に聞け●●●●
http://pc5.2ch.net/test/read.cgi/tech/1033628416/
0729デフォルトの名無しさんNGNG
それは、チックル・チーコ。
0730デフォルトの名無しさんNGNG
>>728
何となく検索してみた。

http://www.google.co.jp/search?hl=ja&ie=UTF-8&q=compile+a+gui+application+with+tcl%2Ftk+compiler+under+open+source+license&btnG=Google+%E6%A4%9C%E7%B4%A2&lr=
0731デフォルトの名無しさんNGNG
>>730
http://www.google.com/search?q=%22tcl%2ftk+interpreter%22
http://www.google.com/search?q=%22tcl%2ftk+compiler%22
0732デフォルトの名無しさんNGNG
>>719
testがある時とない時ではオーバーフローしたときの結果が違うヨ
a = 0x7FFFFFFF, b = -2
なんてのは試してみた?
0733732NGNG
ついでにいうと
>0のかわりに>=0を使った場合はtestを削れるような
コンディションコードがある
0734デフォルトの名無しさんNGNG
普通の感覚であれば、testは使う必要がないんだけどね。
Cの場合、intとintの演算結果はintになるからややこしい。
0735720NGNG
>>732
あれ、sub命令ってオーバーフローフラグを設定しないんだっけか。
0736デフォルトの名無しさんNGNG
>>732
えっ、以下になるので結果はあってるんでは?
2147483647(0x7FFFFFFF) - 4294967294(-2) = -2147483647(0x80000001)
結果、f()は呼ばれない。
0737736NGNG
げっ間違ってたです。ごめんちゃい。
>>736は忘れてください。
0738デフォルトの名無しさんNGNG
>>735
testあるなしで、>>732の場合結果は変わる。
デバッガで確認してみればいい。
0739デフォルトの名無しさんNGNG
guiといえば・・・
winasmなどがありますね・・・(windows apprication を作るIDE)
リソースもマウスでできるし、invoke命令も簡単に(invoke はMasm32
のApiCall命令)利用できるようになっていますし、簡単に自分好みの
IDEに作り変えることができますし・・・

ほかのIDEについてはここを参照するといいでしょう
ttp://board.win32asmcommunity.net/
ここのIDE(ただし全文英語)という欄を見ればたくさん面白いものが
のってますよ。
0740デフォルトの名無しさんNGNG
へー、winasmってフリーなんかね
0741デフォルトの名無しさんNGNG
フリーみたいですねー(制約などはあんまりなかったと思います)
まぁ、説明を読んでください。全部ではないですが、APIの自動検索
もできますしね。
 しかし、浮動小数点を実数で(つまりopenglなどの関数で、
invoke glcolor3f,0.1f,0.1f,0.1f
というように小数点をそのまま使うとエラーになり、.dataセグメント内でほかの代数で
たとえば
 .data
3dvector real4 <1.0,0.0,0.0,0.1,0.1,0.1,1.0>
などとして<>内は<vectx,vecty,vectz,x,y,z,α,>
など、vectx,y,z=は単位ベクトルの方向、x,y,zはベクトルの原点
などとして、 マクロを使って

coinvoke MACRO pInterface:REQ, Interface:REQ, Function:REQ, args:VARARG
LOCAL istatement, arg
FOR arg, <args> ;; run thru args to see if edx is lurking in there
IFIDNI <&arg>, <edx>
.ERR <edx is not allowed as a coinvoke parameter>
ENDIF
ENDM
IFIDNI <&pInterface>, <edx>
.ERR <edx is not allowed as a coinvoke parameter>
ENDIF
istatement CATSTR <invoke (Interface PTR[edx]).&Interface>,<_>,<&Function, pInterface>
IFNB <args> ;; add the list of parameter arguments if any
istatement CATSTR istatement, <, >, <&args>
ENDIF
mov edx, pInterface
mov edx, [edx]
istatement
ENDM
などとしているみたいですね。
0742デフォルトの名無しさんNGNG
>>741
追記(自己レス)
使い方は、たとえば、
coinvoke glvertex3i,addr 3dvector
などとしているようです。意味不明、&スレ汚しすいませんでした

0743MSNGNG
MASM32って、はっきり言って違法だから。
そこんとこヨロシク。
0744デフォルトの名無しさんNGNG
しかし、国籍と本名出しているのにつかまっていないところや、
自分でリンカやコンパイラ作ったところを見ると、(商標違反っぽいが)
違法なのかどうかあいまい(MSがあるのは訴訟国家アメリカなのに)
微妙っぽいですね。
0745デフォルトの名無しさんNGNG
Windowsのライブラリって、Windowsを買い、契約したときに使用権限が
与えられないものなんでしょうか?(そこのところ良くわからないです)
デルフィをだしているボーランド社もまた別のライセンス契約しているんでしょうか?
まぁスレッドが荒れるならこれ以上言及しませんが、とても疑問に感じました。
0746デフォルトの名無しさんNGNG
http://www.cecs.csulb.edu/~hill/cecs325/MASM32/HTML/LICENCE.HTM
masmって商標じゃないって事かなー?
0747デフォルトの名無しさんNGNG
先生!質問です。
下の関数をアセンブラにしたいのですが、うまくいきません。
voidblendbmp( LPDWORD bmp )
{
intx, y; LPBYTEwork, work2; BYTEa, b;
work2 = (LPBYTE)bmp; work = (LPBYTE)lpScreen;
for( y=0 ; y<480 ; y++ ){
for( x=0 ; x<640*4 ; x++ ){
a = *work; b = *work2; a = a/2; b = b/2;
*work = a + b;
}}}
アセンブラ化
_asm{
mov ebx,bmp mov edx,lpScreen mov ecx,480 mov ah,2
LY:
push ecx mov ecx,640*4
LX:
mov eax,[edx] div ah mov bl,al mov ah,2 mov eax,[ebx]
div ah
mov cl,al
add bl,cl
mov [edx],bl

LOOP LX pop ecx LOOP LY }
0748デフォルトの名無しさんNGNG
>>747
改行していないところだとおもうんですが、
mov eax,[edx]
mov edx,lpScreen
という風にしないと認識しなかったはずでは?(ほかの箇所も同様)
0749破壊神NGNG
>>748
自殺したら?
0750719NGNG
OllyDbg を導入してみました。
>a = 0x7FFFFFFF, b = -2
subのラインにブレイクポイントをしかけて、
testのラインをハイライトにしてポップアップメニューから
Binary -> Fill with NOPs
をやったり
(そのNOP置換を)UNDO
をやったりしました。
Jump is taken もしくは Jump is NOT taken となって
挙動が変化するようでした。

変化することは確認できたのですが、なぜこうなるのかわかりません。
どこらへんにブレイクポイントをしかけて、レジスタやスタックのどこを
注目すればいいのでしょうか?
それから、キャリーフラグとオーバーフローフラグは何が違うのでしょうか?
0751デフォルトの名無しさんNGNG
>>747
ようやくきづいた
div命令の使い方をまちがってる,
div命令はaxを対象としているので除算エラーが出る
よってshift命令を使うのが正解。
shr eax =eax/2と同じ(実際にやってみるといい)
>>749さまへ
しまった・・・Lanケーブルで首つってきます…はづかしい
0752デフォルトの名無しさんNGNG
sub ebx,dword ptr [ebp+12]
test ebx,ebx
jle short @2

って

sub ebx,dword ptr [ebp+12]
js short @2

でもいい感じがするけど。
0753752NGNG
あ、0のときダメだ。
忘れてくれ
0754デフォルトの名無しさんNGNG
なるほど。単純にSFが0かZFが1の時にジャンプが目的なのね。
今更理解したYo…。
0755デフォルトの名無しさんNGNG
>>754
なるほど。単純にSFが1かZFが1の時にジャンプが目的なのね。
でした。。
0756デフォルトの名無しさんNGNG
>>749はただの煽りだろ
気にせずにどうぞ。
0757デフォルトの名無しさんNGNG
いくらアセンブラ板住人といえど
(a-b)>0 と a>b の違いを知らないのはやばいだろ。
0758デフォルトの名無しさんNGNG
板?
0759デフォルトの名無しさんNGNG
signed or unsigned の話?
0760デフォルトの名無しさんNGNG
アセンブラ板ができたことを、ほんの少し妄想した。

↓アセンブラ板のスレッド一覧よろ。
0761デフォルトの名無しさんNGNG
(´_ゝ`)流石だよな俺らinアセンブラ板(´く_` )
0762デフォルトの名無しつぁんNGNG
アセンブラでActiveXコントロールって作れる?
0763デフォルトの名無しさんNGNG
7行プログラミングinアセンブラ板
0764デフォルトの名無しさんNGNG
NASM萌えAA化計画
0765デフォルトの名無しさんNGNG
C++は難しすぎ 難易度:2
0766デフォルトの名無しさんNGNG
【無謀】アセンブラでオブジェクト指向するスレ【無茶】
0767デフォルトの名無しさんNGNG
キャリーフラグなら俺に聞け
0768デフォルトの名無しさんNGNG
Z80がこの先生きのこるには
0769デフォルトの名無しさんNGNG
1行ずつ足してプログラムを作る@アセンブラ
0770デフォルトの名無しさんNGNG
NASMってなんで生きてるの?part3
NASM>>>>>>>MASN=糞w 0x02
CASLって頭悪すぎ(激藁
0771デフォルトの名無しさんNGNG
*g*a*s*厨*の*夏*休*み*
0772デフォルトの名無しさんNGNG
ブラ板の推奨ブラは何か議論するスレ
0773デフォルトの名無しさんNGNG
今時アセンブラなんて使ってる奴は人生の敗北者w
0774デフォルトの名無しさんNGNG
まぁフラグの話はIntelのホームページに解説書が載ってるので
それ見て学んでください。(シフト、ローテート命令など見てください)

ActiveX?そんなことよりもっと楽しい事ができますよ。
(考えない人にはわかりませんが)

敗北者?C言語がコンパイラによってアセンブラに翻訳されて、ようやくコンパイルするのに?
ハードウェア作る人にとってはC言語だけでは何もできんよ!(大きくて重くて)
何でそんなことがわからんとですか!
うーん貴官はよっぽど懲罰大隊がお似合いのようだ!それともシベリア送りか?
0775デフォルトの名無しさんNGNG
人生のフラグ立てる命令ってどこにあるんだろう
0776デフォルトの名無しさんNGNG
【人生の】私はアセンブルエラーでシベリア送りになりますた【敗北者】
0777デフォルトの名無しさんNGNG
単発質問スレ
お前ら Motorola 56kのアセンブラ助けて(;´Д`)
0778デフォルトの名無しさんNGNG
binutilsでクロス環境構築できない香具師は人生の敗北者
0779デフォルトの名無しさんNGNG
RISCって死滅しちゃうの?Ver.80686
0780デフォルトの名無しさんNGNG
彼女をアセンブラで構築したい
0781デフォルトの名無しさんNGNG
【Pentiumバグ有るらしいよ】 ここだけ時間が10年ずれてるスレ in 汗板 【回収祭】
0782デフォルトの名無しさんNGNG
【東京湾】セグメント漬け【沈めたろか】
0783デフォルトの名無しさんNGNG
【自称】2年間この板を荒らしつづけたある男【天才】
0784デフォルトの名無しさんNGNG
ネタスレにするなボケども・・・

話すこともないな。
0785デフォルトの名無しさんNGNG
もう埋め始まったの?
次スレどこ〜?
0786デフォルトの名無しさんNGNG
>>785
もちつけ
0787デフォルトの名無しさんNGNG
プレスコ買った香具師、SSE3について語るべし。
0788名無し@沢村NGNG
おみゃーらよ、おれの「「Visual E++」」がバージョンアップしたから見ちみれ。
実はおみゃーらよ、今度のバージョンから密かに裏機能をつけているのだ。
どんな裏機能だと思う?ふふふ…教えん!自分じ探せ、おみゃーらよ!

http://hp.vector.co.jp/authors/VA015412/
0789デフォルトの名無しさんNGNG
うるせーバカ
0790デフォルトの名無しさんNGNG
>>775
股間
0791デフォルトの名無しさんNGNG
何故、荒れてるのか。
それが問題だ。
0792デフォルトの名無しさんNGNG
燃料投入までしばし待てや
0793デフォルトの名無しさんNGNG
と、>>792は謎の言葉を残して去っていった。
0794デフォルトの名無しさんNGNG
ファビョーン!
0795デフォルトの名無しさんNGNG
アセンブラってCPUが理解するコードでしょ?
それなのにどうしてcall MessageBox〜とか中に書いて動くの?
0796デフォルトの名無しさんNGNG
アセンブラの参考書を探しているんですが、これは
読んだ方いますか?どうでしょう?
ttp://www.amazon.co.jp/exec/obidos/ASIN/4062606194/qid=1086178123/sr=1-7/ref=sr_1_10_7/250-3639103-1268207
0797デフォルトの名無しさんNGNG
MessageBox の先に、CPUが理解するコードが入ってるのだよ。


実際にはもうちょっと複雑だったりする。
いや、とんでもなく複雑だが。

いま話題がネタスレのスレタイ以外なさげなので
厨房質問大いにOK

だとおもわれ
0798名無し@沢村NGNG
おみゃーらよ、おれは昨日謎をかけたろ?
「Visual E++」に裏機能をつけたってな…わかるかな?
おみゃーらよ、それはマシン語とアセンブリ言語のハイブリッド化だったのよ。
まあ、アセンブリ言語のほうは、まだcall、ret、jmp、intの4つにしか対応してないけどな…
これから日々少しずつハイブリッド化を進行させる予定よ。
おみゃーらよ、このプロジェクトが完成した暁には、マシン語だけでも書け、アセンブリ言語だけでも書け、
またマシン語とアセンブリ言語をどんなふうに組み合わせても書ける、前代未聞の恐るべきプログラミングソフトができあがるぞ!!
自分じダウンロードしちみれ?おみゃーらよ?

http://hp.vector.co.jp/authors/VA015412/
0799デフォルトの名無しさんNGNG
>>798
ハイブリット化よりアイコン書換れ。
08008086使った事ないNGNG
callは8086の命令か。はじめマクロかと思た。
6809のBSRかJSR相当だとするなら
「現在のインストラクションポインタの値をスタックに退避してから
指定されたアドレスにジャンプする」という命令だと思う。

どこにジャンプするかの指定がcallの後に書かれる訳だが、例えば
call 0x1000
とすれば0x1000番地にジャンプするのだろう。

で、問題のcall MessageBox〜だが、この場合はその飛び先の指定に
ラベルが使われているだけで、ラベルの値はどこか別な所で
定義されているんだろうと思ふ。

MessageBox〜の値が0x1000と定義されていれば
0x1000番地に、MessageBox〜を処理するサブルーチンが
置かれているのだろう。
0801デフォルトの名無しさんNGNG
>798
こいつはタダのバカですね。(^^V
(アセンブラやマシン語の前に日本語勉強しれ)。
0802デフォルトの名無しさんNGNG
>>796
人工知能作ろうと思ってあ〜る読むよりは役に・・・立たないな。
0803デフォルトの名無しさんNGNG
>>795
アセンブラ自体をCPUが読んでるわけじゃなし、結局吐かれるバイナリはCと同じ扱い
0804デフォルトの名無しさんNGNG
>>798
言いたい事はわかったからまずソース出せ。
話はそれからだ。
0805デフォルトの名無しさんNGNG
>>804
凄いものを欲しがりますね
0806デフォルトの名無しさんNGNG
>>798
ハイブリッド化が何を意味するのか分からん。
0807デフォルトの名無しさんNGNG
>>800
MessageBoxを実際のアドレスに直すのはリンカとローダの仕事。
0808デフォルトの名無しさんNGNG
最終的にはOSの仮想マシンの仕事
0809デフォルトの名無しさんNGNG
>>800
>call 0x1000
>とすれば0x1000番地にジャンプするのだろう。
正確には、インストラクションポインタ+1000h。つまり相対アドレスだけどね。
0810800NGNG
>809
じゃあBSRの方か。サンキュ。
0811デフォルトの名無しさんNGNG
はじめて読む8086を読んでるんですけど、レジスタとかの
動き等がわかりやすい実行環境ってどうすればいいですか?
0812デフォルトの名無しさんNGNG
RISC
0813デフォルトの名無しさんNGNG
>>811
レジスタとかの動きがわかりにくいかどうかは君の理解力の問題だ。
CPUの状態をいちいち確認しながら動かしたいならデバッガ使え。
0814デフォルトの名無しさんNGNG
デバッガーがあればレジスタの状態を確認しながら実行できそうですね。
でも、フリーでお願いしたいんですけど、ありますか?
0815デフォルトの名無しさんNGNG
>>814
8086なら debug.exe でレジスタの値を見ながらステップ実行出来るが。
0816デフォルトの名無しさんNGNG
もっと画像でビジュアル的に見えるツールは無いのけ?

レジスタから転送してる様子とか
0817デフォルトの名無しさんNGNG
 .┌──────────┐
つ│.. GNU Visual Debugger..│
 .└──────────┘
0818デフォルトの名無しさんNGNG
>>815
debug.exeがあれば問題ないのですが…
どうしたら手に入るのですか?
0819デフォルトの名無しさんNGNG
>>818
OSが2000かXPならコマンドプロンプト開いてdebugと入力してみな。
0820デフォルトの名無しさんNGNG
95以上は標準でついてなかったっけ?
0821デフォルトの名無しさんNGNG
ttp://www.microsoft.com/whdc/devtools/debugging/installx86.mspx

漢ならカーネルデバッガ。
物理アドレスで暴れろ
0822デフォルトの名無しさんNGNG
何か嫌なことでもあったんですか?
0823デフォルトの名無しさんNGNG
コマンドプロンプトで打ってみたんですけど

「'debug'は、内部コマンドまたは外部コマンド、
操作可能なプログラムまたはバッチ ファイルとして認識されていません。」

となります。 (OSはXPです)


>>821
よくわからんです(´・ω・`)
0824デフォルトの名無しさんNGNG
ところでOS使わずにパソコン起動してそのまま動くようなプログラムはどうやって作るの?
例えばブートローダとかOSそのものみたいなものなんだけど

普通にVCとかでコンパイルしてもOSの上でしか動かないし
0825デフォルトの名無しさんNGNG
フロッピーにプログラム入れて、
PC起動した時にフロッピーの内容読み込むとか言う意味?
0826デフォルトの名無しさんNGNG
>>824
http://www.google.co.jp/search?q=7c00&hl=ja&lr=lang_ja
machineにもよるがな...
0827デフォルトの名無しさんNGNG
>>823
%SystemRoot%\system32\debug.exe
で起動できたらPATHが通ってない。

それでも起動できなかったら、これを使え。
ExDEB
http://www.vector.co.jp/soft/dos/prog/se008450.html
0828デフォルトの名無しさんNGNG
>>827
できました、ありがとうございます

普通の状態だとPATHは通ってるものなんですかね
こういうの始めようとしても最初で躓く人多いんじゃないかなぁ〜?
0829デフォルトの名無しさんNGNG
>>827
>ExDEB
よく使ったなぁ。しみじみ...
それ結構使えるよね。
0830デフォルトの名無しさんNGNG
>>828
普通、C:\windowsとかC:\windows\system32は初めからPATHに登録されてるはずだが…
0831デフォルトの名無しさんNGNG
>>830
そうなんですか…

昔、PATHを追加したときうっかり消してしまってたかもしれません。orz
0832デフォルトの名無しさんNGNG
アセンブラの勉強ってどうすればよういですか?
日立のSH2ってCPUでのアセンブラを学びたいです。
コンパイラもないしどうすれば…
0833デフォルトの名無しさんNGNG
>>832
GCC
0834デフォルトの名無しさんNGNG
いちおうデバッガー(なかなかおもろい)
ttp://home.t-online.de/home/Ollydbg/
おいておきます。
0835SH2ではないがNGNG
SH4のマニュアル、興奮しながら読んだ。
ベクトル関係がすごい。面白い。
0836デフォルトの名無しさんNGNG
>>835
それはDC専用だべ。(専用でもないか・・・)
いまならシェーダープログラミングでもっと楽しめますよ?
0837デフォルトの名無しさんNGNG
初心者ですがチュートリアルでパスワードのはいろいろあるんですが
ドングルを苦楽したいのですがヒントとかありますか?
callをnopにするとかdllファイルまでのたどり方とか
ぜひプロの方アドバイスをお願いします
0838デフォルトの名無しさんNGNG
>>837
プロから言わせて貰うと、ソフト買ってプロに金流れるようにしてください。
0839デフォルトの名無しさんNGNG
>>837
プロじゃないが、スレ違いだ
0840デフォルトの名無しさんNGNG
837です
スレ違いですか・・・すいません
0841デフォルトの名無しさんNGNG
>>837
>ドングルを苦楽したいのですがヒントとかありますか?
本当のプロならこんな事ですらヌルすぎてやろうとも思わないはず。
こんな事に時間を使わずにもっと他の事やるよ。
0842デフォルトの名無しさんNGNG
>>832
http://www.renesas.com/jpn/products/mpumcu/32bit/sh/architecture/index.html#2
から、アプリケーションノートに行って、
CPU編アプリケーションマニュアルを隅々まで読むのが確実。
無償コンパイラとかの開発環境もダウンロードできる。
0843デフォルトの名無しさんNGNG
ブートマネージャのMBMみたいなのでCDからもブートできたり
OSなしでCDやディスクの音楽再生できるのを作りたいのですが
どうやってアセンブルすればいいの?
0844デフォルトの名無しさんNGNG
Linuxの最小BOOTを構成して、ソースを追うんだ!
0845デフォルトの名無しさんNGNG
Win32 プラグラムに、パッチを当てるのに
既存コードを短縮する定石は?
084619NGNG
次スレは私に立てさせてください。
アセンブラ… (;´Д`) ハァハァ
0847デフォルトの名無しさんNGNG
>>846
>>21
0848デフォルトの名無しさんNGNG
>>843

次世代のBIOSがそんな感じだね
0849デフォルトの名無しさんNGNG
>>843
メインメモリが1MBの環境でもVRAMが32ぐらいあればいけそうだ
0850デフォルトの名無しさんNGNG
http://pcweb.mycom.co.jp/articles/2004/02/23/etbios/
こんなのをBIOSに頼らずに使いたいんでしょ。
0851デフォルトの名無しさんNGNG
BIOS使わずにBOOTなんぞできるわけねーだろ。
0852デフォルトの名無しさんNGNG
>>851
ROMくらい焼けますが何か?
0853デフォルトの名無しさんNGNG
誰か俺のかわりにアセンブリ言語のプログラム
作ってくもらえないか?
またはそういう掲示板を教えてくれてもよし
0854デフォルトの名無しさんNGNG
>>853
http://pc5.2ch.net/test/read.cgi/tech/1085867636/509
http://pc5.2ch.net/test/read.cgi/tech/1084544243/802
http://pc5.2ch.net/test/read.cgi/tech/1086612317/99
http://pc5.2ch.net/test/read.cgi/tech/1076157613/853
0855デフォルトの名無しさんNGNG
BIOSに頼らずにじゃなくてOSに頼らずじゃ無いの?
0856デフォルトの名無しさんNGNG
850のBIOSを落として解析とか
0857デフォルトの名無しさんNGNG
>>852
ROMライタがあれば、プログラミングの知識がなくても焼けますなぁ。

お前程度じゃ、BIOS抜きには作れないだろう。
0858デフォルトの名無しさんNGNG
Morphy OneのBIOSを(ry
0859デフォルトの名無しさんNGNG
Athlon64ってIA-32を拡張したような64bitプロセッサだそうですが
それなら汎用レジスタは8本のままで、ある命令は特定の
レジスタでないとダメとかいう制限もそのままなんですか?
0860デフォルトの名無しさんNGNG
>>859
いままでとおりです。
mul命令なら、被乗数がRAXで結果はRDX:RAXにはいる。
0861デフォルトの名無しさんNGNG
>>859
アムドへ逝ってデータシート拾って濃いと
ちうかぐぐればその手の資料は出て来ないか?

レジスタ(GPR)は64ビットが16本(SP含む)に拡張された。
XMM(SSEレジスタ)は16本に拡張された。
MULとかの制限は興味がないので覚えていないが
アドレシング、たいていのALUは対称的に使えたかと。

FP/MMXレジスタは64ビット8本のままだ( ・∀・ )


もちろんふつーの32ビットWindowsをインストールしている限りは縁のない話。
0862さっきゅんNGNG
AMD64では汎用レジスタもXMMレジスタも二倍の16個になってますが
命令によって使えるレジスタの制限は386とほとんど同じです。

AH〜DHレジスタと追加されたBPL,SPL,SIL,DIL/R8〜R15レジスタをひとつの命令で同時に
指定できないという新しい制限もありますが、xHレジスタ自体あまり使わないと思うので
こちらはほとんど問題にならないと思います。
# 覚えてないと稀にハマることがありますが・・・

また、拡張されたレジスタは従来のレジスタを使うより命令長が1バイト長くなることが多いので
スペース優先最適化をしたりパディング合わせをする場合は注意が必要です。

それらを踏まえ、SIL/DIL等の下位バイトレジスタが使えるようになった事でレジスタの価値は
ほぼ同列になり、汎用レジスタが2倍になった事でIA32よりも変数を多く使うプログラムが書きやすい
アーキテクチャになったと思います。
0863デフォルトの名無しさんNGNG
>>858
グラフィックが使えません。
0864さっきゅんNGNG
ちなみに、>>861さんが最後に言ったとおりOSが対応してないとまったく意味がありません。
正確には64ビットOSでも32ビットアプリからは拡張されたレジスタは使えません。
この辺は386で拡張されたレジスタとまったく事情が違います。

しばらくは、286や386がそうだったように、Athlon64も高速i386としてしか使われないでしょう。

さいごに拙作ですが64ビットのDOSっぽいOSを作ってるので宣伝しておきますね
http://sakyu.s39.xrea.com/
0865デフォルトの名無しさんNGNG
OSってどうやってアセンプルするの?
0866デフォルトの名無しさんNGNG
さっきゅんかわいいよさっきゅん
( ゚д゚)ハッ!この書き込みにデジャビュ
0867さっきゅんNGNG
      ┳
    / ̄ ̄\
    /xxx (,,゚Д゚) <呼んだ?
    lxxx (ノ   l)
    ヾxx   xメ
       U"U
0868デフォルトの名無しさんNGNG
>>864
高速i386では無くて、
「内部ポート構造とパイプライン構造の違うPentium4として」、
でしょう。MMX/SSE/SSE2命令は取り敢えず使えますから。
ただし、内部ポートの構造が違うことを認識していないと、
高速化しようと思って、逆にIPC詰まりを起こすことになるので注意。

…内部ポートの構造といえば、
Dothanのアーキテクチャの資料が見つからないなぁ。
PentiumM自体は、Baniasのときにチラッと見た覚えが有るんだけど。
0869さっきゅんNGNG
Pentium4自体高速386としてしか使われないことが多々あるのでー
たしかにMMXとかSSEとかわ386じゃないですね
0870デフォルトの名無しさんNGNG
LinuxにしろwindowsにしろカーネルレベルじゃMMXすら使って無いよ
0871さっきゅんNGNG
そうでもないよ
0872デフォルトの名無しさんNGNG
windowsは使ってないような気がするよ
0873デフォルトの名無しさんNGNG
レジスタも無限じゃないし
本当に必要なソフトのために開けとくってのは手かも
0874デフォルトの名無しさんNGNG
>>873
そういえば裏レジスタを割込み専用にしてクロック稼いだな
0875デフォルトの名無しさんNGNG
>>862
>AH〜DHレジスタと追加されたBPL,SPL,SIL,DIL/R8〜R15レジスタをひとつの命令で同時に

って、「movsx R15,ah」のような使い方ができないってこと?
0876デフォルトの名無しさんNGNG
今はともかくMMX出た当時はFPUとの切り替えのたびにペナルティー喰らうし
OSのカーネルごときがバンバン使ったら死ねるんですけど
0877デフォルトの名無しさんNGNG
0878デフォルトの名無しさんNGNG
>>875
そうらしい。今AMD64のPDF見ていたが、REXプリフィックス(0x40〜0x4f)というのが
新設され、これはBPL,SPL,SIL,DIL/AH,BH,CH,DHの切り替え及び、オペランドサイズ
32bit/64bitの切り替えに用いる。

つまりx86-64のint型が32ビットになった理由はオペランドサイズを64ビットにするには
REXプリフィックスが必要であり、命令長が1バイト大きくなるためであると考えられる。
これはもちろん設計段階で逆にする事も可能だったろうが(386の考え方で言えばそう
なったはず)64ビットのintというのはそうそう使われる機会がないのとやはりメモリ効率
であろうと推測される。32ビット→64ビットの過渡期にはあり得る選択だ。

そしてもちろんBPL〜DILとAH〜DHをREXプリフィックスで切り替える事なしにオペコード
を作る事も可能だったろうが、できるだけバイト長を短くするために、滅多に同時に使われ
る事がないであろう両者を切り離してしまったのだろうと推測される。そしてもう一つ大きな
必要性は、REXプリフィックスを何とか1バイト長で済まそうと考えたところにあるらしい。

アドレスモードは64ビットモードとコンパチビリティ・モードがあるが、大半は64ビットモード
でアクセスするため、アドレスサイズ切り替えプリフィックスは不要になっている。何とも
ややこしいオペコードマップだ。
0879デフォルトの名無しさんNGNG
当然ながら0x40〜0x4fはINC/DEC命令であり、これはRISC/CISC混在型アーキテクチャ
ではかえってパイプラインストールの原因となるためなるべく使わない事が推奨されて
いるが、それを思い切って削って使用したのはさすがAMDらしい。Intelならまずしなかった
だろう。INC/DECは無くなった訳ではなく2バイト命令になった。
0880デフォルトの名無しさんNGNG
ttp://64bit-os.org/x86-memo/w.i?cu--MGLIkP
↑↑x86-64がケチョンケチョンにけなされております。
0881859NGNG
>>さっきゅんさん
OS作ってんですねスゲエ
宣伝されていたサイトを拝見しました
0882デフォルトの名無しさんNGNG
現在プログラム板にはHSP関連スレに凶悪な荒らしどもが住みついています。

・HSPに関係の無い話題でスレッドを上げまくる
・HSPオフィシャルサイトの住人を名指しで誹謗中傷する
・重複スレを乱立させる

などの荒らし行為を行っています。
みんなで団結してム板のゴミどもを追い出しませんか?

【HSP関連スレ】
【皆のレイプ魔】HSP初質P25【WWEヲタ=ハゲ】
http://pc5.2ch.net/test/read.cgi/tech/1086878505/
HSP>>>>>>>>>>>>>C=糞w
http://pc5.2ch.net/test/read.cgi/tech/1071899663/
今日もどこかでHSP初心者が質問ですP19
http://pc5.2ch.net/test/read.cgi/tech/1084089079/
HSPについて
http://pc5.2ch.net/test/read.cgi/tech/1085149790/
0883名無し@沢村NGNG
おみゃ〜らーーーーーーーーーーーーーーーーーーーーっ!!!
おみゃ〜らさーーーーーーーーーーーーーーーーーーーーんっ!!!

http://hp.vector.co.jp/authors/VA015412/

「Visual E++」がねーーーーー
ついにメインウインドウをつくれるようになったよーーーーーー
きゃあーもううれしいーーーーーーーーーーーーーっ♪
おみゃ〜らーーーーーーダウンロードしてみちみれ。
そして「winsample」フォルダの中のMainsample.asmを「Visual E++で」開いちみり♪
そしてビルドツールバーを押して、次に実行ツールバーを押しちみり♪
ねーーーーーーー?ちゃんとメインウインドウが出てきたでしょ?ちゃんとエラーもないっしょ?
もうおれ天才ーーーー神ーーーーーーーーーー
おみゃ〜らーーーーーーーーーーーーーーーはあはあ…
0884デフォルトの名無しさんNGNG
>>883
Eって何? Executableか?
0885デフォルトの名無しさんNGNG
当然VisualE++はフルアセンブラで書かれてるんだろうな?
0886デフォルトの名無しさんNGNG
>>885
んなわきゃねーじゃん。
一年前まで『機械語』と『マシン語』を別物だと思ってた奴がつくったもんだぜ。
0887デフォルトの名無しさんNGNG
Linux/x86でgccの3.2.3なんですが、
void func(void) { char x[256]; } のような関数を作成して gcc -O0 -S してみると、

func:
pushl %ebp
movl %esp, %ebp
subl $264, %esp
leave
ret

のように、自動変数用に264バイトもとられてしまいます。どうも、配列を宣言
したときだけ多めに取られるようです。int x; だけだと普通に subl $4 になります。

なんでこうなってしまうのか教えていただけませんか?
overflow対策?
0888デフォルトの名無しさんNGNG
>>887
http://www.codecomments.com/A86_Assembler/message201820.html
にかいてありまつた。 ('A`)ヴェノア。
0889デフォルトの名無しさんNGNG
VBプログラマが引き起こしそうなバグの影響を緩和するとか。
ただしバグはバグだが。
0890デフォルトの名無しさんNGNG
─┬─┬─┬─┬─┐
  │  │  │王←沢村
─┼─┼─┼─┼─┤
  │  │  │  │  │
─┼─┼─┼─┼─┤
  │  │桂│桂│  │
─┼─┼─┼─┼─┤
  │  │桂│桂│  │
─┼─┼─┼─┼─┤
0891デフォルトの名無しさんNGNG
>>886
俺はそれよりも16進数文字列を メ モ 帳 に「B4 09 ・・・」と書いて保存し
拡張子をtxtからcomに変えれば実行できると思ってるのを見て目が取れた。

http://hp.vector.co.jp/authors/VA015412/kaisetu/hello.htm
0892デフォルトの名無しさんNGNG
>>891
>俺はそれよりも16進数文字列を メ モ 帳 に「B4 09 ・・・」と書いて保存し
>拡張子をtxtからcomに変えれば実行できると思ってるのを見て目が取れた。
すんげーワロタ!!
それともネタなのか?
0893デフォルトの名無しさんNGNG
>>892
http://hp.vector.co.jp/authors/VA015412/kaisetu/ooemi.htm
の最後を見るに・・・
0894デフォルトの名無しさんNGNG
だから格納したデータを関数の中で使おうと思ったら、もう一回「pop」してやらなければならない。
そして関数から戻る場合は最初に「pop」で取り出したアドレスをもう一回「push」してやらなければならないということだ。
(ここんところは、アセンブリ言語の入門サイトでさえ、間違ってるところがあるから、検索してみるといい♪)
http://hp.vector.co.jp/authors/VA015412/kaisetu/girl.htm

既存の概念にとらわれない斬新なコーディング手法だな・・・
0895デフォルトの名無しさんNGNG
>>894
それ読んでたら寒気がしてきた。
それ書いてる奴っていったい何者?
0896デフォルトの名無しさんNGNG
なにげにそのサイト、内容はともかくとして
結構な量を書いてるなぁ。
0897デフォルトの名無しさんNGNG
WONDER QUEST
0898デフォルトの名無しさんNGNG
沢村って真性?それとも釣り?
0899さっきゅんNGNG
沢村なんて存在しないよ
幻なんだ
0900デフォルトの名無しさんNGNG
Windows XP 64bit beta プログラミングについて
話題になってる場所教えれ。
俺がやりたいのは、32ビットアプリから64ビットDLLを呼び出すための約束事と
Linux, Cygwin で 64ビット実行形式.or.DLLをクロスコンパイルするノウハウだ。

Linux で Win32 PE をクロスコンパイルすることには成功している。

擦れ違いと言われないように念のため言い訳しとくが、
64ビットDLLだけアセンブラで書きたいというワケだな。
0901デフォルトの名無しさんNGNG
MSの開発サイトにいきゃーいっぱいあるんでね?
0902デフォルトの名無しさんNGNG
バイナリエディタならできる
0903900NGNG
とりあえず binutils-2.15 をひっぱってきた。

*** BFD does not support target x86_64-pc-pe.


うんこー
自分でやるか、あるいはバカ正直にDDK漁ってくるかー
(MSDN 加入してないよ〜ん)
0904デフォルトの名無しさんNGNG
漏れDQNだから沢村のどこがおかしいのか分からないよ
>>894とか、正しくはどうなってるの?
0905デフォルトの名無しさんNGNG
>>904
長いことやってないんで忘れてるけど
mov bx, sp
mov ax, [bx+2]
とかやってたような気がする。
0906デフォルトの名無しさんNGNG
>>905
bpのセグメントがデフォルトでSSだからbpを使う事の方が多いんじゃないかな。
DS! = SSの環境ではどうでもいいことだが。
0907デフォルトの名無しさんNGNG
スマソ。ゴミ残った。
DS = SSな。
0908デフォルトの名無しさんNGNG
>>905
おいおい、それを言うならこうじゃねーか?
push bp
mov bp, sp
mov ax, [bp+2]
0909デフォルトの名無しさんNGNG
少なくともメモ帳で十六進数書いて保存しても絶対動きません
0910デフォルトの名無しさんNGNG
>>909
...バイナリエディタ使えば動くでしょう…ってそこが間違いですね。
(ただし拡張子を.comとか、.exeにして機械語を各OSごとのフォーマット、
及び使用しているCPUの命令を形式どおりに打ち込めば動くかもしれないですね)

>>908
そうなってるかもしれませんね。ただしAPIの中には返り値をスタックにおくものも有りましたよ。
また、APIは普通に値をプッシュした後、callしてもOKなような気がします。(tasm、masm**ではそうだった。)

また、xchg [esp+8],[esp](この命令使った事無いんでちょっとおかしいかも…)
としたあとpopしてるかもしれないのでわかりませんね・・・
ちなみに、bpやspを使うとエラーになります。
0911デフォルトの名無しさんNGNG
沢村は__cdeclな関数を呼び出せない。
0912デフォルトの名無しさんNGNG
おまいらVisual E++落としまくってんじゃねーぞ。
newebがすげー重くなってんじゃねーか。
0913デフォルトの名無しさんNGNG
沢村はリバース金子勇。
0914デフォルトの名無しさんNGNG
>910
メモリどうしのxchg って出来なかったような気がする・・・が。出来たっけ?

>ただしAPIの中には返り値をスタックにおくものも有りましたよ。
ちと、disって見たいんで具体的なAPI名を希望。

あと、>>904からの正しいコードの話に追加なんだが、引数スタックを呼び出し先で破棄するのは
ret 2
とかやればいいんで、わざわざ自分でpush/popして調節する必要は無いっぽ
どうしても調整したいっていうんなら、例題の場合レジスタ上に戻るアドレスが有るんだから
pop bx
pop ax
 〜〜
jmp bx
とpushせずにレジスタ経由でジャンプして戻るのが定石。
0915デフォルトの名無しさんNGNG
サブルーチンコールしたものがスタックに値を保持するって、それ
コード依存な不正アクセスじゃないのかと。

たまたまそこに値が入ってただけだろう?
0916デフォルトの名無しさんNGNG
>>914
>ret 2(32ビットの場合はret4)
なるほど!そういう手がありましたか…

>>914-915
wsprintfがそうみたいです。(APIじゃなかったっけ・・・)
masm**でコンパイルして、vkdebugで調べたら、espが変化しています。ほかのPCはどうか知りませんが、スタックが増えていました。
(これが原因でよくエラーが出ました)
そこで、スタックを見てみたら、0000000hとなっていました。仕方ないので、
前後でespをほかの変数に保存する方法を使用しています。
0917さっきゅんNGNG
いやそれ普通に考え方間違ってるから・・・
cdeclとsdtcallについて小一時間勉強汁
0918デフォルトの名無しさんNGNG
Note: It is important to note that wsprintf uses the C calling convention (_cdecl),
rather than the standard call (_stdcall) calling convention. As a result,
it is the responsibility of the calling process to pop arguments off the stack, and
arguments are pushed on the stack from right to left.
In C-language modules, the C compiler performs this task.

注意 他の Win32 関数は標準的な呼び出し規約(_stdcall)を使いますが、
wsprintf 関数は C の呼び出し規約(_cdecl)を使います。その結果、
呼び出し側プロセスはスタックから引数をポップする必要があり、
引数は右から左へ向かってスタックへプッシュされます。
C 言語を使って作成したモジュールでは、C コンパイラがこのタスクを実行します
(呼び出された側がスタックをクリアします)。
0919デフォルトの名無しさんNGNG
>>916
>wsprintfがそうみたいです。(APIじゃなかったっけ・・・)
>masm**でコンパイルして、
いえいえ、USER32のAPIです。

>>917
鳥取もstdcallを小一時間typo汁
0920さっきゅんNGNG
ヽ(`Д´)ノ
0921デフォルトの名無しさんNGNG
WindowsAPIの業も深そうやのう。かかわりたくないもんじゃ。
0922デフォルトの名無しさんNGNG
おーい村沢
アセンブラでタブブラウザを作りたいのだが
アセンブラからCOMのコントロールを使うにはどうすればいいんだ?
0923デフォルトの名無しさんNGNG
C=A×Bって書けますか?
0924デフォルトの名無しさんNGNG
>>872
W2kはSSE
XPはSSE2使用
0925デフォルトの名無しさんNGNG
引数の個数が不定の場合のstdcallはcdeclと同じになる。
0926デフォルトの名無しさんNGNG
>>922

さすがに無理だろ
0927デフォルトの名無しさんNGNG
>>923
それは1つの命令でってこと? CPUによるよ!
0928デフォルトの名無しさんNGNG
Cで出来る物はがんばればマシン語でも絶対書ける


面倒だがなー
0929デフォルトの名無しさんNGNG
>>925
引数の数が不定だと __stdcall は無理だろ。
スタックの開放はなんとかなるとしても
シンボルの“_<関数名>@<引数のバイト数>”が作れん。
0930929NGNG
× 開放
○ 解放
0931デフォルトの名無しさんNGNG
COM系のAPI呼び出せれば出来るんで無いの
0932デフォルトの名無しさんNGNG
ATLのDLL使うのが楽
0933デフォルトの名無しさんNGNG
掛け算のプログラムを書いてください
0934デフォルトの名無しさんNGNG
move.w #1,d0
move.w #1,d1
muls d0,d1
0935デフォルトの名無しさんNGNG
// 限定条件無いならこれでOKじゃろ。
long kakezan( long a,long b )
{ __asm {
mov eax, a
mul eax, b
} }
// 乗算命令使わずに、とか言うなら別途書くけど。
0936935NGNG
こっちから限定条件出してあげやう。

乗除算命令、および条件判断を一切使わずに、
アセンブラで、整数の
a = b * c
を計算するプログラムを書け。
ただし、入力 b, c の有効精度は8ビット以上、
出力 a の有効制度は16ビット以上とする。
0937935NGNG
×有効制度
○有効精度
0938デフォルトの名無しさんNGNG
しつもーん
256x256の表があるものとしていいですか?
0939デフォルトの名無しさんNGNG
条件判断できなかったら表引き以外に方法あるの?
教えてエロい人
0940935NGNG
>>938
ダメとは言わないけど、出来たら使うな。判断はダメだけど、
フラグを演算に使うのは有り。

てことで、あと1時間で答え書くぞー。
0941デフォルトの名無しさんNGNG
おーい>>19=>>846。そろそろ準備しといた方がいいぞ。
0942デフォルトの名無しさんNGNG
>>940
まだ1時間待ってくれ
今来たばっかりなんだ
0943935NGNG
答える人おらんのかな。
0944935NGNG
んでは、18:30まで待ちましょ。
0945デフォルトの名無しさんNGNG
        まもなくここは 乂>>950盗り合戦場乂 となります。

      \∧_ヘ     / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
 ,,、,、,,, / \〇ノゝ∩ < >>950盗り合戦、いくぞゴルァ!!       ,,、,、,,,
    /三√ ゚Д゚) /   \____________  ,,、,、,,,
     /三/| ゚U゚|\      ,,、,、,,,                        ,,、,、,,,
 ,,、,、,,, U (:::::::::::)  ,,、,、,,,         \オーーーーーーーッ!!/
      //三/|三|\     ∧_∧∧_∧ ∧_∧∧_∧∧_∧∧_∧
      ∪  ∪       (    )    (     )   (    )    )
 ,,、,、,,,       ,,、,、,,,  ∧_∧∧_∧∧_∧ ∧_∧∧_∧∧_∧∧_∧
      ,,、,、,,,       (    )    (    )    (    )    (    )
0946デフォルトの名無しさんNGNG
漏れの課題がそれだorz
0947デフォルトの名無しさんNGNG
     \∧_ヘ     / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
 ,,、,、,,, / \〇ノゝ∩ < 950とり合戦いくぞゴルァ!!       ,,、,、,,,
    /三√ ゚Д゚) /   \____________  ,,、,、,,,
     /三/| ゚U゚|\      ,,、,、,,,                       ,,、,、,,,
 ,,、,、,,, U (:::::::::::)  ,,、,、,,,         \ ぶーぶーぶー /
      //三/|三|\              タリー
      ∪  ∪     (\_/)タリー    タリー   まだ早えよ〜
                (  ´Д)    タリー  タリー
                /   つ  (\_/)  (\_/)ノ⌒ヽ、
               (_(__つ⊂(´Д`⊂⌒`つ(´Д` )_人__) ))
0948935NGNG
んじゃ答え。
;IA-32 version 8bit unsigned multiply a:16bit = b:8bit x c:8bit
macromul1bit
. add eax, eax
. sbb edx, edx
. and edx, ecx
. add eax, edx
mend
mul8x8:
. movzx eax, byte ptr b
. movzx ecx, byte ptr c
. shl eax, 24
. mul1bit; mul1bit; mul1bit; mul1bit
. mul1bit; mul1bit; mul1bit; mul1bit
. movword ptr a, eax
. ret
0949935NGNG
ルーチン長くなるんでマクロ風にまとめたけど、概略はわかるでしょ。ミソは sbb edx, edx / and edx, ecx ね。
ただし、レジスタリネームの障害になるような処理(シフトを1個にまとめた)してるんで、P4とかじゃ、
かなーリ遅いと思われ。Z80とか向けかなぁ。他のCPUで挑戦してみてちょ。
0950デフォルトの名無しさんNGNG
950 (`・ω・´)シャキーン
0951950NGNG
で、スレタイは>>19にすればええの?
0952950NGNG
立てたよー。おいらは寝る

アセンブラ… (;´Д`) ハァハァ
http://pc5.2ch.net/test/read.cgi/tech/1087897801/
0953デフォルトの名無しさんNGNG
NOP
0954デフォルトの名無しさんNGNG
>>948,949
なるへそ
095519NGNG
>>950
おおお!!!ゲットされてた!!
スレタイ覚えててくれてありがとう!!!
アセンブラ… (;´Д`) ハァハァ
0956デフォルトの名無しさんNGNG
>>949
まあ、ニモニックの処理時間を計算しないと意味ないよな。
それをCPUが掛け算1個に内部で丸めてたらすごいがw

ただ、組み込みに使うようなCPUはビット操作は早いが演算は遅かったりするから
アセンブラいじってる人は使いたいんじゃないかな。

それ系のアセンブラアルゴリズム辞典とかもあれば読み物としても面白そうなンだがなぁ。
書いて出してよw
0957デフォルトの名無しさんNGNG
記念パピコ
0958デフォルトの名無しさんNGNG
>>929
遅レスだが、命名規約もcdeclと同じになるの
0959デフォルトの名無しさんNGNG
誰かお助け下さい
画像ソフトを作成しているのですが、アセンブラで書きたいと思ったのですが、
いろいろ調べたのですが、よく分かりません
// asmcodeの所に、*rをxorするのを書きたいと思うのですが、
ポインタ内の値をそのまま、いじる方法はあるのでしょうか
asm("xor %0,0ffffffh" : : "r"(*r)); ではないですよね。
uchar *r(img.bits());
uchar *g(img.bits() + 1);
uchar *b(img.bits() + 2);
uchar *end(img.bits() + img.numBytes());
while (r != end)
{
// asmcode
*r = *r ^ 128;
*g = *g ^ 128;
*b = *b ^ 128;
r+= 4; g += 4; b += 4;
} //gcc
0960デフォルトの名無しさんNGNG
32bitの画像ならこれでいいんじゃ?
_asm{
mov eax,r
l1:
xor dword ptr [eax],808080h
add eax,4
cmp eax,end
jb l1
}
0961デフォルトの名無しさんNGNG
>>960
ターゲットマシンがSPARCだったりしてw。
0962デフォルトの名無しさんNGNG
いえ、mips でつ。
0963デフォルトの名無しさんNGNG
Alphaが好きです
0964デフォルトの名無しさんNGNG
    DB  37 DUP (?)
0965デフォルトの名無しさんNGNG
    resb 36
0966デフォルトの名無しさんNGNG
90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90
0967デフォルトの名無しさんNGNG
バッファとかに

db '7777777777777777'

っての良く使ったっけ。逆アセすると

AAA
AAA
AAA
 …
AAA

になるから、デバッグ時にとても見つけやすいんだな。
0968デフォルトの名無しさんNGNG
PUSH
0969デフォルトの名無しさんNGNG
埋めろとか言われて久しいが全然うまってないなw
0970デフォルトの名無しさんNGNG
新しい方が釣堀になってしまったからな。
0971デフォルトの名無しさんNGNG
マヌケがCがない環境があるっつー指摘を理解できないみたいだが。
0972デフォルトの名無しさんNGNG
>>967
その手のネタだと0xdeadbeefが一番有名だと思うんだが。
0973デフォルトの名無しさんNGNG
某ドライバを逆汗してたら、
mov dword ptr [ecx+08],deadbeaf
mov dword ptr [eax+30],facedead
mov dword ptr [eax+30],deadface
なんてのがでてきた。
0974デフォルトの名無しさんNGNG
無効な値として有名なやつですな。
0975うめたいんでアゲNGNG
そうなんだ。独学でやってたから、聞いたことなかったなぁ。
当時はネットなんぞはやる余裕もなかった。
0976デフォルトの名無しさんNGNG
Windowsでもえらーで0xdeadbeaf吐くことがあるね
0977デフォルトの名無しさんNGNG
beefだーごめんよー
0978デフォルトの名無しさんNGNG
>>976
>>973のヤツは実はWindowsの一部。
なぜかbeefじゃなくてbeafになっていた。
0979デフォルトの名無しさんNGNG
win32で動くx86-64アセンブラってありますか?
0980さっきゅんNGNG
>>979
nasm文法でよければここから
http://www.tortall.net/projects/yasm/

gas文法が好きならここにあるgccとか
http://orange-pekoe.64b.org/cgi-bin/skynet/index.cgi

以下DAT落ちするので次スレへどうぞ
アセンブラ… (;´Д`) ハァハァ
http://pc5.2ch.net/test/read.cgi/tech/1087897801/
0981979NGNG
>>980
ありがとうございます。あるんですねw

WinXPのカーネルモードでLongモードにして遊んでいるのですが
64bitコードをハンドアセンブルさせるのは疲れるので助かります。
0982さっきゅんNGNG
素直にXP64使いませんか?(汁
0983デフォルトの名無しさんNGNG
>>981
プロテクトモードからLongモードに切り替えるには、ページングのOFF、ONが必要ですよね。
そのため仮想アドレスと物理アドレスが合っているメモリ領域を確保していると思いますが
どのような方法で確保したのでしょうか?
0984デフォルトの名無しさんNGNG
梅
0985979NGNG
http://pc5.2ch.net/test/read.cgi/tech/1063453024/156-
0986デフォルトの名無しさんNGNG
アセンブラ… (;´Д`) ハァハァ
http://pc5.2ch.net/test/read.cgi/tech/1087897801/
0987デフォルトの名無しさんNGNG
埋め
0988デフォルトの名無しさんNGNG
アセンブラ… (;´Д`) ハァハァ
http://pc5.2ch.net/test/read.cgi/tech/1087897801/
0989デフォルトの名無しさんNGNG
アセンブラ… (;´Д`) ハァハァ
http://pc5.2ch.net/test/read.cgi/tech/1087897801/
0990デフォルトの名無しさんNGNG
アセンブラ… (;´Д`) ハァハァ
http://pc5.2ch.net/test/read.cgi/tech/1087897801/
0991デフォルトの名無しさんNGNG
産め
0992デフォルトの名無しさんNGNG
アセンブラ… (;´Д`) ハァハァ
http://pc5.2ch.net/test/read.cgi/tech/1087897801/
0993デフォルトの名無しさんNGNG
産んだ
0994デフォルトの名無しさんNGNG
1000?
0995デフォルトの名無しさんNGNG
1000=
0996デフォルトの名無しさんNGNG
1000*
0997デフォルトの名無しさんNGNG
$1000
0998デフォルトの名無しさんNGNG
#1000
0999デフォルトの名無しさんNGNG
b
1000デフォルトの名無しさんNGNG
1000
10011001Over 1000Thread
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。