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

アセンブラ… (・∀・)イイ!

レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさんNGNG
めくるめく16進数。
機械語萌え。20 D4 FF FF 50 E8 8A DC FF FF 68 10 20 00 00 8D
45 B4 50 8D 85 B4 FB FF FF 50 6A 00 E8 7B DC FF
FF 8B E5 5D C3 00 00 00 FF FF FF FF 02 00 00 00
0D 0A 00 00 55 8B EC 83 C4 F4 84 D2 74 08 83 C4
F0 E8 82 C4 FF FF 89 4D F4 88 55 FB 89 45 FC 8B
45 FC 83 C0 04 8B 55 F4 E8 2B CD FF FF 8B 45 FC
80 7D FB 00 74 0F E8 B5 C4 FF FF 64 8F 05 00 00
00 00 83 C4 0C 8B 45 FC 8B E5 5D C3 55 8B EC 83
C4 F0 53 33 DB 89 5D F0 84 D2 74 08 83 C4 F0 E8
34 C4 FF FF 89 4D F4 88 55 FB 89 45 FC 33 C0 55
68 61 69 40 00 64 FF 30 64 89 20 8D 45 F0 50 8B
0002デフォルトの名無しさんNGNG
>1 機械語(マシン語)とアセンブラは違うと思われ….
0003デフォルトの名無しさんNGNG
アセンブラ教えてください
0004名無しさんNGNG
機械語は2進数と思われ・・・。
0005デフォルトの名無しさんNGNG
アセンブリ ∽ 言語
アセンブラ ∽ コンパイラ
アセンブル ∽ コンパイル
0006デフォルトの名無しさんNGNG
Borland ターボアセンブラ は
無料DLできますか。
0007デフォルトの名無しさんNGNG
>>1がアセンブラとマシン語を混同しているので
----------------- 終了 ------------------
0008デフォルトの名無しさんNGNG
>6 どうしても無料が欲しいの?

今なら1万5千円で買えるぞ
http://www.borland.co.jp/bcsuite/

DOSのC++コンパイラもついてるからワンダーウイッチにも使えるぞ
0009デフォルトの名無しさんNGNG
アセンブラは業務で仕方なくとか、
どうしても高速化したいときとかに使う物で、
趣味でやるもんじゃねーよ。
やったら最後、地獄にハマるんだなこれが・・・

高水準言語でお気楽に構えている方が正解だぜ。
0010デフォルトの名無しさんNGNG
nasmとかいろいろあるじゃん > フリーの
0011デフォルトの名無しさんNGNG
未経験だけど、アセンブリ怖い。変な命令書いたらCPUやメモリが壊れたりしない?
0012デフォルトの名無しさんNGNG
ハァ?
0013デフォルトの名無しさんNGNG
>>11
CPUは壊れない
しかしメモリメチャクチャ
ハードディスクぐちゃぐちゃってことはよくある
ウイルスより被害大(たった数字が1違っただけなのに〜)
なんてことはざらにある
001411NGNG
>>13
どひー・・・。それでは手が出せないなぁ。恐ろしや。
001513NGNG
普通はメモリの被害だけで助かることが多い。
ハードディスクへアクセスするにはそれなりに敷居があるからね。
0016デフォルトの名無しさんNGNG
Cで書こうがアセンブラで書こうが、危険性に大した差はない
HDDにアクセスって、デバイスドライバを書くのでもなければ
結局APIを呼ぶだけなので何が変わるわけでもない
0017デフォルトの名無しさんNGNG
Cで書けるようなことをわざわざアセンプラでやる必要はない。
>>16
の言っている程度のことでアセンブラを使うのは間違いである。
0018デフォルトの名無しさんNGNG
プロなら使ってもインラインのアセンブラくらいでしょ。
それも速度のためじゃなくてCじゃ書けない処理を行うため。
スーパースケーラーなCPUではパイプラインの動作を人間が
追いきれないので最適化でコンパイラに勝てるなどと思うのは
素人の浅知恵です。
もし、Cをアセンブラで書き直したら早くなったってのは元の
プログラムがダメだったってことだ。
001913NGNG
Cの最適化は最も適切な機械語コードを吐き出すわけではない。
部分的には最適化されていても、
全体を通してみると完全に最適化されいるわけではない。
アセンプラを使う理由はそこにある。
よってアセンブりコードはある程度複雑さを持っているということは自明であり、
複雑なことをするために相応の危険が伴う。
002013NGNG
>>18
あたりまえの事を言っているだけです。
0021デフォルトの名無しさんNGNG
はじめて読むマシン語、
はじめて読むアセンブラ

なら最近でも入手可能。

http://www.ascii.co.jp/searchA/namazu.cgi?idxname=www.ascii.co.jp&query=%82%CD%82%B6%82%DF%82%C4%93%C7%82%DE
0022デフォルトの名無しさんNGNG
>>19
別に危険は伴わないって
バグが発生しやすいだけ
何故アセンブラが危険を伴うと決めつけたがるんだ?
002319NGNG
>>22
アセンブラのバグ=危険なの!
あなたはアセンブラの経験が少ないのですか?
それともバグをあまりださない完璧な人だったのですね。
0024デフォルトの名無しさんNGNG
>>23
Cで書こうがバグがあったら危険だろ
アセンブラ云々は関係ない

Cで発生せずアセンブラでのみ起こるような危険など発生させたことはないが
具体例を挙げてみてくれ
0025デフォルトの名無しさんNGNG
>>13
>ハードディスクぐちゃぐちゃってことはよくある
無ぇよ
>ウイルスより被害大(たった数字が1違っただけなのに〜)
ハァ?

先入観と妄想が激しいようですな
0026デフォルトの名無しさんNGNG
>>24
例えばメモリのA番地からB番地までをクリアするコードを書いたつもりが
ループの終了条件を間違えてB番地以降もクリアしてしまった場合。
Cのコードならばsegmentation faultやアクセスバイオレーションで終了してくれるが、
アセンブラならばそのままメモリの最後までクリアしてしまう。
0027デフォルトの名無しさんNGNG
>>26
OS持っているメモリ保護機能はCで書こうがアセンブラで書こうが同じように動作する
アセンブラをなんだと思ってるの?
0028デフォルトの名無しさんNGNG
なんか、最適化で人間はコンパイラにかなわないって言ってるやつが
またいるよ(*´Д`*)

だったら、なんでCPUのアナライザなんか売ってんだよ。
人間の最適化が必要だからだろ。
0029デフォルトの名無しさんNGNG
1-44
グレート!
003013NGNG
>>27
わかった俺が馬鹿だった。80386以降はメモリ保護機能がついていたな。
0031デフォルトの名無しさんNGNG
>>27
ニーモニック"変換機"だと思われ
0032デフォルトの名無しさんNGNG
>>26
warata
00332NGNG
期待したんだがレベルの低いスレなのでsage

一般教養として身に付けとけ.アセンブラ判らないと
「キャッシュに載るように」なんてのも判らんだろ?
0034デフォルトの名無しさんNGNG
>>29
俺も「グレート!」です。
0035デフォルトの名無しさんNGNG
VC++のインラインアセンブラでジャンプテーブルを記述するにはどうしたらいい?
0036デフォルトの名無しさんNGNG
コンパイラに最適化で勝てない人間はアセンブラ触らないで下さい、って言う発言はダメ?
ああ、もちろん手作業で最適化するのは時間が掛かるけどね。
x86アセンブラなら色々idiomあるし、触っても良いじゃない。
0037デフォルトの名無しさんNGNG
>36
最適化なんてしなくてもいいように技術が進化してるんだから、過去の遺産は棄てなさいね。俺は32歳のプログラマーだけど、年収3000万だよ。
0038デフォルトの名無しさんNGNG
君らが書く位のアセンブリのルーチンならCのソースコードレベルで最適化した
方が速いんだよ。
そりゃ中にはそれ以上のことをやる人はいるけど、アセンブラで動く物作った
位で得意になってるようなやつには吉野家のコピペ貼っちゃうぞ。
0039デフォルトの名無しさんNGNG
>>37
自慢がしたいだけ?逝ってよし
0040デフォルトの名無しさんNGNG
>>36 イディオムなぞに頼っていてはプロセッサ変わっただけで通用しなくなるよ。
Pen3->Pen4とかの違いでもうだめじゃん。
0041デフォルトの名無しさんNGNG
>>9
>アセンブラは業務で仕方なくとか、
>どうしても高速化したいときとかに使う物で、
>趣味でやるもんじゃねーよ。
???
どっちかというと趣味でやる(やりたくなる)もんじゃないの?
高級言語だと靴の上から足を掻いてるみたいで気持ち悪い−もっとダイレクトに書いてみたい、という動機で。
0042デフォルトの名無しさんNGNG
>>41
そういう方はどうぞやってください。
0043デフォルトの名無しさんNGNG
ホビイスト(と限定しなくてもいいか)の知的探究心を満足させるものとしては最高だと思うよ。ソフトウエアの一番底、これより下はない、という所までのぞき見る事ができる訳だから。
ホビイストがプログラミングする動機は「面白いからやる、やりたいからやる」なわけだから、変な理由をつけて止める理由はないよね。
プロになった場合でもアセンブリの経験がないより、あった方がいいんでしょ、使わないまでも。
やりたい人はおおいにやりましょう。
0044デフォルトの名無しさんNGNG
x86のアセンブラプログラマの方っているんでしょうか?
もしいたら、どんな仕事してるかおしえてちょ!!
0045デフォルトの名無しさんNGNG
43の意見に賛成。
だけど、もう一方で普通の人はコンパイラに勝てないというのも正しいと思う。
そんなわけで、アセンブラを勉強するのに良い方法。
Cで簡単な関数を書いて、アセンブリソースを出力してみる。
これで勉強するとCでもアセンブラでも速いコードが書けるようになるよ。
0046デフォルトの名無しさんNGNG
キャリー萌え
0047キャリーNGNG
CPUの構成要素としてはただの1ビットに過ぎないがとてもカワイイ。
0048デフォルトの名無しさんNGNG
>>37
最適化しなくていい世界に住んでるあんたは幸せだな。
世の中そういうところだけじゃないよ。
0049デフォルトの名無しさんNGNG
物理的な構成要素としてはただの電圧の変化に過ぎないのがとてもピカチュウ。
0050デフォルトの名無しさんNGNG
x86 アセンブラ勉強したいなら 今ならDelphiから入ったらいいかもね
インラインアセンブラ強力だし
 Delphiのコンパイラの最適化は 多少弱いから 使う価値あるしさ
0051デフォルトの名無しさんNGNG
>>48
最適化はコンパイラがやってくれるので心配無用です
0052デフォルトの名無しさんNGNG
>>51
あんたはタイトなループをCで書いて満足な速度出せますか?
0053デフォルトの名無しさんNGNG
>>52
具体的にどんな処理を書くときの話?
005451じゃないけどNGNG
タイトなループが実行時間に大きく影響するようなプログラムを
書いて無い。
0055デフォルトの名無しさんNGNG
そんなにコンパイラの最適化って優秀なのか?
2,3年前の話だけど、本を見ながらソースをアセンブラに書き直したら
何割も早くなった事がある。
素人のおれがやっても、そんなだからプロがやったらもっと
速くなるんじゃないか?
それとも、この2,3年の間に飛躍的にコンパイラの技術が発展したとか?
0056デフォルトの名無しさんNGNG
ループを最適化する必要がある場合もあればない場合もある。
だがプロファイルもとらずに最初から高速化する奴はヴァカ
0057デフォルトの名無しさんNGNG
56がいいこと言った。・
>>55 飛躍したのはCPUだよ。動作が複雑化して単純な最適化は通用しなくなったのさ。
今自分が使ってるCPUに実行ユニットがいくつ有って、パイプライン何段だか知ってる?
0058デフォルトの名無しさんNGNG
アセンブラで最適化できる場合って
全く同じ処理を何度もする場合でしょ
そんなケースってほとんどない気もするけど
でも、今はいろいろCPUあるし・・・
だから意味ないと思う
0059名無しさんNGNG
>37
100万くれ
0060デフォルトの名無しさんNGNG
>>58
ゴゴゴゴゴルァ!!
自社ライブラリを各CPU毎にアセンブラで最適化する身にもなってみやがれ
氏ぬよもう
0061デフォルトの名無しさんNGNG
MSやらBorlandのコンパイラなら、人間最適化のほうがまだまだ優秀。
インテルのコンパイラは見たことない。
0062デフォルトの名無しさんNGNG
駄スレかと思ったら、けっこう議論が白熱しているね。
0063デフォルトの名無しさんNGNG
>>61
また知ったか君が・・・
でも人間を最適化出来たらそれが一番だろうな
0064デフォルトの名無しさんNGNG
>>62
内容は駄スレに値する程度のものしかありません
ここは抽象的な事を書いて知ったかするためのスレです
0065デフォルトの名無しさんNGNG
>>61 >>63
どっちでもいいから、煽ってないでなにか根拠を示せよ。
006658NGNG
>>60
アセンブラで最適化する必要のあるライブラリーってなんですか?
DSP以外にあるんでしょうか?
0067デフォルトの名無しさんNGNG
>>63-64
おまえが知ったかなんだろ?
アセンブラのコーディングなんてやったことないんだろ?
自分の部下にやらせているんだろ?
0068デフォルトの名無しさんNGNG
具体例も根拠も示さず最適化がどうのと語っている時点で
このスレが知ったかの固まりの駄スレであることは明白だろう
0069デフォルトの名無しさんNGNG
アセンブラは簡単に逆汗が通らない様なコードが書けるから、
パスワードの処理なんかに最適だと思うけど。
コンパイラなんかで書いていたら、すぐに解読されてしまうよ。
0070キャリー萌えNGNG
PC(プログラムカウンタ)   王様
SP(スタックポインタ)    魔法使い
ステータスレジスタ/フラグ   貴族
アキュムレータ/汎用レジスタ  雑兵
裏レジスタ           伏兵
セグメントレジスタ       嫌われ者
0071デフォルトの名無しさんNGNG
>>68
なぜ?
実際にアセンブラなんて使ったことなくても
コンピューターの仕組みがわかってれば
ある程度のことは予想つくのでは?
物理とか化学の勉強したことないの?
自然現象もその類
0072デフォルトの名無しさんNGNG
>>69
実行中の状況をトレースされたら終わりだと思うが?
0073デフォルトの名無しさんNGNG
>66
3D関係。リアルタイムだから間に合わなければ速くしなければ使い物にならないので。

あとLightwave, PhotoShopのプラグインなんかもコンパイラの対応していない
最新の命令(3DNOW!SSE2など)を使うためにアセンブラ使わざるを得ないんじゃないの?
よく知らないけど。
0074デフォルトの名無しさんNGNG
>>71
予想で適当なことを書くことを知ったかと呼びます
0075デフォルトの名無しさんNGNG
>>71
また、そういう意味のないたとえ話を…。
まぁ、机上の知識でもいいから、なんか具体的な話をしてみれよ。
0076デフォルトの名無しさんNGNG
明日はこのスレは根拠となるアセンブラコードでごちゃごちゃしているかも・・・
0077デフォルトの名無しさんNGNG
単純な例でアルファブレンドにしても、
3Dで複雑なワンスキンメッシュのモーフィングも
アセンブラ使わんとマトモな速度でないぞ
0078デフォルトの名無しさんNGNG
>>73
>3D関係。リアルタイムだから間に合わなければ速くしなければ使い物にならないので。
リアルタイムならフレームレートを落とすだけ
ムービーを作るときなどのレンダリングならリアルタイムである必要はないので
間に合わないもへったくれもない
だから3D関係だからというのは当てはまらない

>コンパイラの対応していない最新の命令
これは確かにアセンブラを使わなければどうにもならないが
0079デフォルトの名無しさんNGNG
昔のVRAMの構成で画像を1ドット左スクロールする場合とかアセンブリ使いたくなりそう。
今は構成が違うから関係なさそうだけど。
0080デフォルトの名無しさんNGNG
>>78
リアルタイム描画が必要な状況では、
フレームレートが落ちてると見苦しい事が多いので、
無理をしてでも稼ごうとするもの。

レンダラのプレビューならそれでも良いんだろうけど、
デモやゲームだと見苦しいよ
0081デフォルトの名無しさんNGNG
>>77
αブレンドは良く話題に出るがアセンブラを使わなくても高速化する方法は
そこらのゲーム作成系の掲示板でいつも話題が出る
後者はビデオカードの助けがないと、どっちみちまともな速度で動かない
0082デフォルトの名無しさんNGNG
>>72
そのトレーサーが使え無い様にする事もできるのだが。
0083デフォルトの名無しさんNGNG
>>81
その手の方法だと、トリッキーな演算するんで、逆に読みづらくなるよ。
それに、エロゲ作るんじゃないんだから、αブレンドだけで60fpsが出たからといって満足はしないよ。
フェード中にちびキャラいくつも動かしたいとか、要求はいくらでも出てくる。
0084デフォルトの名無しさんNGNG
>>82
てゆうかロジックがばれたら破られるパスワードなんて実際には使い物にならない。
0085デフォルトの名無しさんNGNG
3D関係はアセンブラで最適化できるほど、短い処理じゃないですよ
0086デフォルトの名無しさんNGNG
誰も実際のコード出さんな。
0087デフォルトの名無しさんNGNG
>>82
ロジックを解析しなくても、分岐を書き換えればそれで終わりです
0088デフォルトの名無しさんNGNG
>>85
別に全部アセンブラ化するわけではないし(場合のよってはやったが)、
先にCでプロトタイプ作っとけば、特に困難なわけではない。
ともかく高速化の要求が現実にある以上やらざるを得ないんだよね。

なんか未経験妄想君っぽいんでもう相手にするのは控えるよ。じゃあね。
0089ANGNG
SIMD使う為にアセンブラって言っても
X87FPUは全く知る必要は無いし、
Cで元のコード書いて、ループの中だけ
インラインアセンブラで置き換えれば良いだけと、
あんまりアセンブラの知識は必要なさそう。
0090デフォルトの名無しさんNGNG
>なんか未経験妄想君っぽいんでもう相手にするのは控えるよ。じゃあね
逃走
>先にCでプロトタイプ作っとけば
そんなしょぼいプログラムですか・・・
現代の話じゃないそうです
0091デフォルトの名無しさんNGNG
>>90 そんなしょぼいプログラムですか・・・

は?
0092デフォルトの名無しさんNGNG
ひ?
0093デフォルトの名無しさんNGNG
1ビットスクロール(指定されたメモリブロックを連続したビット列とみなして全体を1ビットシフトする)

ターゲットアドレスを変化させながら ローテート命令を必要回繰り返すだけ。

Cだとどうなる?
0094デフォルトの名無しさんNGNG
今日はもう放置しておいた方がよろしいかと
0095デフォルトの名無しさんNGNG
全部あぼ〜んしました。
0096ageNGNG
次の日になりました。
0097デフォルトの名無しさんNGNG
cdqってどういう意味ですか。
0098デフォルトの名無しさんNGNG
Convert Doubleword to Quadword
0099デフォルトの名無しさんNGNG
>>93
とりあえずリトルエンディアンなら

int *p, ld = 0;
for (p = startp; p < endp; p++) {
int d = *p; *p = d << 1 | ld; ld = (unsigned int)d >> 31;
}
こんな感じ(ビット並びにもよるけど)。でも、最近のCPUならこの処理
のネックはローテイトには無いでしょう。考えなきゃいけないのは、
1.データのロードストア方法(Dキャッシュ周辺)
2.パイプラインストールの回避。これは特にCPUに依存。

って辺りで。といっても、私自身はアセンブラ不要なんて考えは
さらさら無くて、ハードに近い部分や、特定条件(引数の範囲が
特殊でそれによる最適化が出来たり)での有用性はあるし、業務でも
使っているので、このスレで頭ごなしに否定している人を見ると
「なんだかなぁ」とは思うんだけど。
0100デフォルトの名無しさんNGNG
>>99
このスレで頭ごなしに否定している人ってどれのこと?
見あたらないんだけど妄想ですか?
0101デフォルトの名無しさんNGNG
>>CDQ
EAX と EBX を合体させて、
EAX を上32ビット、EBX を下32ビットとして、計64ビットの
レジスタとして使うって事?
0102デフォルトの名無しさんNGNG
>>101
違う。符号有り32bitを符号有り64bitに変換する命令。
EAXレジスタの最上位ビットが0の場合、EDXレジスタに 0x00000000 を入れる。
EAXレジスタの最上位ビットが1の場合、EDXレジスタに 0xFFFFFFFF を入れる。

こうして出来たEDXレジスタを上32bit、EAXを下32bitに使うことで
符号有り64bitとなります。
0103デフォルトの名無しさんNGNG
マクロアセンブラってどうよ?
0104_NGNG
VisualC++プロセッサパックってどうですかね?
3DNowの勉強したいんだけど、これは必須ですか?
0105デフォルトの名無しさんNGNG
>>104
プロセッサパック入れるとML.exeも入るね。
必須と言うか入れると便利かも。
nasmでも良いけど、MASMに慣れてるならこの方が良いね。
本気で使うなら、win32.inc付いてないから、DDK落すのが良いね。
あと、MASMのinvokeにはバグが憑いてるから注意。
0106デフォルトの名無しさんNGNG
高級言語が進出してきたとはいえ、組み込み系じゃアセンブラあたりまえ。

業務でJPEGデコーダ(ARM,C++)の高速化改造やってるが、
アセンブラ以前にアルゴリズムがヘボでバグで鬱。
0107デフォルトの名無しさんNGNG
SH-4ってかっこよさげ。
0108デフォルトの名無しさんNGNG
x86って組み込みで使うことってあるんすか?
そのときは結局PCアーキテクチャになんの?
それともBIOSやブートコードから自社内で作っていく?
そのへん興味あるんで業界の方お教えください。
0109デフォルトの名無しさんNGNG
>>107
SH系はクール
ペンティアムのように熱くならない。
SHが良くなってペンティアムを超えて欲しい。
インテルを超えて欲しいね。
0110109NGNG
無理だろうけど。
0111デフォルトの名無しさんNGNG
インテルのCPUは基本的に高くて小回りがきかない。
なので組み込みではx86は少数派。
でも、無いことは無い。

BIOSやブートコードは0から作ることはめったに無いんじゃない?
会社の守備範囲にもよるだろうけど。
私はファームに半分足を入れたミドルウェ屋だけど、BIOSは基本的に
ハード屋さんの書くもので、よほどのことが無い限りは手を入れること
は無いです。
0112デフォルトの名無しさんNGNG
>>111
レスThanksです、業界の方のお話は貴重です。
BIOSやりたいとか思うんすけど、日本じゃ難しそうですね。
0113デフォルトの名無しさんNGNG
要するに実行速度は

出来る奴が書いたCコード >>>>> ドキュンの書いたアセンブラ

って事でイイ?
0114デフォルトの名無しさんNGNG
>>113
それは間違いない。
0115デフォルトの名無しさんNGNG
他社のハードのBIOS書いてもそれだけじゃ商売にならないしね。
大きな企業の専門部所とか入ればチャンスはあるのかな・・・?
0116デフォルトの名無しさんNGNG
できるやつが書いたアセンブリ>>>>>>>>>>>>>できるやつが書いたCコード
0117  NGNG
できるやつ>>>>>>>>>>>>>>>>>>「できる」シリーズ
0118デフォルトの名無しさんNGNG
Ruby>>>>>>>>>>>>>>>>>>>>>>その他
0119デフォルトの名無しさんNGNG
二段ばね>>>>>>>>>>>>>>>>>>>>>出切るやつ
0120デフォルトの名無しさんNGNG
>>117
「できる」シリーズでプログラムかけるのか?(藁
0121デフォルトの名無しさんNGNG
>104
バグ(?)有りにつき注意>VCPP
ただ3DNowやSSE使うなら便利なのでバグ(?)にだけ注意してれば大丈夫
リリースビルド時にebxが__asm{}前後で保持されないので
自力でpush ebx,pop ebxしておかないとバグる
0122デフォルトの名無しさんNGNG
アセンブリだけで食っていけますか?
0123デフォルトの名無しさんNGNG
アセンブリだけで生きていけますか?
0124デフォルトの名無しさんNGNG
アセンブリだけでいけますか?
0125デフォルトの名無しさんNGNG
カンブリアは古すぎます。
0126デフォルトの名無しさんNGNG
昔はアセンブリ言語だけで生計をたてていた人もいたと思うけど。
いまでは絶滅したのでは。
普通はCもできるだろうからね。
0127デフォルトの名無しさんNGNG
Rubyが最強!Rubyが最強!Rubyが最強!Rubyが最強!Rubyが最強!Rubyが最強!
Rubyが最強!Rubyが最強!Rubyが最強!Rubyが最強!Rubyが最強!Rubyが最強!
Rubyが最強!Rubyが最強!Rubyが最強!Rubyが最強!Rubyが最強!Rubyが最強!
Rubyが最強!Rubyが最強!Rubyが最強!Rubyが最強!Rubyが最強!Rubyが最強!
Rubyが最強!Rubyが最強!Rubyが最強!Rubyが最強!Rubyが最強!Rubyが最強!
Rubyが最強!Rubyが最強!Rubyが最強!Rubyが最強!Rubyが最強!Rubyが最強!
Rubyが最強!Rubyが最強!Rubyが最強!Rubyが最強!Rubyが最強!Rubyが最強!
Rubyが最強!Rubyが最強!Rubyが最強!Rubyが最強!Rubyが最強!Rubyが最強!
Rubyが最強!Rubyが最強!Rubyが最強!Rubyが最強!Rubyが最強!Rubyが最強!
Rubyが最強!Rubyが最強!Rubyが最強!Rubyが最強!Rubyが最強!Rubyが最強!
Rubyが最強!Rubyが最強!Rubyが最強!Rubyが最強!Rubyが最強!Rubyが最強!
Rubyが最強!Rubyが最強!Rubyが最強!Rubyが最強!Rubyが最強!Rubyが最強!
Rubyが最強!Rubyが最強!Rubyが最強!Rubyが最強!Rubyが最強!Rubyが最強!
Rubyが最強!Rubyが最強!Rubyが最強!Rubyが最強!Rubyが最強!Rubyが最強!
Rubyが最強!Rubyが最強!Rubyが最強!Rubyが最強!Rubyが最強!Rubyが最強!
Rubyが最強!Rubyが最強!Rubyが最強!Rubyが最強!Rubyが最強!Rubyが最強!
Rubyが最強!Rubyが最強!Rubyが最強!Rubyが最強!Rubyが最強!Rubyが最強!
0128sageNGNG
>127 そんなにperlをバカにされたのが悔しいか?
0129デフォルトの名無しさんNGNG
MMX使いたいのだけど何からやったらいーの?
0130デフォルトの名無しさんNGNG
Z80>>>>Ruby

>>129 なんじゃそらw
013192NGNG
>>130 の不等号もなんじゃそらwだがな
0132デフォルトの名無しさんNGNG
>129
x86アセンブラはどの程度使える?
ソコソコ使えるなら
取り合えずMMXテクノロジ最適化テクニック辺りでも買ってきて読めや
VC使ってりゃインラインアセンブラでMMXは普通に使える
それ以外の処理系ならVCに変えろ
0133デフォルトの名無しさんNGNG
>>129
今月のC魔が買ってこい。
0134デフォルトの名無しさんNGNG
>133
あんなのintelのpdfの既出情報ばかりで役に立たんうえに
MMX最適化部分については殆ど述べてないじゃん
0135デフォルトの名無しさんNGNG
>>133
今更またMMXやってんの?
とりあえず漏れも>>134と同じく(?)Intelのpdfマニュアルお勧め
アプリケーションセンター逝けば、サンプルプログラムも結構ある。
0136デフォルトの名無しさんNGNG
【確認】

ABS関数は大抵のコンパイラで

MOV EAX X
CDQ
XOR EAX EDX
SUB EAX EDX

と展開されると書いてありますが、

MOV EAX X
CDQ
XOR EAX EDX
INC EAX

ではだめなんですか?
X が -8 だとすると、

EAX = 1111 1000

ですよね。

CDQ してやると、上位1ビットが1なので

EDX = 1111 1111

で、XORすると

EAX = 1111 1000
EDX = 1111 1111 ( XOR
-----------------------
EAX = 0000 0111

で、最後に1を足す部分ですが、

EAX = 0000 0111EDX = 1111 1111 (SUB
---------------------EAX = 0000 1000

としないで、

INC EAX

ではダメなんですか?
こっちの方が早い気がするんですけど。
0137デフォルトの名無しさんNGNG
では x=1 としましょう

CDQ ->EDX=0 EAX=1
XOR ->EAX=1
INC ->EAX=2

abs(1)=2 ですか?
0138デフォルトの名無しさんNGNG
>ABS関数は大抵のコンパイラで

って どこで読んだの?
0139デフォルトの名無しさんNGNG
cdqってキャリー立ったっけ?
立つなら、adc eax, 0で良いんじゃ?
0140デフォルトの名無しさんNGNG
と、思ったけど、別にsubだろうがincだろうが速度に違いはねーわな
0141デフォルトの名無しさんNGNG
>>138
http://www.infoeddy.ne.jp/~tensyo/prog/linealgo.htm#hypotenuse
0142138NGNG
多くの と 大抵 じゃ ニュアンス違うなあ・・・ 多くのだったら了解だ
0143デフォルトの名無しさんNGNG
c:\>debug
-a 100
2732:0100 mov dx,110
2732:0103 mov ah,9
2732:0105 int 21
2732:0107 mov ax,4c00
2732:010A int 21
2732:010C nop
2732:010D
-e 110
2732:0110 46.32 01.63 E8.68 08.21 D9.24
-r ip
IP 0100
:100
-g
0144デフォルトの名無しさんNGNG
xorの例

(a+b) xor b か (a xor b)-b が
 bがbitがall1の時に aの2の補数を
 bが0の時 aを返します


(a xor ((a xor b) and c))
  c=0の時 aを
  c=-1の時 bを返します
0145デフォルトの名無しさんNGNG
3D関係でCPUが非力なので浮動小数点計算なんざ重くて使えないときに
整数演算のためにアセンブラでイロイロ書いたなぁ。なつかしい(´ω`)
誤差は出るけどそれなりに高速で楽しかったYO!
0146デフォルトの名無しさんNGNG
>>143
それ、2chのどっかの板で見た。
0147デフォルトの名無しさんNGNG
x86でアセンブラやるには何がいいでしょうか?
gasはニーモニックが違うとかって聞くけど
x86系のアセンブラのいい本ないでしょうか?
とりあえずオライりーにはないよね
Linuxのカーネルソース読もうかとおもってるんだけどね
オライりーの詳解Linuxカーネルという本を買ってしまいました
眠気を誘う本だよね、みんな読んだ?
実際どれぐらいの人がカーネルソース読んでるの?
学生のうちに読んどけって聞くよね
セグメントとかページングとかはかなりの部分がx86がやってるらしいね
じゃ、やっぱx86系のアセンブラやらなきゃLinuxのカーネルソースは理解できないと
0148デフォルトの名無しさんNGNG
Delphiやっておけば大丈夫
0149デフォルトの名無しさんNGNG
>>147
NASMでいいんじゃない?リファレンスついてるよ。
入門編ならWebにいくつかある。
プロテクトモードの勉強するなら「はじめて読む486」がオススメ。
0150デフォルトの名無しさんNGNG
>>149
どこどこ、教えて下さい!!!
「はじめて読む486」は読みました。
正直まともなレスがつくとは思ってなかったのでうれしいっす。

http://bw-www.ie.u-ryukyu.ac.jp/~j97010/minix/minix.html
http://www03.u-page.so-net.ne.jp/da2/h-takaha/internal/index.html
↑このへんとかwebでも結構情報入りますよね。
0151デフォルトの名無しさんNGNG
今日C++といっしょにタダで落とした
ターボデバッガーのインストールしたけど
なんかMS−DOSって感じの画面
さあて旅客機でGOディスアッセンブルするど
0152デフォルトの名無しさんNGNG
>>150
googleで調べてすぐに出てくるものを人に聞くのは関心しないなぁ。
ほれ。

本家:http://www.web-sites.co.uk/nasm/
日本語マニュアル(一部):http://guriponn.tripod.co.jp/others/japanise/nasmdoc0.html

アセンブラの入門も一個紹介。

http://hp.vector.co.jp/authors/VA000124/index.htm

自分で調べてみても分からなかったことだけ聞くべし。
0153デフォルトの名無しさんNGNG
.text, .data, .bss の3種類のセグメントって要するになんですか?教えてください。
0154デフォルトの名無しさんNGNG
嫌です
0155デフォルトの名無しさんNGNG
>>153
次の言葉のうち、どれか知っていますか:
アーキテクチャ、アドレス空間、レジスタ
0156デフォルトの名無しさんNGNG
>>152
すまんですな。

ちなみにあなたCPUのアーキテクチャとか頭に入ってる?
Linuxのカーネルソース読んだことある?

一般的なプロのプログラマーはどんなもんなんでしょうね。
自分はまだ学生ですが
0157デフォルトの名無しさんNGNG
旅客機でGOディスアセンブル
push  ebp
mov  ebp,esp
push  FFFFFFFF
push  00406158
push  004038E8
mov  eax,fs:[00000000]
push  eax
とここまで来て思ったがintel8086ってスタックエリアに
定数そのままプッシュ出来たっけ?
0158デフォルトの名無しさんNGNG
>>156
CPUのアーキテクチャねぇ。
俺はアセンブラは趣味程度にしか弄らないから
一般教養程度しか頭に入ってないな。
名前以上のことを知ってるのは
IA-32、IA-64、68k、MIPS、SHぐらいか。
PowerPCやAlphaのことはまったく知らんな。
R2000とかだったら内部ダイアグラムを読むぐらいはできる。
でもあくまでも教養の範囲なんで
いきなり組み込み系の仕事をやれとかいわれても困る。
Linuxは触ったことない。ソースを一目見て反吐が出た。
どうでもいいが少し口の聞き方に気をつけた方がいいぞ。
0159デフォルトの名無しさんNGNG
>>156
何様のつもりだ。
0160デフォルトの名無しさんNGNG
textはコードセグメント
dataはデータセグメント
bssは初期化されていないデータセグメント
データセグメントはスタックセグメントと重なる場合もある。(DS=SS)
セグメントは物理メモリをリニアに見た時の覗き窓で、
8086のレジスタ仕様の64kByteまでしか一度に(効率的に)
アクセスできない制限を緩和する役目をはたす。
64kというのは、レジスタの長さが16bitなので、65536バイトまで。
0161デフォルトの名無しさんNGNG
>>158
結構知っとるやんけ
自分はLinuxをメインに使っている
Linuxの全てを知り尽くしたい
それでカーネルソースというわけ
そのうちemacsとかxwindowのソースも読んでみたい
口の聞き方は直らんのでゆるせ
くるしゅうない
0162デフォルトの名無しさんNGNG
>>160
おいおい、セグメントって何だよ。
セクションだろ
0163デフォルトの名無しさんNGNG
>>161
直らないんじゃなくて、直そうとしないだけ.
0164デフォルトの名無しさんNGNG
厨は本でも読んどけ
0165デフォルトの名無しさんNGNG
アセンブリブリウンコ
0166デフォルトの名無しさんNGNG
大回転アセン・ブリブリウンコーーーーーーーーーーー!!!!!!!!!!
0167デフォルトの名無しさんNGNG
CPUアーキテクチャを知らないのに
アセンブラっていうのもね・・・
動くコードしかかけないじゃん
x86系じゃ、わかってても高速化は無理みたいだけど
ところで、インテルのコンパイラよりも最適化できる人って
いるの?
0168デフォルトの名無しさんNGNG
どういうとこ直したのか教えてください
x86系じゃない人も
具体的にどこらへんを直した時に
どの程度早くなったのか教えてください
当然比較したコンパイラを書いてもらえないと、
かなり意味ないんですが・・・
0169デフォルトの名無しさんNGNG
>>167
動くコード以外に何を書くというのだ?

Intelのコンパイラもたいしたこと無い。
アレが完璧ならVTuneなんて売れるわけ無い。
つーか、VCよりも遅いこともあるし。
0170166NGNG
少しはからんで欲しかった(泣
0171デフォルトの名無しさんNGNG
ネタはプログラマ板でやれよな

>160
補足すると
 コンパイラが
text に コンパイルしたコードを吐く

data に static int x=0; みたいな変数を確保して かつ初期値を置く

bss には 初期化しなくていい変数を確保する
0172デフォルトの名無しさんNGNG
>動くコード以外に何を書くというのだ?
誰が読んでも、コンパイラよりも最適化されたコードって意味だろ

>Intelのコンパイラもたいしたこと無い
Pentiumに最適化するしたい時って・・・他に方法あるの?

で、Intelのコンパイラに問題があるなら
どのへんが問題なのか教えてくれよ
0173デフォルトの名無しさんNGNG
>>172
別に問題はないよ。
ただ、Intelのコンパイラが特別優れているというわけでもない。
0174デフォルトの名無しさんNGNG
>>172
>>動くコード以外に何を書くというのだ?
>誰が読んでも、コンパイラよりも最適化されたコードって意味だろ

それを言いたいのなら「動くコードしかかけない」ではなく
「動くだけのコードしかかけない」と書くべきだろ。

172の文も日本語的におかしいし駄目だこりゃ。
0175デフォルトの名無しさんNGNG
>>160-171
うわっ、とっても解りやすいです。
ありがとうございました。
0176デフォルトの名無しさんNGNG
日本語大事だよ。仕事でプログラムやるならプログラミング言語以上に。
0177デフォルトの名無しさんNGNG
>176 そりゃそうなんだけど、そういう話ふるなら プログラマ板でやってね

>>157
 それ 8086 のコードじゃ無いじゃない 386以後のコードだよね?
0178デフォルトの名無しさんNGNG
レベル低い
0179デフォルトの名無しさんNGNG
アセンブラで書くような処理を 低レベルって言うんだよ>>178
0180デフォルトの名無しさんNGNG
>>176
他のやつがソフトウエア工学をあまり知らなかったせいだと思われ
単なる動くコードっていうのは、
ソフトウエア工学でいう、まともな設計がなされてないコードの事
慣用表現のひとつだよ
0181デフォルトの名無しさんNGNG
>>180
じゃぁ、優良なコードは動くとは言わんのか?
ソフトウェア工学には 動くコード なんていう言葉の定義があるのか?
0182デフォルトの名無しさんNGNG
>>181
おい、あほまるだしだぞ?
0183デフォルトの名無しさんNGNG
3流童貞大学院生802警報です。すいませんが非難おねがいしまーす。(ワ
0184デフォルトの名無しさんNGNG
>>180
「単なる動くコード」と「動くコード」では意味合いが違うぞ。
もったいぶらないで「動くだけのコード」とか書こうぜ?
0185デフォルトの名無しさんNGNG
Windowsで目覚まし時計作りたいんです
アセンブラで作れますか?
0186デフォルトの名無しさんNGNG
802、童貞3流大学院生なら作れるのだが、、、うーん。どうだろう俺には無理だ。
802師匠に作ってもらうとイイ
0187デフォルトの名無しさんNGNG
>185 パソコンの電源入れっぱなしでいいなら作れますよ 
0188デフォルトの名無しさんNGNG
http://hp.vector.co.jp/authors/VA000124/index.htm

こことってもいいのですがちょっと古めですよね。
似たようなアセンブラ初心者向けのページがあれば教えてください。
0189デフォルトの名無しさんNGNG
>>188
3日経つと古いのか?
0190七誌興奮型NGNG
CASL !! CASL !! CASL !! CASL !!
CASL !! CASL !! CASL !! CASL !!
CASL !! CASL !! CASL !! CASL !!
CASL !! CASL !! CASL !! CASL !!
0191 NGNG
>185
いくらなんでもWindowsでは無理。
カシオやセイコーに就職しましょう。
0192デフォルトの名無しさんNGNG
>>147
gas のニーモニックは NASM, MASM などとは違いますが、基本的に一対一に
対応します。変換規則も単純ですから、どっちで勉強しても良いです。

> セグメントとかページングとかはかなりの部分がx86がやってるらしいね
Linux の仮想記憶のコードは x86 アーキテクチャにべったり依存していて極めて
ダサい(他のアーキテクチャでは、頑張ってソフトウェアで x86 をエミュレートして
いる)ので、勉強のために読むのは薦めませんけど。
0193 NGNG
MOVZX ECX,word ptr [EDI]
は、
mov ecx, 0
mov cx,[edi]
という意味なのですか?
0194デフォルトの名無しさんNGNG
アセンブラスレここしか
ねーじゃねーかよ!!!

いかにマイナー言語かがわかるな。
0195デフォルトの名無しさんNGNG
マイナーか否かなんて大した問題ではないのにな。
アセンブラ以外でMMXのコード書いてくれよ
0196デフォルトの名無しさんNGNG
>193 その理解で可

使う道具としてのアセンブラだけ で食うなら
1)DSPの類 ただしコーデング技術よりノウハウで食べるんだけどね
2)4ビット系 ただし競争相手は世界なんで・・・・

かな・・・ まあご飯食べたい為の仕事なら外の仕事がいいかも
0197デフォルトの名無しさんNGNG
>>195

ホラヨ。今は組み込み関数でも書けるんだよ。

__m64 m1;
m1 = _mm_xor_si64(m1, m1);

ちなみに、IntelC/C++Compilerもしくは、
VisualC/C++ + VisualC/C++ ProcessorPackでコンパイル可能。
GCCとかも最近は似たようなのを搭載しつつある。

肝心の性能だが、MMXでは、
適当にインラインアセンブラで書いたコードよりは速いのを吐いてくれる。
アセンブラできちんとパイプライニングしたものよりは多少遅い。

SSEに関しては、はっきり言ってとりあえずインラインアセンブラで書いてみました
程度の投げやりなコードでもアセンブラの方が断然速い。
まだコンパイラが成熟してないのか。

ただし、組み込み関数といえど、ほとんどアセンブリとニーモニックなので、
速度を追求してかいていくと
__m64 mm0,mm1,mm2,mm3,mm4,mm5,mm6,mm7;
とかレジスタ分の変数用意して、それだけしか使わず、
パイプラインも考慮して書いたりとかするようになるから、
結局アセンブラで書いた方が楽だったりする。
0198デフォルトの名無しさんNGNG
>>195

ホラヨ。今は組み込み関数でもかけるんだ。

__m64 m1;
m1 = _mm_xor_si64(m1, m1);

IntelC/C++Compilerまたは、
VisualC/C++ + VC ProcessorPackで使える。
最近は、GCCとかでも似たようなのを実装しつつあるらしい。

気になる性能のほうは、
MMXに関しては、何も考えずに適当に書いたインラインアセンブリのコードよりは
高速なコードを吐き出してくれる。
ちゃんとパイプライニングしたアセンブリコードの方が少し速い。
SSEに関しては、はっきり言って何も考えずに書いたアセンブリコードの方が
大分高速に動作する。まぁ、どうしてもアセンブリが理解できない人向け?

この手の組み込み関数使ってても、
速度を追求して逝くと、結局はレジスタの数とか
ニーモニックとの対応やパイプラインを考えていくと、
ほとんどアセンブラと変わらん内容になってしまうので、
あんまり使い物にならんが。
0199197==198NGNG
むぅ、回線切れたので書き込めてないと思ったが、
ちゃんと書き込めてたのか。2重投稿(しかも微妙に内容違う)スマソ。
0200デフォルトの名無しさんNGNG
>>197
インテルコンパイラに入ってる ivec.h なんかのベクタクラスライブラリを使うと

Is16vec4 m1; // 16bit符号付き整数×4
m1 = m1 ^ m1;

こんな風に直感的に書けるね。
0201197NGNG
>>200

そだね。でも、所詮は↑の組み込み関数のラッパーに過ぎないから、
直で組み込み関数使った方が実行速度は速いかな?
あと、実際には同じmmレジスタを8bitx8で扱ったり16bitx4で扱ったりとか
する場面が結構出てくるから、そういうときベクタクラスだとやりにくいかも。
02021NGNG
しかし、このスレ結構伸びてるな。
アセンブラスレに飢えていたのか?
0203デフォルトの名無しさんNGNG
>>191
なんでやねん!!
0204デフォルトの名無しさんNGNG
MASMとVC++のDOSでのコンパイラをリンクさせるにはどうすればいいんだろうか
入門以前の事について書いてるページとかないよね
0205デフォルトの名無しさんNGNG
>>204
DOSでって、16ビットコンパイラの話をしているのか?
0206デフォルトの名無しさん ?NGNG
>>203 なんでやねん禿堂。
秋月で買い物すればいいような気が。
0207デフォルトの名無しさんNGNG
>>204
ふつーにOBJファイルを生成したあとにリンクさせればいいじゃn
0208デフォルトの名無しさんNGNG
>>204
public
_
呼び出し規約
とか、その辺?
0209デフォルトの名無しさん ?NGNG
>>208
「MASMと…コンパイラをリンク」って書いてあるから
オブジェクトファイルをリンクさせるのとは
違う意味らしいよ。

>>204
Makefile を作っておいて、
nmake に Makefile を食わせればよい。
「入門以前」というより、ビルドを速くやるための浦和座というか…
裏技かよ?>漏れ
0210デフォルトの名無しさんNGNG
>>204
まず日本語入門サイトを探せ
0211204NGNG
おお、レスありがとうございます。

>209
そうなんです、それなんです。
でもlink.exeが上手く動かずに必ずエラーが出るんです。
C++をvcvars32やってDOSで使ってたんですが、DOSではclしかできないんでしょうか…

>210
すみません。
プログラム始めたばかりなので質問しようにも知識が足りなくて。
0212デフォルトの名無しさんNGNG
下のコードはDelphiのインラインアセンブラですが、
なぜloop1の方が速いのでしょうか?
命令数はLoop2の方が少ないのに。
loop1は↓にあります。
http://www2.big.or.jp/~osamu/Delphi/delphi-browse.cgi?index=049229

@@loop1:
MOVZX EAX, byte ptr [ESI]
MOVZX EBX, byte ptr [ESI+1]
MOV DL, byte ptr [EDI + EAX]
MOV DH, byte ptr [EDI + EBX]
MOV byte ptr[ESI], DL
MOV byte ptr[ESI+1], DH

DEC ECX
LEA ESI, [ESI + 2]
JNZ @@loop1

@@Loop2:
mov ax, [esi]
mov ax, [edi + eax]
mov [esi], da
add esi, 2

dec ecx
jnz @@Loop2;
0213デフォルトの名無しさんNGNG
>212
?
loop2のdaってなんだ?
あと、処理が全然等価に見えないのだが?
俺がバカなだけか?

しいて言うならloop2はPpro系(Ppro,P2,P3等)のCPUだと部分レジスタストールに
該当するので遅くなる

あとloop2は486とクラシックPentiumでアドレス生成インターロックも
発生するかな?

Pproの部分レジスタストールは確か5クロックぐらいだったと思うので
JNZを除くloop1のクロック数が8として
同様にJNZを除くloop2のクロック数がまぁ見えてる範囲で9クロックだな

P2、P3のみに限ればloop1は十分な速度だ
それ以外のcpuも考慮する場合は
MOVZX EAX, byte ptr [ESI]
MOVZX EBX, byte ptr [ESI+1]
を
XOR EAX,EAX
MOV AL, byte ptr [ESI]
XOR EBX,EBX
MOV BL, byte ptr [ESI]
にするべきだ

まぁなんにしろ>212よ
お前にはアセンブラは向かないから理解するのを諦めろ
0214213NGNG
グハ…ミスった
MOV BL, byte ptr [ESI]→MOV BL, byte ptr [ESI+1]
逝ってくるわ
0215デフォルトの名無しさんNGNG
>>212
ediには64KB(256x256)の置換テーブルがあるってことかな。
これによるキャッシュ溢れも原因かもね。

loop1もloop2もそうだけど、1ループあたりの処理データ量が少ないなあ。
一回分ぐらいはunrollしてもいいと思うけど。
0216212NGNG
>loop2のdaってなんだ?
axの間違いでした。

>処理が全然等価に見えないのだが?
リンク先を見れば分かりますが、
loop1は1バイトX256個 のテーブルを使っています。
そこで
loop2では2バイトX65536個のテーブルを使ってやってみたのです。

Delphiのコードはこんな感じです。

// Sの長さは偶数とする。
procedure Test7(var S : string );
var
 ConvTbl: array[Word] of Word;
 I: Integer;
 P: PWord;
begin
 for I := low(ConvTbl) to High(ConvTbl) do
  ConvTbl[I] := I;

 ConvTbl[PWord(PChar('AC'))^] := PWord(PChar('CA'))^;
 // スキップ...

 P := Pointer(PChar(S));
 for I := 1 to length(S) div 2 do
 begin
  P^ := ConvTbl[P^];
  Inc(P);
 end;
end;
0217212NGNG
関数の全ソースを載せておきます。
Test8(下のソース)を20回ぐらい連続して呼び出すと、
Test6と同じぐらいの速度になりました。
さっぱり分かりません。 Test6は↓にあります。
ttp://www2.big.or.jp/~osamu/Delphi/delphi-browse.cgi?index=049229

procedure Test8(var S : string );
var
 ConvTbl: array[Word] of Word;
 I, Count, Len: Integer;  P: PWord;
begin
 for I := low(ConvTbl) to High(ConvTbl) do   ConvTbl[I] := I;
 ConvTbl[PWord(PChar('AC'))^] := PWord(PChar('CA'))^;
 ConvTbl[PWord(PChar('AT'))^] := PWord(PChar('TA'))^;
 ConvTbl[PWord(PChar('AG'))^] := PWord(PChar('GA'))^;
 ConvTbl[PWord(PChar('CA'))^] := PWord(PChar('AC'))^;
 ConvTbl[PWord(PChar('CT'))^] := PWord(PChar('TC'))^;
 ConvTbl[PWord(PChar('CG'))^] := PWord(PChar('GC'))^;
 ConvTbl[PWord(PChar('GA'))^] := PWord(PChar('AG'))^;
 ConvTbl[PWord(PChar('GC'))^] := PWord(PChar('CG'))^;
 ConvTbl[PWord(PChar('GT'))^] := PWord(PChar('TG'))^;
 ConvTbl[PWord(PChar('TA'))^] := PWord(PChar('AT'))^;
 ConvTbl[PWord(PChar('TC'))^] := PWord(PChar('CT'))^;
 ConvTbl[PWord(PChar('TG'))^] := PWord(PChar('GT'))^;

 P := Pointer(PChar(S));
 Count := Length(S) div 2;
 asm
  pusha
  mov ecx, Count
  mov esi, P
  lea edi, ConvTbl
  xor eax, eax
 @@Loop:
  mov ax, [esi]
  mov ax, [edi + eax]
  mov [esi], ax
  add esi, 2
  dec ecx
  jnz @@Loop
  popa
 end;

 Len := Length(S);
 if not Odd(Len) then
 begin
  case S[Len] of
   'A': S[Len] := 'T';
   'T': S[Len] := 'A';
   'G': S[Len] := 'C';
   'C': S[Len] := 'G';
  end;
 end;
end;
0218212NGNG
>Test8(下のソース)を20回ぐらい連続して呼び出すと、
>Test6と同じぐらいの速度になりました。

毎回違う文字列でテストしたら、Test8は速くなりませんでした。
0219212NGNG
>215
>ediには64KB(256x256)の置換テーブルがあるってことかな。
Loop1は256バイトの置換テーブルです。

Loop2は64K*64Kバイトの置換テーブルを用意して、
2バイトづつ置換しています。
0220213NGNG
まずテーブルの生成ルーチンは外に出して静的にしろ
デカイテーブルをボトルネックになる関数内で作ってりゃ世話がない
アセンブラ以前の問題だ

あと128kのテーブルはキャッシュあふれする可能性が高い
というかあふれるだろ
テーブルはでかけりゃいいってモンじゃないぞ
CPUの1次キャッシュや2次キャッシュに巧く乗るように(極力1次キャッシュに乗るように)
してメモリ読込による遅延を隠蔽してやらんと場合によっちゃCPU演算した方が早くなるぞ

あとアセンブラ箇所のみ関しては部分レジスタストールしてるつってんだろ
それだけ聞いてわかんなかったら諦めろ
お前にはアセンブラは向いてないって言ってるだろ?
どうして『部分レジスタストール』でgoogle引くぐらいしないんだよ?
取り合えずfnami氏のHPでも見てこい
ttp://www.csl.sony.co.jp/person/fnami/asm.htm#PARTIAL
ttp://www.csl.sony.co.jp/person/fnami/asm.htm#STALL
CPUにもよるがちゃんと今のx86で手動最適化する技能を持った人間は
お前みたいなペアリング無視ペナルティー無視のコードは書かない
最近のCPUは短いコードを書けば速くなるわけじゃないんだよボウヤ
(無論無意味に長いのは問題外だが)
0221212NGNG
なぜ、Test8を同じ文字列で20回ぐらい連続して呼び出すと速くなるのでしょうか?

部分レジスタストールについては今やっています。
220さんありがとうございます。
0222212NGNG
@@Loop:
xor eax, eax
mov ax, [esi]
mov ax, [edi + eax]

これだけで部分レジスタストールは回避されるのでしょうか?
0223213NGNG
純粋にキャッシュヒットしてるんじゃないか?>連続呼び出し
実はCPUがクルーソーとかいうオチを期待しているぞ(藁

>222
まぁ部分レジスタストールしてるのはそこだけだね
ただレジスタ衝突もしてるんで
 @@Loop:
  mov ax, [esi]
  mov ax, [edi + eax]
  mov [esi], ax
↓
 @@Loop:
  xor eax,eax
  mov ax, [esi]
  mov bx, [edi + eax]
  mov [esi], bx
とするべき
対象CPUがP2以降ならAGIストールは発生しなかったはずなんで
AGIストールは無視する?
番地をレジスタに生成直後にその番地へアクセスするとストールする<AGIストール
上記なら
  mov ax, [esi]
  mov bx, [edi + eax] <ここでAGIストール
となる
なのでまずこういうコードは書かないよ<真にチューニングするべきルーチンでは
0224デフォルトの名無しさんNGNG
繰り返すことで
プログラム/テーブル/入力文字列/出力バッファ
の全てが1次あるいは2次キャッシュに乗るからでないの?

テーブルは全体でなく、
入力文字列を処理するのに必要な分だけ乗ればいいことに注意。
0225213NGNG
ちなみに言っておくと俺ならP2ではloop1以上の最適化はできない
(asm部分では考えうる限り最速のチューニングしてるよ
逆に言うとloop2をloop1に近い形にもっていくのが速度の秘訣だ)

あ〜ebpまで使えばなんとかなるかな?>loop2でも

Count := Length(S) div 4;
 asm
  pusha
  mov ecx,Count
  mov esi,P
  lea edi,ConvTbl
  mov ebp,ecx
 @@Loop:
  xor eax,eax
  mov ax,[esi]
  xor ebx,ebx
  mov bx,[esi+2]
  mov dx,[edi+eax]
  mov cx,[edi+ebx]
  mov [esi],dx
  mov [esi+2],cx
  add esi,4
  dec ebp
  jnz @@Loop
  popa
 end;

つーかdec ebpって美しくないなぁ(´Д`;)
4byte/10クロックでペナルティーは見受けられないから
loop1の2byte/8クロックよりは速いかな(ただし要大容量キャッシュ)

はっきり言ってアレだけど真面目な話
コンパイラの最適化に任せるべきだよ>212君
ペアリングとレジスタ衝突、様々なペナルティーとキャッシュ周りを
きっちり考えて最適化しないと逆に遅くなるからね>今のCPUは
コンパイラはその辺考えたコード結構吐いてくれるんで
現行のCPUに関する詳しい知識がないならアセンブラによる最適化はお奨めできないよ
0226デフォルトの名無しさんNGNG
あちゃーsageそこねた
0227デフォルトの名無しさんNGNG
loop1はまだunrollする余地があるので最適でないね
0228213NGNG
まぁアンロールできるけど
実質的なチューニング的には殆ど終わったも同然でしょ?>loop1
0229デフォルトの名無しさんNGNG
そうだね。 すでに1回アンロールしてるようなもんだし、さらにやっても1割かな

 それに、こういう場面じゃアセンブラで書いても 頑張っても2〜3倍程度しか
変わらない。
 同じ時間を割くなら もっと生産的な部分に注力した方がいいと思うな

それでも、どうしてもなんとか高速にしたいなら PCMPEQBで8バイト
同時に比較してはXOR・ANDマスクして置換すれば・・・・うーん
でも英大文字を英小文字にするとか一方向置換にしないといけないし
1ループで4回の置換作業が必要だから 速くなるかどうか判らないな
0230213NGNG
>229
漏れも思って取り合えず考えはしてたんだが余計遅くなった(´Д`;)>pcmpeqb
movq mm0,[esi]

movq mm1,mm0
movq mm2,mm0
pcmpeqb mm1,mm4
pcmpeqb mm2,mm5
pand mm1,mm5
pand mm2,mm4
por mm1,mm2
movq mm3,mm1

movq mm1,mm0
movq mm2,mm0
pcmpeqb mm1,mm4
pcmpeqb mm2,mm5
pandn mm1,mm0
pandn mm2,mm0
por mm1,mm2
por mm3,mm1

movq mm1,mm3
movq mm2,mm3
pcmpeqb mm1,mm6
pcmpeqb mm2,mm7
pand mm1,mm7
pand mm2,mm6
por mm1,mm2
movq mm0,mm1

movq mm1,mm3
movq mm2,mm3
pcmpeqb mm1,mm6
pcmpeqb mm2,mm7
pandn mm1,mm3
pandn mm2,mm3
por mm1,mm2
por mm0,mm1

movq [esi],mm0
add esi,8
dec ecx
色々突っ込みどころ満載な上に動作確認もしてないんで
これに関する言及は勘弁してくれ(取り合えず並べただけなんで
最大の敗因は文字列に4本も使ってしまいmmxレジスタが足りなくなったことだ……
0231pcode 本人NGNG
懐かしいね。
もう一度アンロールしても手間の割には早くならない。

「アセンブラで書けば速くなる」という迷信を砕くのが目的だった
から、アセンブラグルの方々、212 の無知を許してやってくれや。
0232デフォルトの名無しさんNGNG
あと、MMX化すれば何でも速くなると思っている人も多い。
最近では「P4はSSE2最適化すれば何でも速くなる」と思っている人が多い。
0233197NGNG
>>232

ある意味真でもあるんぢゃない?
少なくとも浮動小数点演算に関しては、
x87命令つかうよりもSSE/SSE2のスカラ演算命令の方が速いと
インテルが主張していたような。
その証拠(?)に、インテルのコンパイラには、浮動小数点演算を
x87命令を使わずにSSE/SSE2のスカラ命令を使うってオプションがついてた。

ちなみに、Pentium!!!で試したところ、実行速度に差違は見られなかった。
誰かPentium4で試してみてよ。
0234デフォルトの名無しさんNGNG
>その証拠(?)に、インテルのコンパイラには、浮動小数点演算を
>x87命令を使わずにSSE/SSE2のスカラ命令を使うってオプションがついてた。

そんなオプションないよ。
x87とSSE/SSE2を併用するというオプションはあるけど。
またx87,SSE/SSE2併用オプションでコンパイルしてもほとんど速くならないケースは多い。
あとP4の場合、SSE/SSE2スカラの加算命令は、2クロック毎に1つしか実行できないから、
x87の加算命令の半分のスループットしか出ない。
0235229NGNG
>>230 なるほどねえ。 で1方向置換じゃなくても出来そうだね


1回の交換が

1) @1 := @0 XOR "AAAAAAAA"
2) @2 := @0 XOR "TTTTTTTT"
3) @3 ;= pcmpeqb(@1,all0)
4) @4 ;= pcmpeqb(@2,all0)
5) @2 := @2 AND @3
6) @1 := @1 AND @4
7) @1 := @1 OR @2
8) @0 := @0 XOR @1

 でこれが1ループで2回必要だから、やっぱり改善にはならないかもねえ
0236229NGNG
書いてみたら 230さんより少し短くてスムけど あんまり変わらない

movq mm0,[eax]

movq mm1,mm0
movq mm2,mm0
pXOR mm1, qword ptr tblA
pXOR mm2, qword ptr tblT
movq mm3,mm1
movq mm4,mm2
pCMpeqB mm3,qword ptr tbl0
pCMpeqB mm4,qword ptr tbl0
pAND mm2,mm3
pAND mm1,mm4
pOR mm1,mm2
pXOR mm0,mm1
{ 略 tblA/tblT のみ置換して繰り返し}
movq [eax],mm0

 tblAは'A'が8バイト続くデータ tbl0は値0のqwordデータ
0237229NGNG
人にはアセンブラで時間を潰すなんて無駄と言いながらついやってしまう・・・

ちょっと短くなった

procedure ATCGchg8( p:PChar;cnt:integer);
const tblA:array[0..7] of Char=('A','A','A','A','A','A','A','A');
const tblT:array[0..7] of Char=('T','T','T','T','T','T','T','T');
const tblG:array[0..7] of Char=('G','G','G','G','G','G','G','G');
const tblC:array[0..7] of Char=('C','C','C','C','C','C','C','C');
const tbl0:array[0..7] of byte=($00,$00,$00,$00,$00,$00,$00,$00);
label lp;
asm
movq mm0, qword ptr tbl0
movq mm6, qword ptr tblA
movq mm5, qword ptr tblT
movq mm4, qword ptr tblG
lp:
movq mm7,[eax]
movq mm1,mm7
movq mm2,mm7
pXOR mm1, mm6
pXOR mm2, mm5
movq mm3,mm1
pCMpeqB mm3,mm0
pAND mm3,mm2
pCMpeqB mm2,mm0
pAND mm1,mm2
pOR mm1,mm3
pXOR mm7,mm1

movq mm1,mm7
movq mm2,mm7
pXOR mm1,mm4
pXOR mm2, qword ptr tblC
movq mm3,mm1
pCMpeqB mm3,mm0
pAND mm3,mm2
pCMpeqB mm2,mm0
pAND mm1,mm2
pOR mm1,mm3
pXOR mm7,mm1
movq [eax],mm7
dec cnt
lea eax,[eax+8]
jnz lp;
end;

呼び出し方
var buf:string;
begin
buf:='AGCT AGCT AGCT AGCT AGCT AGCT';
SetLength(buf,length(buf)+(8-length(buf) mod 8) );
ATCGchg8(@buf[1],length(buf) div 8);
0238197NGNG
>>234

漏れの記憶違いか……?

確認のため、なんとか発掘した
v4.5の日本語マニュアルにはこう書いてあった。

>-Qkscalar デフォルトのx87 命令でなく、
>ストリーミングSIMD 拡張命令を
>使用して、すべての32 ビット浮
>動小数点演算を実行します。

日本語訳が間違えているのかもしれないが、
英語のドキュメントどっか逝ってしまって見つけ出せなかったので確認できず。
ちなみに、v5.0のドキュメントを見たら、-Qkscalarは載ってなかった。
0239212NGNG
>>217の訂正
mov ax, [edi + eax] → mov ax, [edi + eax * 2]

テーブルの計算方法は間違っていました。
 type
  TWordTable = array[Word] of Word;

 procedure SetWordTable(var Table: TWordTable);
 var
  I: Integer;
  H, L: Char;
 begin
  for I := 0 to $FFFF do
  begin
  H := Char(Hi(I));
  L := Char(Lo(I));

  case H of
  'A': H := 'T';
  'T': H := 'A';
  'C': H := 'G';
  'G': H := 'C';
  end;

  case L of
  'A': L := 'T';
  'T': L := 'A';
  'C': L := 'G';
  'G': L := 'C';
  end;

  Table[I] := MakeWord(Byte(L), Byte(H));
  end;
 end;
0240212NGNG
>>223
>純粋にキャッシュヒットしてるんじゃないか?>連続呼び出し
そのようでした。 同じ文字列(同じメモリブロック)がキャッシュに
入っていたみたいです。 UniqueStringで別のアドレスに確保すると、
速くなりませんでした。

AGIストールについても考えてみます。
ありがとうございます。


部分レジスタストールについて質問なのですが、
下の(1)と(2)で発生するのでしょうか?

mov ax, 0
inc ecx
mov ecx, eax // (1)直後でない

@@Loop:
mov ecx, eax // (2)ループ
mov ax, 0
jmp @@Loop
0241212NGNG
また質問です。

http://www.sonycsl.co.jp/person/fnami/pentopt.htm#PPRO
の例で

MOV AL, [mem1] 1 uv
MOV AH, [mem2] 1 uv
MOV [mem3], AX 1
2 + 5(ペナルティー) = 7 clock

MOVZX EAX, BYTE PTR [mem1] 3
MOVZX EBX, BYTE PTR [mem2] 3
SHL EBX, 8 1 u
OR EAX, EBX 1 uv
MOV [mem3], AX 1
8 clock

なので、遅くなりませんか?

これは次のように変更するべき
でブラウザを検索すると見つかります。
0242213NGNG
>240
ん〜(1),(2)ともしないと思うけど?

>241
Pentiumでは部分レジスタストールは発生しないよ?
もうチョッとよく読もうな
そこでの記載はPentiumProとPentium2(3)に関してだし
Ppro系CPUではMOVZXは1クロックだよ(P4では0.5クロック)
μopコード実行だからペアリングなんて概念自体が無いので>Ppro
逆にPentiumではmovzxは重い処理になるのでやるべきじゃない

・Pentium
MOV AL,[mem1];1uv
MOV AH,[mem2];1uv
MOV [mem3],AX;1
2クロック

MOVZX EAX,BYTE PTR [mem1];3
MOVZX EBX,BYTE PTR [mem2];3
SHL EBX,8;1u
OR EAX,EBX;1uv
MOV [mem3],AX;1
8クロック


・PentiumPro
MOV AL,[mem1];1
MOV AH,[mem2];1
MOV [mem3],AX;1+5
約8クロック

MOVZX EAX,BYTE PTR [mem1];1
MOVZX EBX,BYTE PTR [mem2];1
SHL EBX,8;1
OR EAX,EBX;1
MOV [mem3],AX;1
約5クロック

どっちのCPU向けに最適化するかによる
今時だとP2、P3が主流だと思うんでPpro向けの最適化のほうが好ましいと思う
Pentiumでの遅延を減らしたいなら
movzx eax,[mem]→xor eax,eax/mov al,[mem]
に展開するべき(さもなくばCPUによってル−チンを切り替えるか)

ちなみにP4だと何故か展開したほうが速くなるんだよね……>movzx
0243デフォルトの名無しさんNGNG
完全にランダムなDWORD値を作る最速のルーチンを教えて
0244デフォルトの名無しさんNGNG
>>243

真の乱数(規則性なし)は量子コンピュータ持ってきても作れませんが、何か……?
量子力学やカオス理論の世界ですら、
時間をパラメータとする規則性のある数列でしかないことがわかってるし。
自然界では時間は任意に変更できないから、
ある意味真にランダムであるとも言えるだけで。

つーか、ランダム性と処理速度とどっちを重視するのか言ってくれないと、
紹介のしようもない。
0245Delあめ猫にゃNGNG
もちろん完全にランダムじゃないけど
乱数種の一つとして

function RDTSCm:integer;
asm
 DW $310F //RDTSC
 XOR EAX,EDX
 IMUL EAX,65535
end;
0246デフォルトの名無しさんNGNG
>>243
最近のPCならチップセットに乗ってる
ハードで完全にランダムな値、作れるんじゃないの?
漏れのマシンにはついてないけど。
http://developer.intel.com/design/chipsets/rng/faq.htm

レジスタ叩いて読むだけ。
>>244さんはこれでも満足できないのかもしれないけど

ソフトでやるのでは、回数が少なければ、
サイコロ振って乱数表作ってメモリに入れとけば、
規則性のない乱数列が作れるんじゃない。
周期性は避けられないが。
0247デフォルトの名無しさんNGNG
ノイズ拾ってデジタルデータに変換するADCあたりを
シリアルポートにでもつなげ
0248246NGNG
>>247
んならサウンドカードでええやん、
0249デフォルトの名無しさんNGNG
>>248
24bit以上のデータを扱えるオーディオカードならな。
普通のサウンドカードだと、16bit、しかも低い値しか取れないから、
拡大すると荒い乱数しか取れない。
0250212NGNG
213さん、重ね重ねありがとうございます。

215さんも224さんもありがとうございます。
キャッシュが・・・、と言われていたのに・・・。
0251デフォルトの名無しさんNGNG
>>249
例えば32bitの乱数が欲しければ、サンプルの下位1bitだけを
使用するとして32個サンプリングすればよいんじゃないの?
(本当はもっと偏りがないようにうまくやったほうが良いが)

これなら16bitサウンドカードでも大丈夫だ。24bitのサンプル1個を
そのまま乱数に使うってのは頭が悪いとしか思えん。
0252デフォルトの名無しさんNGNG
>>251
速度が遅くなんない?
どのぐらいかかるか知らないけど
0253デフォルトの名無しさんNGNG
>252 というか WavInデバイスを使うってだけで1秒にせいぜい2*44.1K/秒 だからね
 M系列とかの乱数種に プログラム起動時に1回使うだけならともかく
0254デフォルトの名無しさんNGNG
21 34 12 3E FF C9
0255デフォルトの名無しさんNGNG
何クロックかかるとかどの資料を見ればわかりますか?
0256デフォルトの名無しさんNGNG
Intelの資料に書いてあるけど、P6以降はあまり意味がないような・・・
0257デフォルトの名無しさんNGNG
CPUが新しくなるほど遅くなってそうだね。
0258デフォルトの名無しさんNGNG
>255 資料見るより 実際にコード書いて >>245 にあるRDTSCで数えさせる
0259255NGNG
>>256
ありがとうございます。
えと、どの資料でしょうか?
上中下ある、インテルアーキテクチャ・・・は見てみました。

>>258
サンクス。確かに使えそうです。
0260デフォルトの名無しさんNGNG
コンパイラについて

一番わかり易くコンパイラを解説した書籍を教えて?
ドラゴンブック?
岩波?
0261デフォルトの名無しさんNGNG
>>260 ここで答えが出なければ

【コンパイラ・スクリプトエンジン】相談室
http://piza2.2ch.net/test/read.cgi/tech/981672957/

過去ログ
http://piza.2ch.net/tech/kako/987/987880355.html
0262デフォルトの名無しさんNGNG
TESTBとTESTはどう違うの?
0263デフォルトの名無しさんNGNG
どうしてコンピュータでは16進数なんでしょうか?
0264デフォルトの名無しさんNGNG
コンピュータ内部では2進数。
2進数だと見づらいから、人間は16進数で見ている。
0265デフォルトの名無しさんNGNG
LinuxでIntel2gas -gを使ってcpp→s→asmでできたコードを見てるのですが

void func(int a=0)は

add esp, -8
push dword 0
push dword 0
call func3_Fii
add esp, 16

void func2(int a=0, int b=0)は

add esp, -4
push dword 0
push dword 0
push dword 0
call func3_Fii
add esp, 16

と引数に使うスタックを4つにする理由はなんなんですか?
もっとたくさんにしてもコンパイラは8、12・・・て固定しようとするんですけど・・・。
0266265NGNG
add esp, -8... は void func(int a=0)を呼び出す時のコードです・・・
0267デフォルトの名無しさんNGNG
最近のx86CPUのデータバスは64bitだからです >265
0268デフォルトの名無しさんNGNG
>>265
スタックを4つというのは、4バイトを4個ってことだよね?
それは16バイトアライメントです。
0269265NGNG
なるー。この方がはやいんですね。
初めて読むMASMをみてLinuxで勉強してると細かい違いがいっぱい出てきて。
symdebみたいなのがあれば助かるのですが。。。
上のfnamiさんのページでHOW TO OPTIMIZE FOR THE PENTIUM PROCESSOR見てきたんですが、こりゃ道は長いぞっと(w;

ttp://www.csl.sony.co.jp/person/fnami/pentopt.htm
0270デフォルトの名無しさんNGNG
>>269
「HOW TO OPTIMIZE FOR THE PENTIUM PROCESSOR」はよくまとまっているけど
内容が古い。読み終わったらすぐ、Intel のプロセッサマニュアルを読みなされ
0271255NGNG
たとえば2のn乗になる数をかけるとき普通にmulを使うより
shift演算したほうが早いとか、そういうのはどのような資料からでしょうか?
>>258さんが言われるようにRDTSCで測定しているだけではありませんよね?
0272デフォルトの名無しさんNGNG
>>271
Idiom
0273デフォルトの名無しさんNGNG
>>271
ftp://download.intel.co.jp/jp/developer/jpdoc/iaopt_j.pdf
これのページ 1-5 とページ D-1
0274255NGNG
>>273
ありがたう。気が付きませんでした。
単純なんですね。
0275デフォルトの名無しさんNGNG
>267

マイコン向けのプロセサのデータバスもやはり64BIT?
0276デフォルトの名無しさんNGNG
>264

Thanks
0277デフォルトの名無しさんNGNG
関数の引数に関する話で「スタック私」という言葉が出てくるけど、
これは以下の認識でよいのですかね。

・ある関数fに引数を渡す方法のうちの一つである。

・すべての引数を全ての関数共通のスタックにPUSHし、関数fにはスタックのアドレスを渡す。 もしくは、すべての引数を関数f専用のスタックにPUSHし、関数fを呼び出す。

・呼び出された関数fは、自分の持ち得る引数の個数と
同じ回数だけPOPする。ただし、f(a,b) と定義されている関数の場合は、
b,a の順番でPOPする事になる。2回目以降のPOPで取り出される値は未定義である。
0278デフォルトの名無しさんNGNG
SPはひとつ。
 呼び出し時、引数を共通のスタックにPUSHし、その後帰り番地をPUSHした後、関数fにgoto=JMPする

 呼び出された関数は、SPをBPに複製し、さらにSPを操作してローカル変数用の変数を確保する
 引数、変数の参照は BPからの相対参照とする

 関数終了時は、SP=BPと復元し 帰り番地を得た後、引数分のSPを 関数側で操作するか
 呼び出し側で操作するかする。

というのが今の普通のやり方
0279デフォルトの名無しさんNGNG
ちなみに 詰まれたスタックを関数内部で破棄して帰るのがpascalスタイル
呼び出し側で破棄するのがcスタイル
0280デフォルトの名無しさんNGNG
SPってスタックを指すアドレスのことですか
0281デフォルトの名無しさんNGNG
>>280 SP=スタックポインタ
  ∧ ∧  ./ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
  (;;゚Дメ)< それも判らんで質問してたんかい
  /  |  \_____________
〜(___ノ 
0282デフォルトの名無しさんNGNG
SPはレジスタでしょう?
0283デフォルトの名無しさんNGNG
スタック私
0284デフォルトの名無しさんNGNG
スタックアドレスを保持するレジスタ
0285デフォルトの名無しさんNGNG
アセンブラ勉強するならOSは何がいいの?
0286デフォルトの名無しさんNGNG
>>285
X68000
0287つーかレス番号が意味深(笑NGNG
>>286 それOSちゃう!
それをいうならHUMAN68KとかOS-9とか、、
0288285NGNG
やっぱMSXじゃ駄目なのか・・・
0289285NGNG
MSX-DOSだった。
0290デフォルトの名無しさんNGNG
X68000 ってさ、奇数アドレスにアクセスするとエラー起きるんだよね
勉強はしやすいと思うが、使いやすいかどうか・・・・
MSXでも良いんじゃない?俺はどっちも好きよ
0291デフォルトの名無しさんNGNG
アセンブラはdelphiを使うと使いやすいよ。
あとボーランドのBCC(フリー)でも内部記述できる。
要所要所だけアセンブルするのがよいのです。

あとNASMって結構よいです。作ったオブジェクトファイルを
コンパイラからリンクするのですがこれもdelphiで使えます

だからやっぱりインテル系だね。
0292デフォルトの名無しさんNGNG
>>285
アセンブラは、ハードウェアに対する基本的な理解が前提となるから、コンピュータの論理設計
と合わせて勉強した方がいいと思う。「コンピュータの構成と設計」(パターソン&ヘネシー)を読
みつつ、MIPS エミュレータの SPIM で勉強とか。
0293デフォルトの名無しさんNGNG
>>285
ハード(and/or OS)は古くて簡単な方がいいと言う事で
X68000などが挙げられたのだと思いますが、
環境が整うなら(アセンブラが調達出来るなら)
MSXなら尚良し、なのではないでしょうか。
VRAM,ROM,I/Oなどのアドレスが固定で
メモリマップの資料などが揃っていると
それこそマシンの隅々まで理解した気分になれます。
(今のマシンじゃ、○○ポートのアドレスは...なんてやり方出来ないと思う。)
0294デフォルトの名無しさんNGNG
>292
早速コンピュータの構成 上 を買ってよんでいるのですが、
レジスタ等わかりやすく書いてありますね
MIPSを使ってあるので、Windowsユーザーでも
便利です。
ところで、私はVisualc++をもっているのですが、
これはどうでしょうか?
0295デフォルトの名無しさんNGNG
アゼンブラは特にファームウエア用の用途が多いとききました。
ファームウエアを作成するとなったら、アゼンブラ以外に必要な
知識とかありますか?
0296デフォルトの名無しさんNGNG
ところで >>1 のコードには、どんな意味があるのですか?
0297デフォルトの名無しさんNGNG
>>296
0D 0A みっけ。
でも 00 とか FF とか多いな。
0298デフォルトの名無しさんNGNG
>>295
ハードウェア。密接に絡むからね。

取り敢えず、デジタル回路の回路図は最低限読めないと。アナログ
も知っているとベター。
0299あせんちゃんNGNG
8086アセンブラをやってて、その後Cに行ったんですけど、
なんかのバグとかで、Cが吐いたコードをアセンブラで読んで
原因がわかっちゃうときなんかは、あ〜無駄な経験じゃなかったな・・・
な〜んて、思うこともあり。

アセンブラレベルでは8086からたいして変化が無いので、
全然問題なく読むことできたし。
0300デフォルトの名無しさんNGNG
元気ですかー!キリバンゲットいくぞー!
1ー、2ー、
300ダァァァァァァァ!
0301デフォルトの名無しさんNGNG
6502アセンブラを学びたいのですが、解説してるサイトとかってありますか?
検索しても全然出てこない・・・。

もしくは、薦めの勉強方法ってありますか?
御教授お願いします。
0302デフォルトの名無しさんNGNG
>>301
ttp://www.6502.org
ってそのものずばりのサイトがあったよ。
オペコードなどの説明もPDFファイルで見られる。
0303tiger bookNGNG
>デジタル回路の回路図は最低限読めないと
一応電気工学科なのですが、オラクルばっかりやっていて、すっかりわすれて
います。
デジタル回路を学ぶための良書教えて!
0304343NGNG
age
0305301NGNG
>>302
海外のサイトっすか、、、頑張って英語読もう。
レス有難う御座いました。
0306_NGNG
「はじめて読む8086」で勉強しているものです。
ちょっと質問なんですが、昔はメモリ全部見れたんですよね?
でも今だと個別のプロセスごとにメモリ空間があってみれない
っていうのはなんとなく知ってるのですが、プロセスごとなら
最初の番地から最後までみれるんですか?
Cで

for(int i=0; i<100; i++) {
char* c = (char*)i;
printf("%d", *c);
}

っていうのはLinuxに怒られました。
全部見てみたいな・・・
0307デフォルトの名無しさんNGNG
>>306 メモリマップはOS依存
あとCの言語仕様上0番地のアドレスはNULLポインタだから使えない。
0308AAAAAAAAAAAAAANGNG
アゼンブリってVC6でもつかえるの?
実際どうよ?
0309デフォルトの名無しさんNGNG
アゼンブリはサポートしてません。
0310デフォルトの名無しさんNGNG
>295
・そのCPUに対してのアーキテクチャの理解
・周辺デバイスに対しての入出力制御の理解
・開発環境を構築するためのICEなどの機材の使用方法

この辺は必須のはずです。
0311デフォルトの名無しさんNGNG
>290

奇数アドレスから「バイト単位」以外でのアクセス、です。
奇数アドレスでもバイト単位のアクセスならばアドレスエラーでは落ちないはずですよ。
0312デフォルトの名無しさんNGNG
>>308
_asmで駄目か?
0313デフォルトの名無しさんNGNG
あげ
0314デフォルトの名無しさんNGNG
ペンティアムってインデックスレジスタとかあんの?
I/0マップは増えたの?
0315デフォルトの名無しさんNGNG
レジスタの値が0かどうかを調べる場合
cmp eax, 0
よりも
test eax, eax
の方がコードサイズが小さい
という記述があったんですが、どうして小さいんでしょう?
どちらも一行に見えるんですが。
0316デフォルトの名無しさんNGNG
>315
cmp eax,0 →83 f8 00
test eax,eax→85 c0
「cmp eax,0」は3byte、「test eax,eax」は2byte
即値使うとコード(バイナリ)サイズがでかくなるので
この場合test eax,eaxのが小さい
0317315NGNG
>>315
ありがとうございます。わかりました。

とだけ書くのはゴミレスなので私でもできるのを一つフォロー
>>6
http://www.microsoft.com/ddk/
というのがあります。私は今これで勉強中。
0318デフォルトの名無しさんNGNG
>>314
質問の意味がよく分からないんだけど。

「インデックスレジスタ」という名前のレジスタがあるの? という意味なら「ない」

アイゼロマップって一体何? マップは増えたり減ったりしないと思うけど。
あと、「増えた」って比較対象は一体何?
I/O空間のサイズという意味なら、8086のころからずっと64KBのはず。
0319元本職NGNG
>>318

アゲアシとりスマソ。
アイゼロってなによ?
アイオーでしょ? <<Input/Outputだし

>8086のころからずっと64KBのはず。

リアルモードではそうだけど、プロテクトモードは?

>3.3.3. 拡張された物理アドレス指定
>IA-32 アーキテクチャは、Pentium Pro プロセッサ以来、
>最大64G バイト(236 バイト) の物理メモリのアドレス指定を
>サポートしている。プログラムまたはタスクは、
>このアドレス空間内の位置を直接アドレス指定することはできない。
>代わりに、プログラムまたはタスクは、最大4Gバイトのリニア・
>アドレス空間を個別にアドレス指定する。このリニア・アドレス空間が、
>プロセッサの仮想メモリ管理機構によって、
>より大きな64G バイトの物理アドレス空間にマッピングされる。
>プログラムは、セグメント・レジスタ内のセグメント・セレクタを
>変更することによって、この64G バイトの物理アドレス空間内で
>リニア・アドレス空間を切り替えることができる。
>拡張された物理アドレス指定を使用するには、
>プロセッサがプロテクト・モードで動作し、オペレーティング・
>システムが仮想メモリ管理システムを提供する必要がある
0320318NGNG
>>319
いや、>>314の揚げ足取りのつもりだったんだけどね。
>>314をよ〜く見てみて。

で、拡張されてるのはメモリ空間の方で、I/O空間については現在でも、
プロテクトモードでも64KBだよん。

メモリマップドI/Oのデバイスではもちろんメモリ空間にI/Oポートが配置される
けれど、>>314では「I/Oマップ」とあったので、I/O空間
(IN, OUT命令でアクセスする方)についての話をしたわけです。
0321デフォルトの名無しさんNGNG
>>320
ああ、アイゼロマップだw
0322_NGNG
コードセグメントのデータは書き換えられないの?
0323デフォルトの名無しさんNGNG
書きかえられます
0324_NGNG
>>323
ありゃ。nasmで

SECTION .text
GLOBAL myfunc:function
myfunc:
mov DWORD[.integer], 8
ret

.integer DW 0

でcall myfuncしたら以降実行しなくなるんだけどなんでかな・・・
0325デフォルトの名無しさんNGNG
.text セクションって、読み込み専用属性なのでわ?
Win9x系とかの甘いOSならOKだろうけど、
NT計だと確実にAccessViolationで落とされそう。
0326デフォルトの名無しさんNGNG
アセンブラは好きだけど、セグメントはカンベンしてほしい。
0327デフォルトの名無しさんNGNG
Windowsなら、書き換えるためのAPIがあったと思う。
0328_NGNG
>>325
なるほど。.textセクションって言うべきだた。
どうもありがとう。
サンプルだけで理解するの大変だ・・・
0329_NGNG
>>326
セクションならいいの?
(私全然アセンブラ分かってませんw)
0330デフォルトの名無しさんNGNG
WindowsのコードセクションならPEヘッダのコードセクションのヘッダのところにある属性を書きかえればいいだけだよ。
M$のリンカなら書くセクションの属性を変えるオプションがあったが・・。
NASMっつうことはALINK使ってるのかな。ALINKじゃ無理なんで、バイナリエディタで書きかえればいいYO
0331デフォルトの名無しさんNGNG
WinならVirtualProtect()とかで動的に書きこみ可能にするとか。
0332デフォルトの名無しさんNGNG
アセンブリ言語は全く分からないが、
デバッガのためだけにでも勉強してみようと思う今日この頃
0333デフォルトの名無しさんNGNG
しかし実際のところ、.textセクションの値なんて書き換える必要あるのかな?
試しにやってみたいだけというのなら全く構わないんだけど。

もし本当に書き換える必要のあるデータなら、そもそも.textに置くこと自体が
間違ってるし、命令の自己書き換えなんてやったらキャッシュのせいで
うまく動かないような気がするんだけど。
0334デフォルトの名無しさんNGNG
x86にはもう興味ないね。
こいつが進化を妨げている。
0335デフォルトの名無しさんNGNG
>>334
IA-64のネイティブをコーディングしてみたら?
進化を感じるかも...
0336デフォルトの名無しさんNGNG
>>335
開発環境は手に入るかもしれないけど、
実行環境は個人が入手できるものじゃないだろ
0337_NGNG
OS Linux, ASSEMBLER nasmで

SECTION .bss
integer resb 4

SECTION .text
mov [integer], DWORD 1

push DWORD[integer] ; (1)
call printarg ; 引数を表示するサブルーチン
add esp, 4

でintegerの内容 00000001が表示されるとしたら
(1)を

push DWORD[0] ; (1)
に変えたらintegerにアクセスできるかなーと思ったんですが
当然できないですよね・・・
実行時integerがどこに配置されるかはわからないのでしょうか?
どうしたら分かりますか?
カーネルの勉強でもしないと駄目なのかな。
0338_NGNG
>>337
objdump -xでシンボルテーブルを見て080A04D8だったので
push DWORD[080A04D8H]にしたら行けました。
でも.bssの最初が080A04C0なのに間が空いてるのは何故ですか?
この区間は固定?
0339_NGNG
>>338
ld にマップファイル吐かせるとわかりました。
先頭はcrtbegin.oが使ってるんですね。
その次に割り当てられていました。
そのまた次のlibc.aのbssまでの区間がちょうどコーディングで使った分だったのに感動。
当たり前だけど。
アセンブラって面白い・・・
0340KITENGNG
KITEボードの命令セットに関して長所と短所を教えてください。
0341ななしNGNG
アセンブラ初心者なのですが
とりあえずarrowasmを手にいれて以下のようなコード
CR EQU 0DH
LF EQU 0AH

STACK SEGMENT STACK
DW 32 DUP(0)
STACK ENDS

DATA SEGMENT
MSG DB CR,LF
DB 'Hello MS-DOS world'
DB CR,LF,'$'
DATA ENDS

CODE SEGMENT
ASSUME CS:CODE,DS:DATA,SS:STACK
START: MOV AX,DATA
MOV DS,AX
MOV AH,9
MOV DX,OFFSET MSG
INT 21H
MOV AH,4CH
INT 21H
CODE ENDS
END START

でコンパイルしてみました。
するとオブジェクトファイル***.objは
できたのですがこれをlink ***.objとすると、

LINK : error : Segment reference infixup record
test3.obj : fatal error LINK1123: failure during conversion to C0FF:
file invalid or corrupt
と出てしまい実行ファイルが作れません。
いろんな本に載ってるコードを何度も何ども
打ち込んでみているのですが、
どれもうまくいきません。
なにとぞお助けください・・・・
0342デフォルトの名無しさんNGNG
linkのオプション必要とか?
0343デフォルトの名無しさんNGNG
ちゃんと 16bit 版の link を使ってるか?
0344デフォルトの名無しさんNGNG
申し訳ないのですが!!!

アセンブリ言語というのは統一されたものですよね!

同じ処理をさせようとしても、CPUによって組みかたが違う場合がある
ってだけですよね!

「○○をアセンブラで組む」
「××アセンブラ入門」
この本に書いてあるアセンブリ言語はこのCPU専用なのか!!?と途惑ってます!
なわけなかろうと思いますが自信はありません。
0345341NGNG
>342
そのあたりがよくわからないのですよ・
初めて読むマシン語、はじめて読むアセンブラ、MASM初級プログラミング
を買い込んできていろいろ読んでいるのですが・・・
>343
MicroSoftのlink ver5.12.8078です。
link.exeなので16bit版のはずなのですが・・・
0346デフォルトの名無しさんNGNG
>>344
CPUによって違う。
0347デフォルトの名無しさんNGNG
>>346
あるCPU(仮にA)のAXとBのCPUのAXは働きが違うということでゴザイマすか!!?
0348デフォルトの名無しさんNGNG
>>347
CPUによってレジスタの数も名前も違う。
CPUの設計そのものが違う。
0349デフォルトの名無しさんNGNG
いい具合に混乱してきましたで!!!

つまりはCPUによってAXの名称が、例えばAXVになったり
全く違う言葉になってしまうと、そういうことですか!!?
0350デフォルトの名無しさんNGNG
>>344
CPUによって(とういうかアセンブラによって)
ニーモニックも違う。jmpだったりbrだったり。
0351デフォルトの名無しさんNGNG
そういうこと。
0352デフォルトの名無しさんNGNG
あ〜〜なるほど。
本当のホントに「そのCPUについて、モトから理解しなきゃいけない」
ってことなんですな。

ははー、なるほど。よくわかりました!!!
0353デフォルトの名無しさんNGNG
>>352
そゆことです。
0354デフォルトの名無しさんNGNG
R1,R2,R3...なんていう投げやりなレジスタ名も珍しくない。
0355デフォルトの名無しさんNGNG
どっちかというと86系の汎用レジスタの名前がこじつけだと思う。
0356デフォルトの名無しさんNGNG
つか、最近のほとんどのCPUはレジスタ名が数字だよね。
汎用レジスタの個々に名前がついてて、レジスタによって使える命令に
制限がある(直行性が悪い)のは、最近ではx86系くらいでは?
元の設計が古いから仕方ないが。
0357デフォルトの名無しさんNGNG
もうどうにでもなれ、みたいな(w
0358デフォルトの名無しさんNGNG
よっしゃ!できた!
0359デフォルトの名無しさんNGNG
>>352 は全然理解できてないに3000点
0360デフォルトの名無しさんNGNG
>>352
勘違いされてるかもしれないので . . .
名前が違うのは重要じゃないです。
仕様そのものが違います。
C++ と java と Pascal と Lisp くらい違います。
CPU が違えばアセンブラは全く別の言語といってもいいと思います。
アセンブラがどんなふうになるかは CPUの設計しだいです。
0361デフォルトの名無しさん NGNG
DATA1 DW 0005H
DATA2 DW 00FFH
RESULT DW 0

START:
  MOV AX,DATA1
  ADD AX,DATA2
  MOV RESULT,AX

AXにDATA1をいれてそれにDATA2を足して結果をRESULTに入れる
というコードを書いたのですが
MOV AX,DATA1
コレがきちんと動きません。
MOV AX,0005H
とDATA1の部分を即値で書くと動くのですが・・
同様に
ADD AX,DATA2
MOV RESULT,AX
もだめです。どうやら、
変数を使用して値を移動させようとするとだめみたいです。
なんででしょう?
0362デフォルトの名無しさんNGNG
>>361
NASMだと

MOV AX,[DATA1]

にしないとだめかも。
0363デフォルトの名無しさんNGNG
初歩的な質問ですみません。
mov eax,[eax]
という命令をよく見かけるんですけど、これはどういう意味ですか?
0364デフォルトの名無しさんNGNG
[] は間接アドレス  Cでいう *演算子相当

つまり axで示すアドレスのメモリの値をaxに
0365デフォルトの名無しさんNGNG
>>361
362の他にはセグメントが違うとか。。。
symdebでステップ実行してみればよろし。
0366デフォルトの名無しさんNGNG
>>345
その link やっぱり 32bit 版じゃねーのか。
32bit でもファイル名は link.exe だ。
0367デフォルトの名無しさんNGNG
CASLは、何て読むんですか?
カスル?キャッスル?
0368女NGNG
キャッスルだ
0369でふぉNGNG
キャッシーローラーってIBMの人はいってますよ
0370デフォルトの名無しさんNGNG
「元気にご来店ありがとうございまーす」

『風邪ひいてるんだけどな』
0371デフォルトの名無しさんNGNG
アセンブルなんて、結局めんどくさくなって、Cで書いたのをディセンブルして張り付けよ〜(ワ
0372デフォルトの名無しさんNGNG
Pentium以降のCPUで16(or 8)bit整数演算を行う利点って、
32bitに比べてサイズが小さいからキャッシュに入りやすい、
ってことくらいでしょうか?
0373デフォルトの名無しさんNGNG
>>372
32bit環境下で16bit命令はオペコードにプレフィックスが憑くから、
命令サイズが1バイト増えてデコードが送れたりキャッシュミスしやすくなる
0374372NGNG
>>373
サンクス。
すると、データ持っているときは16(or 8)bitで
実際に演算するさいは32bitでするのが良いのですね。
0375デフォルトの名無しさんNGNG
8bit命令にはプレフィクスつかないよ。
16bit命令と32bit命令はオペコードが同一のものなので、
プレフィクスの有無で判断してる。

それから、当然即値やアドレスをとる命令は、
16bitのものの方が短くなるよ、。
0376デフォルトの名無しさんNGNG
SSEって使ったこと無いんだけど、レジスタを
8 x 16のpacked byteとして使えるの?
0377372NGNG
>>375
>>372
>すると、データ持っているときは16(or 8)bitで
>実際に演算するさいは32bitでするのが良いのですね。
と
>それから、当然即値やアドレスをとる命令は、
>16bitのものの方が短くなるよ、。
の場合には16bitの方が良いってことですねー。

ありがとうです。
0378デフォルトの名無しさんNGNG
アセンブ?を勉強しててふと思ったんですけど
よくCの教科書本で書いてある関数の再帰利用ってのは
アセンブリコード的にはスタックをがばがば使う駄目なコードなのかな?
呼び出す度にスタックが増えていくような気がするんですが違うのかな?
0379デフォルトの名無しさんNGNG
>>378
そう。
組み込みとかだと、スタックが数Kバイトしかないというのはざらにある。、
下手に教科書に載ってるようなアルゴリズムを実装すると、即死する場合が
あるので注意が必要・・・
0380デフォルトの名無しさんNGNG
基本的にはその通りです。再帰するたびにスタックを消費します。
末尾再帰といって関数の末尾で再帰してる場合には、
(その関数のスタックはもうつかわないので)
スタックを再利用することができます。
0381デフォルトの名無しさんNGNG
もちろんそのとおり。
そしてよく教科書に書いてあることが、現実社会でよく使われるとは限らない。
0382381NGNG
つーか、結構このスレ下の方にあったのに、同時に3人コミットするってどうよ。
0383デフォルトの名無しさんNGNG
再帰厨にひとこと言いたかったの
0384デフォルトの名無しさんNGNG
>>380
関数の末尾で再帰してる場合にスタックを喰うか否かは言語(実装)依存だろ。
これを定義してる言語はSchemeしか知らないけど。
0385デフォルトの名無しさんNGNG
>>384
そうだけど、最近のコンパイラは偉いからきっとやってくれるでしょう。
0386デフォルトの名無しさんNGNG
何事も「やり方次第」
教科書に書いてあることもな。
0387デフォルトの名無しさんNGNG
>>385
期待しすぎ。
0388デフォルトの名無しさんNGNG
>>385
関数型言語とgcc以外はやってくれましぇーん。
意外とおバカな処理系ばっかり。
0389378NGNG
>>382
罵倒なしにこんなに暖かくレスしてもらったの初めてで嬉しかったり(藁
これだけだとごみレスなのでお勉強したあせんぶ?のページのポインタ。
「@鈴希」
http://tt.sakura.ne.jp/~suzu/
読みやすくて最初に読むのにぐっどかと。
0390デフォルトの名無しさんNGNG
アセンブラで汎用機壊したいんですけど出来ますか?
0391デフォルトの名無しさんNGNG
Netscapeからバグを取り去りたいのですが!!!!!!
できますか!!!!!!!!
0392デフォルトの名無しさんNGNG
391と仲良くなりたいのですが!!!!
できますか!!!!
0393デフォルトの名無しさんNGNG
あの会社のバグというと、某氏のことか?
0394デフォルトの名無しさんNGNG
あげちゃう

いろいろ見てるとmovbとかmovlとかあるんですが
b,lって何でしょうか?
0395デフォルトの名無しさんNGNG
b は byte で、 l は long?
0396_NGNG
>>394
nasmを少ししか使ってないから良く知らないけど
たぶん転送する値の大きさを指定してるのでは?
movb 1バイト movl 4バイト ?

私も質問。LinuxとかWin2Kでスタックのサイズって限界あるの?
0397デフォルトの名無しさんNGNG
もちろん限界はあります
0398_NGNG
なるー。それでヒープがあるのか。。。
また質問で申し訳ないんだけどヒープってどこにあるのかな?
OSが独自にアドレスもって管理してるの?
Cは独自に管理してるとか書いてあったけど
それと同じように自分のdataセクションとかに自分で作れないのかな。
0399デフォルトの名無しさんNGNG
ヒープはOSが管理してくれると思う。
>それと同じように自分のdataセクションとかに自分で作れないのかな。
何がやりたいのかいまいち分からん


それをプログラム
0400デフォルトの名無しさんNGNG
”それをプログラム”は無視してくれ。
0401_NGNG
resbでデータセクションにでかくメモリとって、そこに
そのプロセス独自のヒープつくれないかなって思いました。
でも、よく考えたらそれじゃサイズが固定されてしまうのか。。。
0402デフォルトの名無しさんNGNG
うん。固定されてしまうね
0403_NGNG
うーん。検索してると「詳細Linuxカーネル」っていう本が
メモリ管理詳しく書いてそうなので今度買って見ます。
アセンブラ知ると色々仕組みが分かるのがいいですね。
0404デフォルトの名無しさんNGNG
>398 セクションというのはアセンブラなら自分で定義する事が多いけどね
  そもそもセクションなんてない1パスなアセンブラもあるけど・・
0405デフォルトの名無しさんNGNG
>>401 それは組み込みなら既存ライブラリを使わなきゃならない時に使うよ。
 ソースがあったら、malloc 書き換えてstaticにしてしまうんだけどね
0406デフォルトの名無しさんNGNG
ところで、
>>398
スタックサイズに限界があるからヒープがある、と理解したように
読めるんだけど…。ヒープサイズにももちろん限界はあるよ。
そもそも使用目的が違うし。

Linuxの場合、メモリ空間の頭の方からtext、続いてdataセクションが
あってそれに続くbss(0で初期化されてるdata)が後ろのアドレスに拡張
できるようになっていて、それがヒープとなる。この拡張はbrk()や
sbrk()というシステムコールで行われるので、この辺のmanも見てみると
いいよ。

スタックは、メモリ空間の最後の方のアドレスから逆方向に伸びていく。
ヒープはユーザーが明示的に増やしてやらないと増えないけど、スタック
は使用されるにしたがってOSが自動的にメモリを確保して割り当ててくれる。
ヒープとスタックはメモリの両端から逆方向に向かって伸びていくので、
論理的な限界はアドレス空間の真中でお互いがぶつかるまでかな。
(shared libraryのことを考えない場合)
0407デフォルトの名無しさんNGNG
>>404
自分で定義できるものなのか。凄い。
メモリ空間のパーティションみたいなものなのかな。

>>405
いいなー。なんかメモリを自由自在に操ってますね。

>>406
なるー。やっとヒープがどこにあるか分かりました。謝々!!

|----------------------------------|
| text |
|----------------------------------|
| data |
|----------------------------------|
| bss |
|----------------------------------|
| ヒープ |
| ↓(brk, sbrk) |
| |
| |
| |
| |
| esp |
| ↑ |
| スタック |
|----------------------------------|

こんな感じですか?
そういえばmalloc()で割り当てられたメモリに0が入ってるのって
bssセクションに割り当てられるからなのかぁ。凄いな。
0408406NGNG
そうそう。そんな感じです。
実際には、ヒープとスタックの間の空間にshared libraryのtextとdataが
配置されているけど。
Linuxなら、cat /proc/<プロセスID>/maps とやるとそのプロセスの
アドレス空間の配置を見ることができるよ。

あと、余計なお世話かも知れないけど、確かに新たに拡張されたヒープの
中は必ず0でクリアされてるけど、だからと言ってmalloc()で確保する領域
が0でクリアされてるとは限らないので注意。malloc()はfree()で解放した
領域を再利用するけど、その際にわざわざクリアしたりしないので。
(それをやってくれるのはcalloc())
0409_NGNG
>>408
おお、こんな風に見れるとは。ほんとLinux(UNIX)はプログラマーのためのOSですね。
ちょっと考えたんですけど、この仕組みならなんでメモリリークがあるんですか?
プロセスが消えた時全部消えそうな気がするのですが・・・

#今度のItaliumではehp(ヒープレジスタ)も欲しいかも。
0410デフォルトの名無しさんNGNG
>>409 #今度のItaliumではehp(ヒープレジスタ)も欲しいかも
こんなナンセンスなCPUいらない。
ItaniumってIA-64だっけ?
だったら汎用レジスタが128本もあるというバケモノという話だけど
0411デフォルトの名無しさんNGNG
プロセスが消えればね…。
LinuxもWindows NTもリークが問題になるのは終わらないプロセスの問題。
0412デフォルトの名無しさんNGNG
この言語勉強しようと思っているところです。

それで、アスキーのページから「はじめて読む8086」が消えているのですが、
ひょっとして絶版なのかな?
前に見た時、>>21からのリンク先には有った気がしたのですが。

どんなもんでしょうかね?   さげ
0413デフォルトの名無しさんNGNG
>>412
1週間ほど前に本屋に行った時は売ってたと思う。
絶版かどうかは知らんが、あるところにはあると思う
0414デフォルトの名無しさんNGNG
Linux(x86)においてのアセンブリコードと実際に占めるバイト数の対応表ないですかね?
例えば関数の初期化処理の
push %ebp
mov %esp, %ebp
なら3byte、みたいな。
0415デフォルトの名無しさんNGNG
インテルのマニュアルを見るか、ディスアセンブルするか・・
0416デフォルトの名無しさんNGNG
話題ないなぁ
0417_NGNG
Itaniumとか面白くないかな?
0418デフォルトの名無しさんNGNG
これとこれは組み合わせ可能だから、、、とか手でやるの?
0419デフォルトの名無しさんNGNG
Itaniumって、なんであんなにクロック周波数低いの?
800MHz程度じゃ、大抵の処理はがんばって最適化しても
Petium4 2GHzの方が速いんじゃない?
0420デフォルトの名無しさんNGNG
386が出た頃もそうだったように 64bit命令である事が重要なんだろう。きっと
0421デフォルトの名無しさんNGNG
レジスタたくさんあって組みやすそうだな。
0422デフォルトの名無しさんNGNG
286の方がセグメントの処理が軽いから、同クロックだと286の方が
速いというやつだね。20MHzの286を出してたのはIDTだったか、AMD
だったか・・・
0423デフォルトの名無しさんNGNG
レジスタの幅は64bitあっても多少便利な程度だけど、ポインタが64bitだと
すごく(・∀・)イイ!!。
0424デフォルトの名無しさんNGNG
うーん・・・・ハードディスクが4Gだと少ない時代だからなあ・・・・
0425_NGNG
レジスタの数が多いのは嬉しいですね。あと複数の命令を1ステップで
実行できるとか、ちらっと雑誌で見たんですけどアレってプログラミング
が複雑にならないのかな?並列でしか意味ない?
0426デフォルトの名無しさんNGNG
>>425
その辺はコンパイラが面倒を見るという話らしい。
命令の同時実行は単純には今と同じ。
それを重視して設計をしたということ。
IA-64では幾つかの処理をひとまとめにした
バンドルという単位でプロセッサへのデータ入力が行われ、
1つのバンドルに含まれる処理は同時に実行される。
バンドルを構成するのはコンパイラの仕事になる。
0427_NGNG
>>426
なるほど。ブラックボックスになって欲しくないな。
アセンブラ組むのが簡単ならいいんだけど・・・
0428デフォルトの名無しさんNGNG
>>427
アセンブリ自体はそう難しくはないと思うが、バンドルを手で構成するのは
地獄だと思われ。
0429四歳NGNG
コード 9らっきんぐ 暇なときやっている人いる?
0430_NGNG
アセンブラに興味がある方へ
書籍が少なくて戸惑うと思いますがアスキーの
「はじめて読む8086」「はじめて読むMASM」「はじめて読む486」を読みつつ
インテルにあるPentiumのマニュアル(pdf)を手元において
「gcc -S」が吐くコードを「Item2gas」でgasからnasmの形式に変えて読んだり
色んな所に落ちてるnasmのサンプル打ち込んでみたりしたら
思ったよりすぐ分かるようになりました。
Cでポインタとか分かってる人はすんなり頭に入ってくると思います。
お試しあれ。
0431デフォルトの名無しさんNGNG
Item2gasが見つかりません。
すみませんが、ポインタを下さい。
0432デフォルトの名無しさんNGNG
Intel2gasじゃないのか?

www.niksula.cs.hut.fi/~mtiihone/intel2gas/
0433デフォルトの名無しさんNGNG
なるほど。
itemって何だろ? って悩んでたんですよ。
どうももありがとう >>432 >>430
0434_NGNG
w
ネタになってるし。
intel2gasです。申し訳ない。
付け足すと国内のページではアセンブラの情報がすくない気がするので
英語のページで検索かけたほうがいいと思います。
http://www.linuxdoc.org/HOWTO/Assembly-HOWTO/index.html
http://webster.cs.ucr.edu/Page_asm/ArtOfAsm.html
がお勧め。あとnasmのマニュアルかな。和訳ページもあったっけ。
http://guriponn.tripod.co.jp/others/japanise/nasmdoc0.html
0435名無しさん@お腹いっぱいNGNG
拡張子がasmのファイルってどうやったらアセンブラできるの?
0436デフォルトの名無しさんNGNG
8051のアセンブラの勉強に役立つ
日本語のページ教えれ
0437デフォルトの名無しさんNGNG
>>430
「gcc -S」でないとダメ?VC++なんだけど。
0438_NGNG
VC++にもアセンブラコードを出すオプションはありませんか?
0439デフォルトの名無しさんNGNG
>>438
SEなんでついてないのかな・・・
探したけど見当たらない・・・・
いい逆アセンブラってありません?できたらフリーで。
0440439NGNG
SE?何書いてんだ俺・・・
アカデミックバージョンでした。鬱邪内ケド氏脳・・・
0441デフォルトの名無しさんNGNG
>>438
/FAs
0442デフォルトの名無しさんNGNG
>>435
nasm
0443デフォルトの名無しさんNGNG
>>435
窓ならMASM
0444デフォルトの名無しさんNGNG
>>443
窓でもnasm
0445デフォルトの名無しさんNGNG
質問です。
仮想メモリで32ビットアドレス表現なんだけど
どうやってプロセッサは一般保護例外って判断できるの?
セグメントがページングに変わるから判断できないと思うんだけど・・・
0446デフォルトの名無しさんNGNG
>>445
ページングするから判断できる。
物理メモリに存在しないページを要求されたらプロセッサは
一般保護例外を出す。
それをOSが拾ってページを割り当てる。
割り当てるページが無かったらSegmentation Fault。
0447はじめて読む6809NGNG
>>430
その3冊手に入れました。頑張って勉強してみます。
遅レス失礼しました。

ところで、「はじめて読むMASM」、
兄弟本、「はじめて読むマシン語」、「はじめて読むアセンブラ」も絶版?

はじめて読むシリーズ危うし。
0448デフォルトの名無しさんNGNG
>>446
一般保護例外(0Dh)でなくページフォルト(0Eh)だよ。
0449デフォルトの名無しさんNGNG
>>448 スマ フォローTHX
0450デフォルトの名無しさんNGNG
なーる。ありがとうございます。
0451デフォルトの名無しさんNGNG
もう一つ質問です。
ページフォルトであるページを物理メモリに割り当てますよね?
そしたらその割り当てられたアドレスはセレクタ+オフセットで
表されてるのですか?
それともやっぱり32ビットの仮想アドレス?

うーん。
要は仮想アドレスを使っていてどうやって
タスク間アクセス保護が出来るのかって事が知りたいのです。
0452デフォルトの名無しさんNGNG
物理的に隔離するんだよ>451
0453デフォルトの名無しさんNGNG
>>451
逆だよーん。ほんとはもっと複雑だけど、すごーく簡単に書くと
selector -> GDT or LDT -> base address
base address + offset -> page table -> physical address
で、タスクごとにpage tableをごにょごにょする。

詳しく知りたきゃ
http://developer.intel.com/design/pentium4/manuals/245472.htm
を読むべし。
0454デフォルトの名無しさんNGNG
タスクごとにpage tableをごにょごにょする、ですか。
う〜ん。
う〜ん。
がんばって読んでみます。ありがとうございました。
0455デフォルトの名無しさん NGNG
やれやれ、レベルの低いスレですな :3)
0456デフォルトの名無しさんNGNG
とにかく速い!マシン語ゲーム集
のモービィディックというゲームが面白かったです。
あの本の最後の笑い話の意味がわかったとき
道を踏み外したなと確信しました。
0457デフォルトの名無しさんNGNG
アセンブラを勉強したいのですが、
http://www.vector.co.jp/vpack/filearea/win/prog/asm/index.html
ここから探した結果、
MASM 準拠で8086〜PentiumPro,MMX,3DNow! 命令に対応したマクロアセンブラ
http://www.vector.co.jp/soft/win95/prog/se183316.html
これが一番よさそうなのですが、どうですか。
0458デフォルトの名無しさんNGNG
>>457
ダウンしましたが、
「通常はVC++といっしょに使ってください」
と書いてあったので、やっぱりだめみたいです。
0459デフォルトの名無しさんNGNG
NASMでええやん。
0460___NGNG
でもhmx-12,13には何かひきつけられる物があるんだが?
0461デフォルトの名無しさんNGNG
>447

は?マジで絶版?うそだろ
0462デフォルトの名無しさんNGNG
>457, 458

それは、NWSA というアセンブラだけど、有償版には、
統合開発環境(デバッガ、逆アセンブラ付き)があって、
リンカも付いてくるので、Visual C++ がなくても単体
で開発できるよ。

アセンブラの統合開発環境で、ライセンス的に合法なのは、
これくらいかもしれないから、それなりに価値はあるんじゃ?
0463デフォルトの名無しさんNGNG
化石。

LD A,3
SUB B
RET
0464デフォルトの名無しさんNGNG
フリーでダウンロードできて、ドキュメントがそこそこそろっていて、インテル系のアセンブラのソフトはなんという名前ですか?
なんか検索しても変なページばっかり出てきます。
ようするに時代は終わったということでしょうか。
0465デフォルトの名無しさんNGNG
vectorのプログラミングカテゴリを見たら2個ほどあったよ。
NWSAとPasm
ニモニック一覧くらいならついてるんじゃない?
0466デフォルトの名無しさんNGNG
>>464
問題になるのが速度だけならgccのインラインアセンブラを使えば
フリーでドキュメントがそこそこそろってると思うけど…

それともファイルサイズとかを限界まで攻めるために
純粋なアセンブラが必要なのだろうか。
0467デフォルトの名無しさんNGNG
たぶん、出来る出来ないが問題なんだろうよ
0468デフォルトの名無しさんNGNG
タダたんにちょっと勉強してみたいだけですよ。
Cを勉強する前にアセンブラをやるのが常識みたいだし、アセンブラができるとドライバーが書けるみたいだし、ドライバーが書けると女にもてるみたいだし。
0469だだNGNG
>>468 ドライバーが書けると女にもてるみたいだし。
そりゃないだろ。
0470デフォルトの名無しさんNGNG
貴様はアレか?その、アレか?
女にモテたいがためにアレか?その、何だ、斡旋ブラやってるのか?
「こんなのどうでしょうお嬢さん」とかアレか?言うんか?
「お似合いですよ」がアレか?殺し文句か?
0471デフォルトの名無しさんNGNG
>>469
ねただろ。ボケェ
0472デフォルトの名無しさんNGNG
http://pc.2ch.net/test/read.cgi?bbs=unix&key=1006179848&st=13&to=13&nofirst=true
ここを見なさいよ。
0473デフォルトの名無しさんNGNG
タダたんにちょっと勉強だったら Delphi6 パーソナル。
 インラインでアセンブラ書けるから勉強するには丁度いい

 いきなりアセンブラだけでは試すのさえ厳しいよ
0474デフォルトの名無しさんNGNG
アセンブラ勉強するのにはIntelのHOMEPAGEからマニュアルをダウンロードして手元に置いておけと以前ありましたが。
具体的にどのファイルが必要なのか解かりませんでした。
教えてください。よろしくお願いします。
0475デフォルトの名無しさんNGNG
>>474
つーか、あのWebページから探し出すこともできないんじゃ、中身を
読むこともできないような気がする・・・

Developer - Software - Pentium4 - Reference Manual で辿ってみな。
あとはどれか必要かわからないなら全部落としておけ。
0476デフォルトの名無しさんNGNG
具体的にアセンブラ使って高速化に成功したケースを教えて欲しい
どういう処理がボトルネックになってて、
どういう風に解消したんですか?

アセンブラやるには、CPUのパイプ処理とかも考慮するのですか?
ハザードに関しても,考慮するのですか?
そうだとすると人間の手でやるとバグが出る気が・・・
0477デフォルトの名無しさんNGNG
ありがとうございます。全部落としときます。
0478デフォルトの名無しさんNGNG
だれか476の質問に答えてやれ
0479デフォルトの名無しさんNGNG
アセンブラって
(1)高速化
(2)ドライバ書く
以外の用途ってないんですよね?で、ドライバってCでも書けるんでしょ?
最適化はコンパイラがやってくれるよね?
0480デフォルトの名無しさんNGNG
>>479
組み込みだとコードサイズに制限があるからそのために使うことがある。
最近はどうだか知らんけど。
0481デフォルトの名無しさんNGNG
何も考えずにアセンブラで書いても
コンパイラより1.5倍程度速い。
ループしている部分には効果的
案外アセンブラで書くほうが綿密に計画するから
バグも少なかったりする。
0482デフォルトの名無しさんNGNG
ネイティブコードって遅いんでしょ?
VMの方が速いよね?
0483デフォルトの名無しさんNGNG
>>482
VMってドリキャスのVM?
0484デフォルトの名無しさんNGNG
>>481
VC++は漏れが書いた浮動小数点演算コードより2倍速かった
一生懸命考えて書いたんだが・・・欝だ
0485デフォルトの名無しさんNGNG
コンパイラにもよる。
x86はダメそうだけど、ARMのCコンパイラは凄かった。
アセンブラで書いたのと比べて遜色無いコードを吐く。
0486デフォルトの名無しさんNGNG
具体的にアセンブラ使って高速化に成功したケースを教えて欲しい
どういう処理がボトルネックになってて、
どういう風に解消したんですか?

アセンブラやるには、CPUのパイプ処理とかも考慮するのですか?
ハザードに関しても,考慮するのですか?
そうだとすると人間の手でやるとバグが出る気が・・・

俺も知りたい
0487デフォルトの名無しさんNGNG
out-of-orderがあればほとんど考慮する必要ないよね。
アセンブラによる高速化ってSIMD命令を使うのとかが多いのでは?
これってコンパイラでやるの難しいよね?
0488デフォルトの名無しさんNGNG
最近SHやってるけど、面倒くさくてアセンブラで書く気しない、というか
書いても速くなる気がしないよ・・・。割り切って、ブートとMMUにしか
使ってない。
0489デフォルトの名無しさんNGNG
サターンをアレしてるのかね?
0490デフォルトの名無しさんNGNG
>>488
SH仲間発見。おれはSH3と格闘中。ゲーム機とはかんけいないけど。
0491488NGNG
>>490
同じくSH-3ダヨ。ゲームとも無関係。
とか言って、なにげに同じプロジェクトの担当だったら笑えるな(藁
0492デフォルトの名無しさんNGNG
>>486
に対してまともな回答できるやつが一人もいない
という事は、ここにはアセンブラ使いがいない
0493デフォルトの名無しさんNGNG
え?ああ、例えば関数型IF。
アセンブラだとレジスタ同士の計算一発で終わる(1行)
のを、駄コンパイラはスタックに入れたり出したりで5行も10行も
吐く。
0494デフォルトの名無しさんNGNG
アセンブラ専用のサポート機能が付いたテキストエディタってある?
同時実行可能な命令のペアだと色が変わるとか
各命令の実行クロック数が命令の右肩に出るとかそういう機能が付いた奴。
0495デフォルトの名無しさんNGNG
んじゃ書くか…

>486
当方ゲーム(主にエロゲ)プログラマだけど
インラインアセンブラでMMX命令を使って画面ワイプとか高速化してるよ
クロスフェードとかやる分にはCコンパイラの吐くx86コードの数倍以上速い

パイプとストールは一応考慮してる、最適化は局所的だから
きちんとCPUに関する知識を身に付けてりゃそうそうバグらない
0496デフォルトの名無しさんNGNG
クロスフェードするエロゲってそんなに無いな
糞なメモリ性能でよく作った。
0497デフォルトの名無しさんNGNG
きょうび、クロスフェードもできないエロゲエンジンも珍しいと思うが。
0498495NGNG
うん、今時比較的普通だよね?
つーかMMXやSSEなんかは3Dや画像操作系のアプリなら使ってておかしくないし
ゲームも3Dものはほぼ常識、エロゲだってMMX程度なら常識になりつつある
で、こういったSIMD系命令を使う場合はやっぱアセンブラの知識がないと
intelCはSIMDを含んだ最適化もしてくれるけど
アルゴリズムが簡単な場合は最初からきっちり作ったアセンブラのコードには勝てないよ

あとアセンブラ使ったのっていったらLZ77の圧縮展開ルーチンとかかな…
Cのみのコードと比べたら倍ぐらいになったよ

>486は自分で作ったものをプロファイルとってボトルネックを調べるとかはしないの?
ボトルネックになってる部分が単純な関数ならアセンブラに起こしなおすだけで
かなり高速化できると思うんだけど?
0499へたれNGNG
>>494
うわ、それすげぇ欲しいんだけど。
つくれ〜つくってくれ〜つくってください〜
0500デフォルトの名無しさんNGNG
アセンブラで高速化したプログラムって
CPU依存になるの?
パイプの段数が違えば、ストール起こす条件もCPUによって違うわけだから・・・


493が言ってる最適化の効果はどれくらいなの?
分岐予測が間違えると・・・っていう事で
あとに来る共通して使える命令が入ってるんじゃなかったっけ?

あと、一つ気になったのはCと比較してるけど
C++のコードをアセンブラで高速化する事って無いのでしょうか?
それともC=C++という意味?
0501デフォルトの名無しさんNGNG
>>500

アセンブラは機械語と一対一だからCPUに依存するよ。
0502501NGNG
CPU依存で機械語と一対一だからこそ、無駄なコードを極限まで省けて、対象のCPUにもっとも適したコードを書けるというわけ。
0503デフォルトの名無しさんNGNG
じゃあ、市販のソフトでアセンブラで高速化してあるやつは
インストールする時に、
CPUを調べてインストールしてるの?
0504仕様書無しさんNGNG
>>498
プロファイルとってみて異常に時間がかかってるところって、最適化以前の
問題を孕んでることのほうが多くない?
それに、処理内容が単純な関数だったら、CでもC++でもアセンブラで
も大差ないし。

>>503
そういうソフトもあるけど、CPUの判別は実行時に行うことが多い。
インストール後にCPU交換されたら困るじゃん。
0505デフォルトの名無しさんNGNG
>>503

私の知っているソフトの中では、YAMAHAの「S-YXG100」というソフトシンセサイザーがあるよ。
CPUがIntel PentiumII以上でないとVL音源のプラグインがインストールされないの(Celeronは基盤がPentiumIII(II?)だからインストールされる)。
もっとも、アセンブラーで高速化しているからという理由かどうかは分からないけど。
0506デフォルトの名無しさんNGNG
>>494
>アセンブラ専用のサポート機能が付いたテキストエディタってある?

Peggy Proぐらいしか知らない。
0507デフォルトの名無しさんNGNG
>>505
それは単純にpentium2以上じゃないと、VLなんて動かないからだと思われ
まあ、動いたとしても使い物にならないだろうな

>インストール後にCPU交換されたら困るじゃん。
もっともだ(笑)
0508デフォルトの名無しさんNGNG
>>507

最新のAMDのプロセッサにはインストールされないけど・・・・・
0509508NGNG
ちなみにSG音源のプラグインならAMDのプロセッサにもインストールされる。
0510デフォルトの名無しさんNGNG
それって体験版・・・
0511デフォルトの名無しさんNGNG
>>510
http://www.yamaha.co.jp/product/syndtm/p/soft/syxg100/spec.html

見ろ。
もっともいつの間にかAMD Athlon/Duronでも動くように改良したみたいだけど。
0512デフォルトの名無しさんNGNG
基本はCで、所々インラインアセンブラで最適化する必要が出てきたんですけど、
構造体のメンバの参照は一般的には自前で計算するんでしょうか。
当然コンパイラや開発ツールに依存する問題ではあると思うのですが。
マニュアルはしょぼすぎて、その辺の記述がほとんどのってないんです。
その辺(インラインアセンブラ)の作法についての文献、HPなどがあれば
教えてちょ。
0513Kusakabe YouichiNGNG
>>512
In article <[email protected]>, "512: デフォルトの名無し
さん" <[email protected]> wrote:
> 基本はCで、所々インラインアセンブラで最適化する必要が出てきたんですけど
、
> 構造体のメンバの参照は一般的には自前で計算するんでしょうか。

ほかにどうするというのでしょうか?
何か便利なマクロが使える環境もあるでしょうけど、
それはその環境依存ですから、一般的には何とも言えないでしょう。

> 当然コンパイラや開発ツールに依存する問題ではあると思うのですが。
> マニュアルはしょぼすぎて、その辺の記述がほとんどのってないんです。

具体的にはどういう環境のどういうCを使っているのですか?

> その辺(インラインアセンブラ)の作法についての文献、
> HPなどがあれば教えてちょ。

そういうところで一般的なコツみたいなのがもし見つかったとしても、
あまり役に立たないでしょうね。
0514デフォルトの名無しさんNGNG
>>512
メモリの構造を理解してないのなら、アセンブラを触らない方が良いと思われ。
0515デフォルトの名無しさんNGNG
>>512

メモリーの構造を理解していなかったらCも使えないと思うけど。
CPUの構造まで理解する必要はないけどね。
0516515NGNG
>>514の間違い
0517デフォルトの名無しさんNGNG
>>512
VC++なら構造体の変数名でオフセット指定できる。他のコンパイラもできるようになっていればできる
MSDNライブラリ【__asm ブロック内の C/C++ データへのアクセス】参照
0518 NGNG
昔のハードでは1バイトもムダにすまいと、
実行コード&データレベルでの圧縮をよくしたものだ。

ビットフィールドは当たり前
0519デフォルトの名無しさんNGNG
>>518
今でも組み込みの一部では残ってるよ、その文化。
メモリが4kしかないと苦労するって
0520デフォルトの名無しさんNGNG
>>512
インラインアセンブラを使う場合には、コンパイラがサポートしてる可能性があるから、
それを調べる。

ほんとにアセンブラだけで書く場合には、事前にオフセットを計算して(<stddef.h> の
offsetof マクロを使うのが汎用的な方法)一覧を表に書き出しておいて、それを使う。

たとえば GNU as を使う場合だと、簡単なプログラムを作って、

#define OFFSET_XXX  3
#define OFFSET_YYY  8

みたいな一覧表を出力させて、これをアセンブラのソース中で #include したうえで

movl OFFSET_XXX(%eax), %eax

とかね。
0521512NGNG
皆さんレスありがとうございます。
ツールのサポートに問い合わせた所、自前で計算してくれとのことでした。
一応、構造体の先頭アドレスは _構造体宣言名 で取得できるので結構楽かも。
0522デフォルトの名無しさんNGNG
86系のアセンブラを勉強したいんだけど、どんな本を買えばいいの?
または、どんなページを読めばいいの?
0523デフォルトの名無しさんNGNG
86系は最悪!
でもしょうがないのか・・・。
http://www.csl.sony.co.jp/person/fnami/asm.htm
http://www.csl.sony.co.jp/person/fnami/pentopt.htm
0524デフォルトの名無しさんNGNG
>>522
アスキーから出てる「はじめて読む8086」「始めて読む486」あたりかな。
あと、Intelのページは情報の宝庫。
0525デフォルトの名無しさんNGNG
86系はレジスタが変だから止めたほうが良いと確かによく言われますが、実際、自分のマシンのCPUがセレロンの1GHZなので、しょーがありません。
おしえてもらったページや本を読んでみます。
ありがとうとがいます。
0526あなんNGNG
う〜ん。
そういえば、以前は68系ってもマシンがあったから、
選択肢として現実的だったけど・・・今はどうなんでしょね?
やっぱx86マンセーなのかしらん。
つかヲレもずいぶん前に会社でx86系やらされたクチだけんど。
0527へぼぐらま〜NGNG
・TEST AX, AX
とか、
・XOR AX, AX
とかとか、
やってるのを良く見かけますが・・・テメェ自身にナニしてるんですか?
0528デフォルトの名無しさんNGNG
上はフラグを変化させる。
下は0にする。
0529デフォルトの名無しさんNGNG
>>525-526
8086系は16bitの時代は、セグメントとかアドレッシングとか
めんどうだったけど、今は、そうでもないんじゃない?
(自分自身、もうアセンブラは使わなくなってるんで、あれだけど)
0530デフォルトの名無しさんNGNG
それはもう極楽です >> 529
0531デフォルトの名無しさんNGNG
あの、VC Ver6.0 Pro 使ってるんですが、_asm{}構文の中って、MMXコードまでしか
使えないんでしょうか。
SSE命令とか使ってみたいんですが、アセンブラにはじかれます...。

なんかどこかの雑誌では、サービスパックVer3以降をインストールすればいいと書いて
あったのでインストールしてみたのですが変わりません.....。

教えてください。
0532デフォルトの名無しさんNGNG
モエage
0533デフォルトの名無しさんNGNG
>>531
MS のサイトから Processor Pack ってのを探してきてインストール。
これで SSE 対応のアセンブラが入ります。
0534デフォルトの名無しさんNGNG
ありがとうございます。マジで助かります。
0535デフォルトの名無しさんNGNG
SP5でいいじゃん
0536デフォルトの名無しさんNGNG
NTはなぜシャットダウンできないのですか・・すみません。
invoke ExitWindowsEx,1,0
invoke ExitProcess,eax
0537デフォルトの名無しさんNGNG
MSDN読め。つーか、スレ違いだYO
0538>536NGNG
include \masm32\include\windows.inc
include \masm32\include\user32.inc
include \masm32\include\kernel32.inc
includelib \masm32\lib\user32.lib
includelib \masm32\lib\kernel32.lib
.386
.model flat, stdcall
option casemap :none
.code

start:

jmp @F
szDlgTitle db "ColdBooT MASM",0
szMsg db "どうかな?",0
@@:

push MB_OK
push offset szDlgTitle
push offset szMsg
push 0
call MessageBox
invoke ExitWindowsEx,1,0
invoke ExitProcess,eax
end start
0539デフォルトの名無しさんNGNG
CASLヤリタイ・・・デモCモマダダッタ・・ヽ(,`Д´)ノウワァーン
0540デフォルトの名無しさんNGNG
>>539

あほか。
0541デフォルトの名無しさんNGNG
ちと質問です。
マルチスレッドでロックをかけたい場合、VCでは
CriticalSection(&cs);
を使いますが、これは遅いので
xchg eax, [ecx]
を使ってるプログラムがあります。
この根拠とか解説が詳しく載っているお勧めの文献はありますか?
0542デフォルトの名無しさんNGNG
>>541
Intel の Web サイトから拾える Intel Architecture Software Developer's Manual.
0543デフォルトの名無しさんNGNG
>>541
これだとロック中だ、ということが解るだけでwaitしないから
CriticalSection()使ったほうが楽じゃない?
0544デフォルトの名無しさんNGNG
>>542
Thanks、とっても3冊あってでかい・・・。
ちと検索してみます。
>>543
実際はループしてます。
L1:
mov eax, [ecx]
test eax, eax
jz L0
jmp L1
0545デフォルトの名無しさんNGNG
>>544
movじゃダメだろーというのは置いといて、
ループ中は他のスレッドの処理が遅くなるから結果的に遅くなるような気がする。
待機中はできるだけCPUタイムを割り当てないようにしたほうが吉。
0546デフォルトの名無しさんNGNG
>>545
ケースバイケース。

- マルチプロセッサシステムで、他のプロセッサと競合する資源に対する排他アクセス
- 短時間しかロックしない

場合には、コンテクストスイッチを発生させない方が好ましい場合もある。
0547デフォルトの名無しさんNGNG
>>546
まさにビンゴです。
そうか、内部でCPUを解放させる処理が入っているので
CriticalSection()は遅いのか。

>>545
全部書かずに失礼。元のソースはこんなです。
CriticalSection()より8倍速く動きます。他に書き方はあるのかな?
__inline void lock(volatile int *ptr)
{
__asm
{
mov ecx, ptr
L0:
mov eax, 1
xchg eax, [ecx]
test eax, eax
jz end
L1:
mov eax, [ecx]
test eax, eax
jz L0
jmp L1
end:
}
}
0548デフォルトの名無しさんNGNG
>>547
そりゃブロックしなければ速いだろうが
ブロックしたときCPUを無駄遣いする(>>546の例外を除けば)
0549デフォルトの名無しさんNGNG
優良スレアゲ
0550デフォルトの名無しさんNGNG
>>547

何で、ループを二つも作る ?

__inline void lock(volatile int *ptr)
{
_asm {
L0:
mov eax, 1
xchg eax, [ecx]
test eax, eax
jnz L0:
}
}

だけでいいと思うが...。
0551デフォルトの名無しさんNGNG
>>550
xchgがバスをロックするから迷惑ってことだろ。
0552550NGNG
>>551

ああなるほど、なんかそう言う仕様だったような気がして intel のサイトで確
かめたかったのだけど、今なんか落ちてるみたいなんだよ。俺だけ ?

ftp://download.intel.co.jp/jp/developer/jpdoc/24319102_j.pdf
0553名無しさんNGNG
>>552

今は入れるみたいだけど。
どう?
ftp://download.intel.co.jp/jp/developer/jpdoc/
0554552NGNG
>>553

落ちてるみ宅見えたのは漏れのミスだったわ、すまん。以前ルーターの
テストでフィルター設定したあと戻すのを忘れていたよ。

>>551
xchgがバスをロックするから迷惑ってことだろ。

確かにそうだわ、確認した。
0555デフォルトの名無しさんNGNG
俺だわ。アセンブラだわ。たわわ。
0556デフォルトの名無しさんNGNG
日本語のマニュアルがあったのか・・・。英語を読んでて失敗。
上中下巻とここにあるようだけど、
ftp://download.intel.co.jp/jp/developer/jpdoc/24319002_j.pdf
ftp://download.intel.co.jp/jp/developer/jpdoc/24319102_j.pdf
ftp://download.intel.co.jp/jp/developer/jpdoc/24319202_j.pdf
大元のページが分かりません。ここは少し違うようだし。
http://www.intel.co.jp/jp/developer/design/mobile/manuals/index.htm
リンクの紹介は見つけたけど。
http://www.ncfreak.com/ncf_os/#asm
0557デフォルトの名無しさんNGNG
どうでもいいが、TIのVLIWプロセッサ(DSP)って使ったことある人いる?
アレ、一応Cのコンパイラもついてるんだけど、速度出そうと思うと
アセンブラで書くしかなくなるのよ。
VLIWマンセー
ちなみに最大8命令実行可能。

話題と全然離れるのでsage
0558554NGNG
>>556

え゛、普通に http://www.intel.co.jp から...

1. デベロッパ → ハードウェア、ソフトウェア、およびウェブ...
2. 製品情報 → インテルアーキテクチャ → IA-32 プロセッサ
3. お好きなプロセサを選んで、マニュアルをクリック
4. お好みのマニュアルとをクリックする
5. サーバーの場所をクリックすると ftp でダウンロード

で、できますが...。
0559558NGNG
誤字修正
6c6
< 4. お好みのマニュアルとをクリックする
---
> 4. お好みのマニュアルをクリックする
0560デフォルトの名無しさんNGNG
>>558
さんくす。
ただ、IA-32の下巻への日本語リンクが見つからなかったので
上でFTPできるのと内容が違うのか、と思ったので。
細かい話なので無視していいです。

後、実はIA-32の意味が分からなかった。
Intel Architecture 32ビット、の略だったのか。
0561 NGNG
 アセンブラは うんず上で MASM を MMX 、SSE などのために使っているくらい。
実は最近、Linuxにはまり NASM を使ってアセンブラを書こうとしたのだが、
特に擬似命令などが全然違うではないか?

 NASM の構文が載っているページ知ってたら教えてくれ。(できたら日本語希望)
0562デフォルトの名無しさんNGNG
>>561
イヤダンヌ
0563三頭神NGNG
>>561
http://www.nk.rim.or.jp/~jun/lxasm/asm00.html
0564 NGNG
>>561
http://www.intel.co.jp/jp/developer/design/mmx/manuals/index.htm
0565564NGNG
>>560 のマチガイ 上の二つにツラレタ スマソ
0566デフォルトの名無しさんNGNG
>>564
MMXの解説コーナーにあったのか。さんきゅーです。
0567デフォルトの名無しさんNGNG
アセンブラなら6809。
6309は邪道です!!
Z80?
ふっ・・
0568デフォルトの名無しさんNGNG
うんずってFM-TOWNS?
0569デフォルトの名無しさんNGNG
GCCのインラインアセンブラの書き方が分かりやすく載ってるHP教えてください.
0570 NGNG
ここなんかいいです >> 569

www.me.ics.saitama-u.ac.jp/~fujita/linux_mmx/
0571デフォルトの名無しさんNGNG
>567
6309ってレジスタ増えてたっけ?
0572デフォルトの名無しさんNGNG
誰かMacOSX上でアセンブラを使う方法
ってゆうかサンプルコード見せてくらさい。
0573MacOSXNGNG
>>572

興味本位だけでやるな。迷惑だ。
0574スマソですがNGNG
CASL IIについてCユーザでも理解できそうな本はありませんか?
0575デフォルトの名無しさんNGNG
>>574

CASLIIなんて無駄無駄。
情報処理試験でしか使えないだろう?試験ならあんたの使えるCで受けろ。
0576デフォルトの名無しさんNGNG
>>571
レジスタも命令も増えてます。
おまけにネイティブモードにすればスピードが3割増!!
でも命令の拡張の仕方が美しくない(w
0577デフォルトの名無しさんNGNG
DOS時代からC言語をやって来ましたんで、C、C++は人並みに
できますが、アセンブラに関してはMOV命令ぐらいしか知らない。
こんな俺がX86系CPUについていちから勉強したいのですが
どういう本がおすすめでしょうか?
0578デフォルトの名無しさんNGNG
>577
http://www.intel.co.jp/jp/developer/design/pentium/manuals/index.htm
0579名無し募集中。。。NGNG
/ミヽ     /ミヽ
||@ノノノハヽヽ@||
ミ/川  \||||ヽ彡
 |||ノ \  卅|||||
 ( |   ・  ・ | ) <asmで1FD OS といったらmenuet。
 νゝ " д"ノし テトリス,marioとtelnetが入ってる。そん代わりsshは無し。
           ttp://www.menuetos.org/   

>If you have some experience in 32 bit assembler you are
>welcome to join coding.
ま、玄人は参加して日本語サポートするヨロシ
0580デフォルトの名無しさんNGNG
>>576
>でも命令の拡張の仕方が美しくない(w

だいたい、拡張命令って既存の命令の隙間に無理やり突っ込むから、あんなもんで
しょ。80 系よりましと思うけど ?
0581仕様書無しさんNGNG
アセンブラ・・・、もういい。せめてCで書きたい。低容量低速度小電力ワンチップもう飽きた。
0582あわわNGNG
すいません、お聞きしたいのですが
機械語知らないのにバイナリエディタで
00000000 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00000010 02 2E 9C AA BA B7 FF 7E 97 34 EE DD 75 D2 CB AF
00000020 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
(↑アドレス)
入力してと1.exeで保存して実行して遊んでたら
Microsoft (R) KKCFUNC バージョン 1.10
Copyright (C) Microsoft Corp. 1991,1993. All rights reserved

KKCFUNC が組み込まれました.

マイクロソフトかな漢字変換 バージョン 2.51
(C)Copyright Microsoft Corp. 1992-1993
とODS画面に表示されてしまったのですが何かやばいでしょうか?(汗
環境はwin2000にPenIIIです。
0583デフォルトの名無しさんNGNG
>>579
惚れた♥
0584デフォルトの名無しさんNGNG
>>581
PICとかAVRかい?
0585デフォルトの名無しさんNGNG
>>582
何がしたいのかよくわかんないけど、MZ/PE形式のバイナリじゃないから、
DOSのバイナリだと思ってDOS窓で実行してるんだと思われ。
0586デフォルトの名無しさんNGNG
>>585
MZ/PE形式のバイナリ
って、なんですか?
exeにも、bmpみたいに、ファイルフォーマットがあるのですか?
あるのならフォーマットについて教えてください
0587デフォルトの名無しさんNGNG
>>586
なんでもかんでも、おしえておしえて言うなよ。
あつかましいよ。
キーワードばっちり提示されてんだから、まず検索してみろよ。
0588i586NGNG
>>587
スマソ。調べた
http://www.bd.wakwak.com/~opapa/VC/Specification/EXE.htm
見つかった。
0589 NGNG
アセンブラの洋書本、一冊買おうと思ってるんですけど、どれがいい?

www.amazon.co.jp/exec/obidos/tg/browse/-/3954/249-0246110-6828367
0590デフォルトの名無しさんNGNG
  MOV AX,1
  SHL  AX,20

これを実行するとAXの値はいくつになる?
(i386CPUでリアルモードで実行とする)
0591デフォルトの名無しさんNGNG
>>590
0じゃないの?
0592デフォルトの名無しさんNGNG
mod 32 で動くから SHL AX, 0 と同じになって 1 のまま。
ってのを狙ったと思うが、世のほとんどのアセンブラは
デフォルトで十進表記だから 1 を左に 20 ビットシフトした値。

が正解でしょ。
0593デフォルトの名無しさんNGNG
AXレジスタは16ビットしかないのですが…
0594高校生NGNG
最近アセンブラに興味を持った高校生ですが、PDP11の
インストラクションセットを解説したドキュメントなり
Webサイトなりありませんかね?
0595デフォルトの名無しさんNGNG
>>594
PDP-11 ということは、もしかして UNIX Version 6 のソースを読もうとしてる?
0596kcrtNGNG
みんなでEB->90しようぜ〜
0597高校生NGNG
まだグローバル変数の構造体同士にどんな参照関係があるか
UMLで起こしてる最中。coremap,sqapmap,proc,user,text,
sysent,file,inode,filesys,mount,bdevsw,cdevswがどんな
参照関係を持っているのか、どの関数によってどんな作用を
受けるのか調べているところ。(思ったより単純だ)
ターゲットであるPDP-11に関する詳しい飼料が欲しい。
0598デフォルトの名無しさんNGNG
386/286のシフトは下位5ビットしか使わないんだよ
86はバカ正直に全回数のシフトを実行
リアルモードがどういう仕様なのかは知らん
0599デフォルトの名無しさんNGNG
>>597
UML で分析/設計 -> 実装という流れならともかく、既存のシステムを分析するのに UML で
図を起こすのは時間の無駄だ。やめとけ。UML は分析/設計用の言語であって、既存のコー
ドを解析するために作られたワケじゃないからね。

(GLOBAL + htags でクロスリファレンス作るのは役立つと思うが)

> ターゲットであるPDP-11に関する詳しい飼料が欲しい。
UNIX V6 のソースを読むだけなら Lions' commentary on UNIX の巻末にあるリファレンス程度
で間に合わないか?
0600高校生NGNG
>UML で分析/設計 -> 実装という流れならともかく、既存のシステムを分析するのに UML で
>図を起こすのは時間の無駄だ。やめとけ。UML は分析/設計用の言語であって、既存のコー
>ドを解析するために作られたワケじゃないからね。
フリーハンドで簡単なUMLを描いて見たけど時間の無駄とまではいえんと思う。
(誰かに提出するドキュメントでないから)

>UNIX V6 のソースを読むだけなら Lions' commentary on UNIX の巻末にあるリファレンス程度
>で間に合わないか?
アセンブラでかかれた部分(のtrapやcoreの初期化)が良くわからん。工業高校生なら
アセンブラバリバリ読むのかもしれんが。。。俺は素人(TT
0601デフォルトの名無しさんNGNG
――――――――――――――――――
おにぎり食べたいワショーイ
___  ___r――――――――――――――
    ∨‖  |ママン、ここは素人ばっかりだね
//  ‖  |____ ____________
/    ‖ /       ∨ヾ:::::ソ;/∧_∧    _______
      ‖    //    |三| " ,  、 ミ  /
 /   ‖          ノ::i::i:;;ヽゝ∀ く  <  そうね  /■\ ∧∧ ∩∩ ∧_∧i::;/ ノ ̄ヾ i   \
二( ´∀`)(=゚ー゚).('Д`).( ´∀`) ∪⌒ ⊂_ノ     ̄ ̄ ̄ ̄ ̄ ̄
  (    )(   ).( : )(    ) (__ノノミ
 |\ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄\.|__./|
 \ \                 \. | |
0602デフォルトの名無しさんNGNG
>>600
unix/low.s のあたりか? 確かに PDP11 知らんと微妙に辛いな。

トラップ/割り込みが発生すると、そのトラップ/割り込みに対応するアドレスから分岐先とステータス
ワードを読んできて、そこに分岐するようになってる。たとえばトラップベクタの先頭は、

trap; br7 + 0.

となってると思うが、これはトラップ 0 (バスエラー)が発生したらステータスワードを br7 + 0 に設定
して trap に分岐、という意味だ。ステータスワードの詳細などは Lions' commentary on UNIX の第二
部第二章に書いてあるから、本を買ってきて読むのが良いと思うぞ。
0603デフォルトの名無しさんNGNG
>601
AAの素人発見!
0604高校生NGNG
>>602
サンクス!そうするよ。
0605デフォルトの名無しさんNGNG
AXは16ビット
シフト回数は切り捨てられて20-16=4ビットシフトになるCPUと
 そのまま20回シフトしてゼロになってしまうのと

両方あったような記憶がある
 その頃のCPU判別方法の一つじゃなかったかな

386はどっちだったか覚えてない
0606591NGNG
intelのサイトに置いてあるPentium4の命令セットリファレンスによると、
「286以降のすべてのIA-32プロセッサは、シフトカウントを5ビットにマスク
する」とあるよ。

「このマスク設定は(仮想8086モードを含めた)すべての動作モードで行われ」
だそうだから、リアルモードでも5ビットマスクということだね。
だから、やっぱり結果は0でいいんじゃない?
0607デフォルトの名無しさんNGNG
>>605のいうように、386か486にはシフトビット数が
大きすぎる(64を超えると??)と
結果がヘンになるバグがあったような気がする。
0608605NGNG
そうか16ビットだから4ビットと思ったら
 32ビットのCPUだから5ビットでマスクか スマン
0609デフォルトの名無しさんNGNG
PUSH  SP で、PUSHされるSPの値は??
0610デフォルトの名無しさんNGNG
>>609
それ使うCPUの判別方法があったな。
80186以降だとデクリメントする前の値になるんだっけ?
0611リストで質問NGNG

mov dword ptr[004358A4], ecx
mov ecx,dword ptr[004358A4]

こんなリスト。2行目って何の意味? nop 代わり?
0612デフォルトの名無しさんNGNG
Cとかでコンパイルして、最適化が殆どかからないときに、
そういうコードが出てくるけど、そういう話やなくて?
0613リストで質問NGNG
いや Delpi.
コンパイラがこんな無意味なことをするとは信じがたいが事実。
0614デフォルトの名無しさんNGNG
alignするためじゃないかなぁ
0615デフォルトの名無しさんNGNG
>613
1) 2行目にループする事を予定してた

2) 利用するメモリを実際に確保させ、以後の処理を高速にさせる為

3) 引数をレジスタ渡しにしたけど複雑な処理をさせたから

4) 単に手抜き
0616デフォルトの名無しさんNGNG
Delphiの最適化ってあまり強くないし。
あくまでも 対Visual Basic でしかない感じ。
Borland C++の最適化もWATCOM C/C++、Visual C++に比べれば劣っていた感じ。
つか、私ではVisual C++6.0の最適化には勝てない。
0617デフォルトの名無しさんNGNG
そぉ? VC6の最適化もあんまり大したことないような。
レジスタの塗分けとかCPU依存のところはまあまあだけど、
CSEなんかの抽象化されたところはあまいような。
GCCの方が上かも。
0618デフォルトの名無しさんNGNG
SPを当ててないVC5みたいに、強力な最適化によって
不正なコードにコンパイルされてもなー
0619デフォルトの名無しさんNGNG
gccの最適化は木を見て森を見ず的な感じがする。
一部分だけ抜き出すとすごいんだけど、関数全体とかモジュール全体になるとイマイチ。
0620デフォルトの名無しさんNGNG
gccはVCに比べてはっきり遅いと思う。
中身まで詳しくは見ていないが、自分の実験では5%以上遅かった。
0621デフォルトの名無しさんNGNG
>>616
>Delphiの最適化ってあまり強くないし。

VCとは、ほとんど変わらないだろ。
0622デフォルトの名無しさんNGNG
最強はVCというのが定説
0623デフォルトの名無しさんNGNG
>>622
どこの定説だよ。
Delは無料で手に入るんだから検証してから言えよ。
0624デフォルトの名無しさんNGNG
どーやってVC++とDelphiでコンパイル時の最適化を検証するの?
0625デフォルトの名無しさんNGNG
 >>611  の元のコードが知りたいな

 Delphiだとあんまりグローバル変数取らないでしょ
0626デフォルトの名無しさんNGNG
>>624 両方持ってたら 少なくても VC 持ってたら 同じ事する関数をコンパイルしてみたら?

πとか素数計算が適当だと思うよ。

Cとの比較になってしまうけど
http://www.infoeddy.ne.jp/~tensyo/prog/piHex.htm
0627デフォルトの名無しさんNGNG
Del厨ハケーン!
0628リストで質問NGNG

mov eax,1
00433614 cmp eax,1
jne 000433625
mov ecx,dword ptr[ebp-08]
movzx ecx,byte ptr[ecx+eax-01]
mov dword ptr [esi],ecx
jmp 0043362F
00433625 mov ecx,dword ptr[ebp-08]
movzx ecx,byte ptr[ecx+eax-02]
mov dword ptr[esi],ecx
0043362F mov ecx,dword ptr[ebp-08]
movzx ecx,byte ptr[ecx+eax-01]
mov dword ptr[004358A4], ecx <-
mov ecx,dword ptr[004358A4] <-
add dword ptr[ebx],ecx
mov ecx,dword ptr[ebx]
imul ecx,dword ptr[ebx],ecx
inc eax
dec edx
jne 00433614

begin
chk:=Us+Ds+Tm;
b:=0;
for i:=1 to Length(chk) do begin
if i=1 then
c:=Ord(chk[i])
else
c:=Ord(chk[i-1]);
s:=Ord(chk[i]);
inc(b,s);
b:=b*c
end;
0629リストで質問NGNG
あれ?ブランクが入らんの?これではどうか
   
    mov eax,1
00433614 cmp eax,1
    jne 000433625
    mov ecx,dword ptr[ebp-08]
    movzx ecx,byte ptr[ecx+eax-01]
    mov dword ptr [esi],ecx
    jmp 0043362F
00433625 mov ecx,dword ptr[ebp-08]
    movzx ecx,byte ptr[ecx+eax-02]
    mov dword ptr[esi],ecx
0043362F mov ecx,dword ptr[ebp-08]
    movzx ecx,byte ptr[ecx+eax-01]
    mov dword ptr[004358A4], ecx    <-
    mov ecx,dword ptr[004358A4]     <-
    add dword ptr[ebx],ecx
    mov ecx,dword ptr[ebx]
    imul ecx,dword ptr[ebx],ecx
    inc eax
    dec edx
    jne 00433614
0630リストで質問NGNG
begin
 chk:=Us+Ds+Tm;
 b:=0;
 for i:=1 to Length(chk) do begin
  if i=1 then
   c:=Ord(chk[i])
  else
   c:=Ord(chk[i-1]);
  s:=Ord(chk[i]);
  inc(b,s);
  b:=b*c
 end;
0631最適化なら、NGNG
LSI-C86最強。昔は。
0632デフォルトの名無しさんNGNG
>630 のコードで cが参照で
  sがグローバル?

じゃあしょうがないんじゃないの?
変数sに他のスレッドが書き込む可能性もあるんだし
0633ageNGNG
バイナリエディタどういうもの使ってます?
おすすめがあったら教えて頂けませんか?
プラットフォームはWinです。
0634デフォルトの名無しさんNGNG
>>631
たしかにあの出力コードは凄かった。レジスタをきちんと使いまくって
くれたし。ただし、Smallモデルl限定だけど(^^;
他のモデルではそうでもなかったような。

>>633
オレはttp://www6.airnet.ne.jp/dds2/にあるStirling使ってる。
0635633NGNG
>>634
早速ダウンロードさせてもらいました。
0636デフォルトの名無しさんNGNG
まえから不思議だったんだけど
MMXと浮動少数命令は同時に使えないのに、。

もしMMX使用中にスレッド切り替わって
切り替わった先のスレッドで浮動小数点命令つかったら死なない?

それともタスク切り替え時にMMXレジスタすべて保存してるとか?
0637デフォルトの名無しさんNGNG
>>636

ノンプリエンプティブなOSなら、
タスク切り替えのタイミングわかるから自前で保存/復帰できますが、
プリエンプティブなOSではOS側でやってくれないと動作不可能ですが。

具体的には、
FLDENV/FSTENV/FNSTENVあたり?
中身についてはこれで。
FRSTOR/FSAVE/FNSAVE
0638デフォルトの名無しさんNGNG
タスク切り替わる時にレジスタを保存しないと困るのは、
なにもMMXに限ったことではないと思うぞ。
0639デフォルトの名無しさんNGNG
アセンブラで高速化する場面は、組み込み系やゲーム系が多いと思うのですが、
業務系などではどうなのでしょうか?高速化よりもソースの読み易さなのでしょうか?
0640デフォルトの名無しさんNGNG
アセンブラで高速化して
そこがバグになったら最悪でしょ。
たいてい人がやると、
パイプライン処理でハザード起こしてしまったりする。
それにPCでは普通はやらない。
というか、普通は速くならない。
速くなるのは、MP3のエンコードみたいに
永遠と同じ処理を繰り返すような物に限った話。
ただ、これは機械語で書くから速くなるのではなく、
CPUに用意された、固有の命令を使うからはやくなる。
組み込み系でアセンブラ使うのは、
コンパイラ作る方が手間がかかるから。
ゲーム系でアセンブラ使うなんて話は最近は聞かない。
0641デフォルトの名無しさんNGNG
× 永遠と
○ 延々と

ぶっ壊れたレコードじゃないんだから。
0642デフォルトの名無しさんNGNG
PS2はアセンブラないとどうしようもなかったらしいじゃん。
まぁ、あれはCPUが特殊スギって話だけど。
0643デフォルトの名無しさんNGNG
>ゲーム系でアセンブラ使うなんて話は最近は聞かない。
オマエMFCプログラマーダロ
0644デフォルトの名無しさんNGNG
>>643
ゲームに必要なのはプログラマーじゃなく
エロ画家と思われ。
0645643NGNG
>644
> エロ画家と思われ。
ウケタ
0646デフォルトの名無しさんNGNG
エロプログラマーですが何か?
0647デフォルトの名無しさんNGNG
エロいコードを頼む
0648 NGNG
アセンブラから Win32 API 使いたいのですが、
ヘッダなしだと結構不便なので、INC ファイルを探しています。
どなたか、DL できるページとか知りませんか?
0649デフォルトの名無しさんNGNG
>>648
つか、ヘッダとインポートライブラリだったらPlatform SDKでダウンロード
できるじゃん。
0650648NGNG
SDK はインストールしてあるけど、*.lib
はあっても、*.inc はないけど・・ >> 649
0651649NGNG
ああ、asmから直接使える形のが欲しいって事か。勘違いしてたよ。
でもそれって*.hから変換するツール作ればいいんでないの?
0652649NGNG
h2inc ってのがあるらしいけど、*.h 突っ込んでも跳ね返されるんだよね。
他に方法ないかな、どっかでヘッダ公開してるとか? >> 651
0653デフォルトの名無しさんNGNG
>>636
浮動少数点のレジスタを保存する命令でMMXレジスタが保存されるから
MMX以前のOSでも大丈夫、というのがミソだったような
0654デフォルトの名無しさんNGNG
>>648 非公式でよけりゃ
ttp://spiff.tripnet.se/~iczelion/
0655デフォルトの名無しさんNGNG
>>653
そのとおり。逆に SSE は OS 側で対処が必要になる。

っつか >>636 が何を疑問に思ってるのかが謎だ。
0656デフォルトの名無しさんNGNG
>>653
ってことはソフトウェアの方で固定少数しか使わないときは
MMXをずっとONにしててもいい、ってこと?
0657デフォルトの名無しさんNGNG
>>656
なんか話がかみ合ってない気がするな。

「MMX を ON にする」というのは、どういう意味だ? MMX を使う場合でも FPU を使う場合でも、
プリエンプティブなマルチタスク OS では

 タスク切り替え時に OS がレジスタの退避/復元を行う
 (実際には FPU 使わないプロセスも多いことに配慮して、遅延処理してるが)

ので、ユーザが気にする必要はない。ユーザが唯一気にしないとまずいのは、同一タスク内で
FPU/MMX を混在させて使う場合だけ。
0658デフォルトの名無しさんNGNG
Cの勉強がてらアセンブラ作ろうと思うんだけど良い資料は
ないかな?
とりあえずZ80でいくつもりです。
0659デフォルトの名無しさんNGNG
>640
今日日のエロゲ、MMXくらい普通に使用してるけど…。
0660 NGNG
MMX の場合、 EMMS によって FPU の タグワードがクリアーされるんだったけ?
EMMS 呼ぶ前に コンテキストスイッチが起こって、別スレッドが x87 命令
使った場合の動作が疑問ということかな? >> 636

レジスタの待避/復元は MMX レジスタは 実質 FPU レジスタな訳だから、いい
として、問題はタグワードだな。
0661デフォルトの名無しさんNGNG
タグワードってFPUレジスタの一部に含まれてなかったっけ?
レジスタにつき2bit分あるフィールドの組み合わせが一つ増えた(定義された)だけだったような。>MMX
それゆえ今までどおりの退避/復元で十分だったかと。
0662デフォルトの名無しさんNGNG
fnsave/frstorでタグワードも含めてすべて保存・復帰されるから
ユーザーアプリでは何も気にする必要はないよ。
0663デフォルトの名無しさんNGNG
基本的に浮動小数点使わなければ MMXオフにする必要なし。
0664デフォルトの名無しさんNGNG
>>663

DLL でそれやるやつ嫌い。特に Microsoft とか Microsoft とか
Microsoft とか。
0665660NGNG
なるほど、同一スレッド間なら問題ないというわけか
リファレンス見たら、確かにそうなってた。多謝 >> 662
0666660NGNG
今日調べたら、MMX テクノロジオフィシャルガイドに詳細が載ってました。
P106 に載ってます。持ってる方は見てください。
0667デフォルトの名無しさんNGNG
>>666
ふつーは Intel Architecture Software Developer's Manual Vol. III を参照すると思われ。
0668デフォルトの名無しさんNGNG
だよねー
0669 NGNG
>>666
この本いいよね。
P6系で各x86命令のμOP構成やそのμOPのレイテンシが結構詳しく書いてある。
IntelのWebのマニュアルには詳しく書いてないんだよね。
0670デフォルトの名無しさんNGNG
↑
まぁ、こんなにかよっためいれいいっぽんにまとめちまえよ
というのがくさるほどあっていがいたい俺はとてもだるひ
0671デフォルトの名無しさんNGNG
>>605,607

遅レスですまんのだが、本当にそんな事実があったの?

手元にとりあえずあった、
ttp://shopping.yahoo.co.jp/shop?d=jb&id=18908945
この本のSHLの説明を見てみたところ、
「初期の486ではSHLの命令エンコーディングを認識しない」
としか書いてないんだが…

尤もこの本、結構誤植や誤謬が多くてちょっと不安なんだけど…
0672デフォルトの名無しさんNGNG
すみません。
アセンブラを学びたいと思ってるのですが、
勉強する順番ってCASL→Z80でいいんでしょうか?
アセンブラを知って実用できるようになるにはどのような手順でいけば
効率的なのでしょうか?アセンブラに詳しい方、是非教えてください。
0673デフォルトの名無しさんNGNG
>>672

なんのためにアセンプラを勉強したいかによるんじゃないかな?
場合によってはアセンブラそのものよりターゲットとなるハードウ
ェアのIO周りの勉強の方が先かも知れないよ。
0674デフォルトの名無しさんNGNG
>>673
レス、有難うございます。
アセンブラをやってみようと思い立ったのは、
「Cを知るためにはアセンブラ(機械語)の知識があることが望ましい」と、
あるサイトに書かれていたからです。
そこで、Amazonなどでアセンブラ関連の書籍を検索しましたが、
在庫も少なく、発行年月も古いので、どれを読めばいいのかわかりません。
アセンブラを学ぶためにZ80の書籍を参考にするのは時代的に古いのでしょうか?
長くなってすみません。
アドバイスいただければうれしいです。宜しくお願いします。
0675デフォルトの名無しさんNGNG
>>674
アセンブラを知っていたらCのポインタを簡単に理解できるという
程度のものじゃないの?
0676デフォルトの名無しさんNGNG
仮想アセンブラソフトって無いですか?
実際のレジスタやメモリではなく、
ソフト上のレジスタやメモリを書き換えるような。
暴走してもソフト的に停止できるし。
昔、Z80でよく暴走させてたので。
0677デフォルトの名無しさんNGNG
>>676 PC9800, X68k, etc.のエミュレータを使うとか。
0678デフォルトの名無しさんNGNG
>677
あ、その手がありましたね。
0679デフォルトの名無しさんNGNG
学習目的だけならCASLでもいいような気はするにゃ。
とりあえず参考書には困らにゃい(笑
0680デフォルトの名無しさんNGNG
>>676
MIPS エミュレータの SPIM とか。ステップ実行させてレジスタの変化とか追えるから、学習用には
便利だよ。
0681_NGNG
>>674
私はCコンパイラが出すアセンブラコードを見て勉強しました。
Cを書く時実行速度を考えられるようになったし。
ただあまり速度に拘るとソースの読みやすさは犠牲になるかも。
0682デフォルトの名無しさんNGNG
>>672
Cで何をしたいのかによるけど…
たぶん、C言語で Z80を動かそうとしているのではなさそうなので…

CASLで十分。ていうか、CASLがオススメ。
なぜなら、初心者用の教材がたくさんあるから。
「月刊情報処理試験」とかの連載記事も役立つよ。

とりあえず、CASL2 のシミュレータで特訓してみてごらん。
ttp://www.jitec.jipdec.or.jp/casl2/casl2dl_001.html
0683デフォルトの名無しさんNGNG
Thunderbird AthlonでMMX2命令って使えるの?
具体的にはpsadbwが使えるか知りたいんだけど。
0684202.221.45.130NGNG
202.221.45.130

俺のIPアドレスだ、おめーらの技量じゃハックデきね〜だろうけどw
0685683NGNG
自己解決しました。使えるようですね。
0686デフォルトの名無しさんNGNG
intel 系 チップでも、 Linux の gas と DOS の MASM では
割り込み番号は全く違うのですか?
BIOS レベルでは何等変わらないと思ってるのですが・・

後、MASM というか MS-Cのインライン asm では

asm push ds
asm mov ax, 0x80
asm mov ds, ax
asm mov ah, ds:0x00
asm pop ds

こういう書き方ができたのですが、gcc 用に

__asm__("push %eax
push %ds
xor %eax, %eax
mov $0x40, %ax
mov %ax, %ds
xor %ah, %ah
mov 0x96(%ds), %ah
pop %ds
movb $0x10, %ah
xor %al, %al
int $0x16
pop %eax
ret" );
}

こういうのを書くと

Error: `0x96(%ds)' is not a valid 32 bit base/index expression

こうなってしまいます。どうすれば %ds番地 + 0x96番地の中身を
%ah レジスタに mov できるのでしょうか。
0687デフォルトの名無しさんNGNG
DSをデータセグメントとして使えるのは16bitモードのみ
0688デフォルトの名無しさんNGNG
302N2r3Z343L2o1c2s3X352l2w3C2u3o2k2A2i2N2o2W2m3c2c3j2a292g3L2e2t2U3Z2S2z2Y2n2W2f2M2r2K3F2Q2a2R1D2E2d2W442X2g2G3C262l2I3W2P1A280l3y3h1B1F3l3R442y3e3x433q3g2F3w2T3i0L3k2s3q2t3o3S3e2p3c2a3h0c3g3n3M2V3G0E3a3u3Y3r3O3c3M3z3R0L
↑
これ暗号らしいんですけど解ける人いますか〜?
0689デフォルトの名無しさんNGNG
>>686
プロテクトモードの時、メモリを物理アドレスで参照するのは、ユーザープロセスでは無理。
0690688NGNG
すみません。解けました。
0691デフォルトの名無しさんNGNG
686の者です。

ユーザープロセスでデバイス直接いじくるのは、gas では無理で、
ioctl() 使うしかないのでしょうか・・・楽は楽なんですけど、、
そうすると、カーネルは低レベルでkeyboard 割り込みとか
どんな風に実装してるんでしょうね。興味深いです。

MMU には、カーネルが勝手に page table を見て仮想アドレスと
実アドレスを変換した値を渡してやるんでしょうね。

確かにカーネルが管理してる領域をユーザーが自由に変更する
事はできません。やっぱり ioctl() しか無さそうですね。
0692デフォルトの名無しさんNGNG
カーネルは普通、、MMUの変換を通らないモードを使ってます。
ttp://www.linux.or.jp/JF/JFdocs/The-Linux-Kernel-4.html#chapter_mm_sect1-4
でも、読んでくださいまし。
0693デフォルトの名無しさんNGNG
ほあえぇぇ〜、カーネル御大自らは「物理アドレス」モード(笑)
つまり、 segment:offset の絶対アドレス指定、
ユーザープロセスのみ「仮想アドレス」モード・・・こら絶対手の届かん
とこに御大が居られる訳ですな。

raw device へのユーザーモードからのアクセスは、もう ioctl() 以外に
考えられません。
0694デフォルトの名無しさんNGNG
>>692
これがホントに普通なのか知りたい。
たとえばどのCPUで使えるの?
そのリンク先見るとAlphaは違うって書いてあるね。
x86も違うよね?
0695ageNGNG
age
0696デフォルトの名無しさんNGNG
>>694
Alphaも「物理的にマッピングされたアドレス空間」って書いてあるし、>>692の解説はx86のものです。
MMUを持ってないプロセッサへのUNIXカーネルの移植は、難しそうです。
でないと、プロセスが他のプロセスのメモリ壊すのとか、自分自身の飛び込み自殺とか防げないですからね。
(68881(でしたっけ?)を積んでない68Kのシステムで動くUNIXとか、Z80で動くのとか、あるにはあったようですが…)
0697694NGNG
>>696
そうじゃなくて「カーネルは普通MMUを通らないモードを使ってます」の部分です。
だけどAlphaはMMUを通らないモードはないって書いてあるんでしょ。
x86もないと思うのよ。
で、結局カーネルも仮想アドレスでアクセスしてるけど、仮想アドレスを管理して
るのはカーネルだから、どの物理アドレスにマッピングされてるかを知ることが
できるって感じなのではないかなぁと思ったのです。
0698デフォルトの名無しさんNGNG
>>697
> x86もないと思うのよ。
あるよ。妄想と思いつきだけでいい加減なことを書かないように。
0699694NGNG
>>698
まじで?
インテルのマニュアルのどこを見ればいいか教えてくれ。
カーネルの話だからリアルモードとかページングしないみたいなネタはなしで。

0700デフォルトの名無しさんNGNG
>>699
>>692のページは、「MMUの変換を通らない」、であって、「MMUを通らない」ではない事に注意。
0701デフォルトの名無しさんNGNG
タスク切り替えが起こってTSSからCR3をロードするとき、PGビットが0なら物理アドレスモードってことでないの?
0702デフォルトの名無しさんNGNG
age
0703にょ って言ってみなNGNG
汗を拭ってタイプしたコード 古本屋で見つけた安くていい本

幼い日の手のぬくもりが帰ってくる
0704694NGNG
>>700
たとえば仮想アドレス100を物理アドレスの100にマッピングしてたら
「MMUの変換は通ってない」という意味ですか?

>>701
それはページングを使わないって意味ですよね?
0705デフォルトの名無しさんNGNG
>>704
>>701はカーネルプロセスだけページングをしない、ってんだから、それでいいんじゃないの?
あと、ページングしないんだから、変換通ってない、で、おかしくは無いと思うが。

それとも、セグメントディスクリプタ:オフセット→リニアアドレスの変換が、MMLの変換だ、
だから>>692の
>MMUの変換を通らないモード
や、>>692のページの、
>プロセッサはこのモードのときはアドレス変換をしようとしない。
は、間違いだ、といいたい?
じゃなかったら、インテルのマニュアルには「物理アドレスモード」っていう言葉が出てこないぞ、
っていってるのか?
だったらあんたがそう思ってればいいだけのことだ。
0706デフォルトの名無しさんNGNG
NASMの書籍ありませんか?
0707 NGNG
ホムペにドキュメントあるでしょ。あれで十分。
英語もそんなに難しくない。
日本語なら www.nk.rim.or.jp/~jun/
0708デフォルトの名無しさんNGNG
PGビットはCR0だからTSSには含まれていないが。
0709デフォルトの名無しさんNGNG
じゃ、CR0のWPを書きかえる
0710694NGNG
>>705
それならMMUを通ってないっていえると思うんですが、
どうやったらできるのか分からないって意味です。

PGビットをクリアするのは意味ないですよね。ページングをオフにしたら変換
はしませんけど、>>692の説明にあったようにページングを仮定してるOSのカー
ネルで使えませんから。

それで、例えば、仮想アドレス100を物理アドレス100の変換するようにページ
テーブルを作って仮想アドレス100にアクセスすることで物理アドレス100にア
クセスできますよね。これを変換を通ってないとは呼ばないと思うんです。
(べつに仮想アドレスを物理アドレスと同じにする必要はありませんが)

で、これ以外に物理アドレスにアクセスする方法があるんだったら
知りたいなぁと思ってるのですけど。
0711デフォルトの名無しさんNGNG
WPを書き換えてページングをディセーブルにするのは、いつでも出来るんだから、カーネルプロセス
がそれをやればええんでないの?
ちなみにPGビットは一度セットしたらリセットする方法は用意されてないはず。
0712デフォルトの名無しさんNGNG
WPは書き込み保護でしょ? ページングのディセーブルと何の関係が?
0713デフォルトの名無しさんNGNG
IA-32 インテルR アーキテクチャソフトウェア・デベロッパーズマニュアル システム・プログラミング・ガイド
4-2
・制御レジスタCR0 のWP フラグをクリアする。
・ページ・ディレクトリ・エントリとページ・テーブル・エントリごとに読み取り/書き込み(R/W)フラグとユーザ/スーパバイザ(U/S)フラグをセットする。
この処置によって、各ページは書き込み可能なユーザ・ページとなり、実質的にページ・レベル保護がディスエーブルにされたことになる。
0714デフォルトの名無しさんNGNG
よって、ページレベル保護と、ページングは別物
0715デフォルトの名無しさんNGNG
まだやってたのか、そんなに気になるなら、ソースみればええやん。
0716694NGNG
ソース見ても解決しないってば。
Linuxは仮想アドレス使ってアクセスしてるの。
だけど、普通はMMUを通らないモードを使うってあったから、
その普通ってどの石かって聞いたらIntelって言われたんだけど、
肝心のそのやりかたがわからないと。
0717デフォルトの名無しさんNGNG
>>694
気に入らなかったら [email protected] にメールだして文句言えば?
つか、あんた、だれを相手にしてるんだ?(w
0718デフォルトの名無しさんNGNG
結局 >>692 のリンク先の説明はうそっぱちなんだろ?
少なくともx86には当てはまらないと。
0719デフォルトの名無しさんNGNG
>Linuxは仮想アドレス使ってアクセスしてるの。
プ
x86のこと言うなら、論理アドレスとリニアアドレスと物理アドレスで話しようよ。
0720694NGNG
>>717
>>692 とか >>698 とか
というか、特に >>698 です。

とりあえず、リンク先はAlphaのことが書いてあるのでx86で物理アドレスで
アクセスできるとかは書いてないと思います。

>>719
Linuxは特にx86だけメモリ管理の扱いが違うってことはないと思います。


0721719NGNG
>>720
だからさ、x86に「仮想アドレス」っていう言い方は無いのよ。
>ソース見ても解決しないってば。
つーことは、ソースは見たんだよね、当然。
見ても解決しなかった、と。
だったらx86のカーネルはどういう実装だった?
で、実装がわかったんなら、「こうなってました」って言えば済むことじゃん。
でも、解かってれば、セグメンテーションとページングを別けて話出来るはずだよね??
x86には「物理アドレスモード」と呼べるモードはたしかにある、フラットメモリモデルがそうだ。
でもLinuxはそれを採用してない。これは>>692のリンクのほかのページ見れば、ページングを使ってることがわかるから。

ま、なんだ、きみはその、こう言いたいわけか?
「でびっどのうそつき!」
0722デフォルトの名無しさんNGNG
>>721
仮想アドレスなんて一般的な用語だろ。
Intelが使用している用語のみを使えという理由が意味不明だ。

あとそのx86のフラットメモリモデルとやらは、結局UNIX系OSのカーネルでは
使い物にならないしろものなんだろ?
0723722NGNG
ちょっとまて、フラットメモリモデルってセグメントの機能を利用しないという事で、
ページングとは全く別の話じゃないか。
ページレベル保護機能とページング機能の区別がつかない >>711 と同一人物? 電波?
0724719NGNG
>>722
Intelが定義している用語にこだわってるんじゃなくて、x86のアーキテクチャの話にしたいだけ。
694は「x86の場合はどうなのか」にこだわってるから。

それから、フラットメモリモデルは、「セグメンテーションとページングをディセーブルにした状態」を指すものと思うが?
(ディセーブルというか、イネーブルにしない、というか)
0725719NGNG
>>723
読みなおしたら、ページングはどのメモリモデルとも組み合わせることが出来るって書いてあったよ。
ごめん。
0726719NGNG
「物理アドレスモード」と呼べるのは、マルチセグメントも
ページングも使わない場合、だから、>>692のページにある
>プロセッサはこのモードのときはアドレス変換をしようとしない
っていう意味の「物理アドレスモード」は、x86用のカーネルは使っていない。
これはこれでいい。

でも、>>692のページを読むと、仮想アドレスと物理アドレスとをページングだけで解説してる、
つまり、仮想アドレス→物理アドレスの変換と、ページ保護だけのプロセッサの解説だろうから、
そもそもセグメンテーションのあるx86には当てはまらない。

だから、694には、気になるならソース見ろ、と。
で、x86にとっては抽象的な「仮想アドレス」という言いかただと、話がおわらないぞ、と。
0727694NGNG

結局のところ、>>692 のリンク先にある文書は説明を簡単にするためにカーネ
ルが物理アドレスモードで動いてると書いてあると言う解釈でいいのかな?

単純に x86 でページングをオフにしてる場合のようなものはカーネルの実装
には使えないので、このスレで x86 でできるといってたのはそのあたりの勘
違いと。

で、僕は x86 には、そういうページングを使いつつ物理アドレスでメモリに
アクセスすると言う便利な方法はないと思っていたのだけど、それができるプ
ロセッサはあるのかと言うのが最初の質問でした。

>>726
というわけで、たとえば Linux ではどう実装されてるかというようなことは
気になってませんでした。つまり、Linux ではそういうのは使われてないから
です。

あと、Linux ではフラットモデルを使ってると思いますが、そうすると仮想ア
ドレスはリニアアドレスと等しいのでリンク先のページの解説が当てはまらな
いというのはちょっと言い過ぎですね。
0728デフォルトの名無しさんNGNG
age
0729デフォルトの名無しさんNGNG
w32dasmで逆アセンブルしたときのコードで、
mov dword ptr [ebp-08], ebp
というのがあったのですが、これはどういう
意味なんでしょうか。どなたか教えてください。
0730デフォルトの名無しさんNGNG
>>729
Cで書くなら、
*(long *)(ebp - 8) = ebp;
という感じかな?

*((long *)ebp - 8) = ebp;
ではない点に注意。
0731デフォルトの名無しさんNGNG
アセンブラができる人はかっこいいなぁと思っているのですが、
x86って何?って人がいきなりアセンブラに手を出すのは無謀ですか?
(intel系のCPUのことらしい、というくらいしか知らない)
そういう知識ってどこで手に入れるのかさっぱり分からなくて…
0732デフォルトの名無しさんNGNG
>>729
それは、
void zzz(int x, int y, int z)
{
  int a, b, c;
・・・
}

だったら、変数bのことじゃな。(32ビットの場合)

ちなみに、[ebp+8]だったら、変数z
ebp-4は変数cじゃよ。

0733デフォルトの名無しさんNGNG
>>729
ebpはデフォルトのセグメントレジスタがssだから、VCだと
普通スタックフレーム(ローカル変数とか)のアクセスに使うね。
実際に逆アセンブルしてそういうコードみたこと無いから、はっきり言えないけど、
ebpをスタックフレームに保存してるって事は、関数から戻るとき用に保存してる
んじゃないかな?
前後のコードもうすこし教えて欲しいナリ。
0734デフォルトの名無しさんNGNG
>>731
かっこいい、くらいでてぇ出さないほうがいいじょ。
とりあえず>>682のでもやってみたら?
0735デフォルトの名無しさんNGNG
>>731
古本屋逝って8086本を探すんじゃな。
インテル系の 16ビットの最初のマイコンは、8086だから。

8086
80286
80386
80486
Pentium

って進化してきた。
これは、PCメーカとかが、型番に386とか付けるのが面白くなかったらしい。

その昔、RedZepplinというお爺さんに人気のあったバンドのアルバムは、
レッドツェッペリンI→�U→�V→�Wときて、
五作目から「永久の歌(邦題)」(だったとおもう)などという、題名にしてから、
落ち目になったので、インテルもそうなると逝ってたマスコミが居たのぉ。

アセンブラ知っている人はかっこいいんじゃなくて爺さんじゃよ。
0736デフォルトの名無しさんNGNG
80186もいれて欲しいなぁ
あと、80486はi486が正しいんでなかったっけ?
0737デフォルトの名無しさんNGNG
Windows使っているなら、今すぐ、DOSプロンプトへ降りて、
C:\>debug
-a 100
2469:0100 mov ah,9
2469:0102 mov dx,200
2469:0105 int 21
2469:0107 mov ax,3000
2469:010A int 21
2469:010C
-e 200
2469:0200 41.48 41.65 41.6c 41.6c 24.6f 8C.20 C2.41 82.73
2469:0208 CC.73 83.65 74.6d 83.62 40.6c 83.65 43.72 83.21
2469:0210 8B.0d 82.0a F0.24
-g =100
Hello Assembler!

AX=0000 BX=FF00 CX=0000 DX=0200 SP=FFF0 BP=0000 SI=0000 DI=0000
DS=2469 ES=2469 SS=2469 CS=2469 IP=0132 OV UP EI NG NZ NA PE CY
2469:0132 2E CS:
2469:0133 0D0A35 OR AX,350A
-exit

ってやれば、機械語版、Hello Assember! の出来上がり。
※ -e の後は、2桁入力後、スペースキーで、最後(24)を入力後、Enter
0738デフォルトの名無しさんNGNG
スマン
>>737の
mov ax,3000
は、
mov ax,3100
だった。プロセスの終了のつもりだったが、30だと、DOSバージョン取得だった。
どうも、exit 入れないとおわらないとおもった。
0739729NGNG
ごめんなさい、typoしてました前後文付き。

call 0100735D
mov dword ptr [ebp-08], ebx ; <- typo
call 010073B2
mov dword ptr [ebp-08], eax
push dword ptr [eax]
call 01007349
…
といってもcallの中身書かないと無意味そうですが(;´д`)

で、質問した個所はこんな感じに解釈してみました。違ったら訂正お願いします。
・mov dword ptr[ebp-08], ebx
ebxを、dword型とて[ebp-08]のアドレスに書き込む。
0740デフォルトの名無しさんNGNG
>>737
いまの Windows には debug はつかないよん。
DOS 5 位でつかなくなったんじゃ?
0741デフォルトの名無しさんNGNG
>>740
WindowsXP Proにはdebug.exe入ってるけど?
0742デフォルトの名無しさんNGNG
>>740
WinMeにもdebug.exe入ってるみたいですけど?
0743デフォルトの名無しさんNGNG
>>739
ebpだと意味がちがっちゃうけど、ebxなら、まんま>>732が正解。
0744デフォルトの名無しさんNGNG
>>741
>>740 は Windows9x しか使ったこと無いんだよ。NT 系は、みんな debug 入っ
てる。(edlin とかも入ってるけど、使ってる人いるのか ?)
0745デフォルトの名無しさんNGNG
Windows98SE、debug入ってたよ。
0746デフォルトの名無しさんNGNG
>>739
>ebxを、dword型とて[ebp-08]のアドレスに書き込む。
あってますよ。dwordは、32ビット ebxも32ビットですね。
0747デフォルトの名無しさんNGNG
>>744
(´-`).。oO(EDLIN なつかすぃ)
0748デフォルトの名無しさんNGNG
どこかWindowsプログラムをassembleで書く、って感じの記事を
乗せてるページもしくは書籍ないかな?
0749デフォルトの名無しさんNGNG
MASM(ver6.15)で
movdqu xmm0, DQWORD PTR [m64+ebx+8]
としたいんですがエラーになってしまいます。(DQWORD PTRが不正)
128bitのデータ型を指定する事はできないんでしょうか?
0750デフォルトの名無しさんNGNG
>>749
128bitデータ型は「XMMWORD PTR」。

便乗で、質問。
movsd xmm0,QWORD PTR [ebx+8]
がMASMで通らないんだけどどうしたらいい?
インラインアセンブラなら問題なく通るんだけど。
0751デフォルトの名無しさんNGNG
>>750

MMWORD PTR で通らないか?
0752デフォルトの名無しさんNGNG
クルーソーの仕様書って一般には出てないの?
0753デフォルトの名無しさんNGNG
うぬ、XMMWORDでもundefined symbol…
ヴァージョンが古いのかそれとも他になんか必要なんですか?
MASMは6.15.8803です
0754750NGNG
>>753
すまん、上の方で、
.XMM
XMMWORD TEXTEQU <OWORD>
って定義されてた。
128bitデータ型は「OWORD PTR」というのがMASMの正式な名前らしい。

>>751
それでも通らないのです。
movsd xmm0,xmm1
も通らないです。
VC++のインラインアセンブラなら通るんだけど。
0755デフォルトの名無しさんNGNG
どうもありがとうございます>750さん
OWORDですか・・・わかるわけない(;´Д`)
OCT(8)ってことか?
なぜ素直にDQWORDにしなかったんだろう…
0756750NGNG
それからVC++のインラインアセンブラでは OWORD PTR は使えず、
やっぱり XMMWORD PTR と書く必要があるみたい。
結局128bitデータは
MASM : OWORD
VC++ : XMMWORD
ということらしい。なんかややこしい。
0757デフォルトの名無しさんNGNG
なんでDQが「素直」なんだろう?
だったら4バイトはDDWORDが素直?
0758757NGNG
あ、8バイトだった、つか、64ビットだった。
0759デフォルトの名無しさんNGNG
WORD→ x2→DWORD
↓        ↓
x4        x4
↓        ↓
QWORD→x2→DQWORD

deiijan
0760デフォルトの名無しさんNGNG
age
0761デフォルトの名無しさんNGNG
DQWORDかQDWORDか、悩み所だな…
0762反68NGNG
そう言うワケですので、元68プログラマ、及び、予備軍の方は、

こちらhttp://pc.2ch.net/test/read.cgi/pc/1013286504が用意されて
います。
0763デフォルトの名無しさんNGNG
>740
debug.exeはwin98にもはいってますよ
アセンブラの勉強の初期につかってました
0764デフォルトの名無しさんNGNG
Z80で小数点付きのかけ算、わり算を行いたいのですが
足し算、引き算、シフトでどの様に行えばいいのでしょうか?
0765デフォルトの名無しさんNGNG
小数点付きじゃなくて、整数のかけ算割算は分かりますか? >>764
分からなかったら話はまずそれからですね。
あと、小数点付きというのは浮動小数点? 固定小数点?
0766デフォルトの名無しさんNGNG
JAPが作った、Vectorに登録されてそうな気軽なアセンブラない?
0767764NGNG
>>765
100*10を足し算命令で行う= 100を10回足していく
100/10を引き算命令で行う= 100-10を引けるまで行う
で、いいのでしょうか?

>あと、小数点付きというのは浮動小数点? 固定小数点?
これがいまいちわかりませんでした

今考えているのはわり算の場合例えば3000/2000の計算は

3000-2000 = 1000 1回引けた
1000を10倍して10000-2000を引けるまで行うと5回引ける
この結果から答えは1.5

かけ算の場合例えば2.22*1.2は
2.22をを100倍して222、1.2を10倍して12
222を12回足して2664
小数点の位置は100倍、10倍しているので下から3桁目で答えは2.664

と求めようとしています
0768デフォルトの名無しさんNGNG
>>766
意味不明。
0769デフォルトの名無しさんNGNG
>>767
それを10の巾乗じゃなくて2の巾乗(シフト)でやりましょう。
0770765NGNG
>>767
見たところ、いきなり小数点演算に挑戦するには荷が重いように思います。
まずは整数同士の掛算、割算に限定してみた方がいいです。

ポイントは、>>769の言うように数を10進数でなく2進数として考えること。
計算のやりかた自体は、人間が2桁以上の数を手で筆算するのと同じです。
例えば3×5を計算するとして、これは2進数だと11×101。これを、小学生に
戻ったつもりで筆算します。
   11
× 101
-------------
   11
  00
 11
-------------
 1111
これを見るとなんとなく分かると思いますが、5(101)を下から1桁ずつ3(11)に
掛けては3(11)を1桁ずらす、の繰り返しです。
ここで「1桁ずつ掛ける」というのは、2進数では×0と×1しかないので3(11)を
足すか足さないかのどちらかしかありませんし、「1桁ずらす」のはビットシフト
そのものです。これで、足し算とシフトだけで掛算ができるわけです。
割算についても、同様に筆算をイメージしてみるといいでしょう。
0771デフォルトの名無しさんNGNG
>>766
「Vectorに登録されてそうな」って…?
(´−`).。oO( Vectorで探せばぁ? )
0772デフォルトの名無しさんNGNG
88エミュとか持ってるけど懐石本がないと何もできないだろうなー
0773デフォルトの名無しさんNGNG
さっきからアセンブラのプログラミングを始めたのですが、
Linux上での汗プログラミングを勉強するのにいいサイトは
ありますか?英語のサイトは沢山見つかったのですが、
最初は日本語のものが読めると嬉しいです。

それともCでプログラミングしたのがどうコンパイルされるか
確かめながら覚えるのが早いでしょうか?
0774デフォルトの名無しさんNGNG
http://bw-www.ie.u-ryukyu.ac.jp/~kono/lecture/2001/programming1/
0775デフォルトの名無しさんNGNG
asでプログラミングしてるもんです。
セクションとセグメントはどう違うのでしょうか?
386におけるセグメントは大体分かるのですが、
セクションというのが何なのか分かりません。
asのマニュアルなどを見ると
Ld
As
Sub
bbs
などのセクションがあり、さらにLdに関しては
named,text,data
bss
absolute
undefined
などがあるようです。
誰かお願いします。助けてください。
0776デフォルトの名無しさんNGNG
>>755
Asは高機能なアセンブラだからinfoをよく読んだ方がいい。
gccで吐かれるソースはあまりAsの機能を使ってないから
Asを使いこなすにはそれを読んでるだけじゃだめだろう。
0777デフォルトの名無しさんNGNG
777get!
0778デフォルトの名無しさんNGNG
>>775
汗派の氷魚さんに聞いてください。
かれはインテルにいたそうですから。
0779デフォルトの名無しさんNGNG
まだ初心者なんですがちょこっと計算させるプログラムを組んでデバッガで観察するばっかりじゃ
面白くないんでその結果をアセンブリのみで(call putcharとかなしで)表示させてみたいんですが
参考になるページとかのヒントないでしょうか?
(Windows+GNU asでやってます)
0780デフォルトの名無しさんNGNG
libcのソースコード?
0781デフォルトの名無しさんNGNG
>>779
そんな時こそ DOS コール。
0782デフォルトの名無しさんNGNG
>>779
今のPCでは、おまえが理想としている技術はなかなか身につきません。
とりあえず、秋月の通販でH8/3048のボード一式を買ってください。
だまされたと思ってやってみろ。
0783デフォルトの名無しさんNGNG
海外のサイトとか見るとLinuxでのアセンブラプログラミングに
関するサイトとか結構みるけど、日本には殆どないね。
これがコアなユーザー層のレベルの違いなのか?
0784デフォルトの名無しさんNGNG
libcしみたら

/* Write the character C on stdout. */
int
putchar (int c)
{
return __putc (c, stdout);
}

となってて、さらに

/* The C standard explicitly says this can
re-evaluate its arguments, so it does. */
#define __putc(c, stream) \
((stream)->__bufp < (stream)->__put_limit ? \
(int) (unsigned char) (*(stream)->__bufp++ = (unsigned char) (c)) : \
__flshfp ((stream), (unsigned char) (c)))

とかなっててもういや〜。

>>782
それっていくらぐらいするもんなんでしょうか?

>>783
そうなんですよ。なんか圧倒的に情報少ないんです。
http://directory.google.com/Top/Computers/Programming/Languages/
とかみると海外じゃ結構情報おおそうなんですか。英語のページあさった方がいいのかな?

0785デフォルトの名無しさんNGNG
今のPCでもいくらでもアセンブラはできます。
というか今の組み込みはCでもできるんで
ライブラリさえ用意してあればPCと同じ。
H8のレジスタは32bitで68000や386SXクラスです。
(モード7ではRAM2Kバイトで悲惨だけど)

text ... Windowsでいうコードセグメント
data ... 初期値を持つデータのセグメント
bss ... 初期値を持たないデータのセグメント
その他 ... デバッグや実行時リンクのシンボル、他

昔のbsdではvoidセグメントが実行時リンクライブラリ
Cでいうstatic変数がdataに来る。
古典的なUNIXのスタイルでは、
bssの両端にスタックとヒープが向かい合って存在し、
中央の領域は仮想記憶空間で実メモリがあるとは限らない。
最近はマルチスレッドと実行時リンクなどで
新しいトレンドがあるかもしれない。
Linuxなんかでは変わっていない。
0786デフォルトの名無しさんNGNG
>>784
ttp://www.akizuki.ne.jp/
マザーボードとCPUボード、開発ツールのセットで10000円ほど。
I/Oを叩けばLEDも光るので、CPUの仕組みを学ぶのにもいいと思う。
0787デフォルトの名無しさんNGNG
http://www.akizuki.ne.jp/ashop/h8.htm
これですか?なんかおれもやりたくなってきたよ。
386みたいな高級なのなじゃなくても基本が知りたかった。
0788何ぞや?NGNG
http://pc.2ch.net/test/read.cgi/prog/1010924613/637-638
0789デフォルトの名無しさんNGNG
ハローワールドなら多分こんな感じ。

.data
L0001 .byte "hellow, world", 0x0a
.text
_main:
move.l ebp, esp
move.l $L001, eax
push ax
call _printf
move.l esp, ebp
move.l 0, eax
ret
0790工房NGNG
おい!先輩方!
アセンブリのいい本知ってたら教えてください。
ついでに売ってるところも教えてください。
0791デフォルトの名無しさんNGNG
一見とっつきにくいけど本見るまでもなく単純。
命令とハードとOSの知識だけ。
Cの関数はgccのX86なら引数を右からプッシュして_関数名で
呼び出すだけ。結果はeaxレジスタ。
スッタクポインタをいじると死ぬから、
扱うルールをハローワールドのアセンブラ出力をgcc -Sで出して調査。
アセンブラの関数からprintfとか使うの難しくないはず。
0792 NGNG
質問なんだが、intel 構文から AT&T 構文へ変換する intel2gas っていうツール
使って試しにインラインアセンブラを含んだ C のソースを変換したんだが、
はき出されたものを gcc に食わすとエラーが出る。誰か詳しい人教えて。
ちなみに AT&T 構文の知識は全くありません。

以下、簡単なソース。
/* testi.c */
#include <stdio.h>

int main()
{
int i, j, k;

i = 0x20;
j = 0x10;

__asm
{
mov eax , dword ptr [i]
mov edx , dword ptr [j]
add eax , edx
mov dword ptr [k] , eax
}

printf("%d\n", k);

return 0;
}

command:
$intel2gas -m -I testi.c > test.c
$gcc -o test test.c
test.c:23: invalid `asm': operand number missing after %-letter
0793デフォルトの名無しさんNGNG
Specifying Registers for Local Variables
You can define a local register variable with a specified register like this:

register int *foo asm ("a5");

Here a5 is the name of the register which should be used.
0794デフォルトの名無しさんNGNG
>>792
変換後のソースがないとなんとも言いようがないと思われ。
0795793NGNG
%はレジスタを割り当てるテンプレートのエラーみたい。
インラインの変数名やめて
register int i asm("esi");
register int j asm("edi");
で渡して通らないか。
3個目の変数はまずいかも。
0796792NGNG
コマンド実行すればわかると思うが一応のせとく。 >> 794

/* testi.c */

#include <stdio.h>

int main()
{
int i, j, k;

i = 0x20;
j = 0x10;

__asm__ (
"movl i, %eax \n\t"
"movl j, %edx \n\t"
"addl %edx, %eax \n\t"
"movl %eax, k \n\t"

: // FIXASM: output regs/vars go here, e.g.: "=m" (memory_var)

: // FIXASM: input regs, e.g.: "c" (count), "S" (src), "D" (dest)

: "%eax", "%edx" // CHECKASM: clobber list
);

printf("%d\n", k);

return 0;
}
0797デフォルトの名無しさんNGNG
そういう変換か。
mov %0, dword ptr [i]
mov %1, dword ptr [j]
add %0, %1
mov dword ptr [k] , %0

0798797NGNG
ついでに自動変数のi,j,kはbp[offset]だから別のエラーだと思うが
0799792NGNG
どーゆこと? >> 797
できればフルソースで頼む。
0800デフォルトの名無しさんNGNG
800ゲット
0801797NGNG
展開結果はマクロのパラメーターになんなきゃダメ。
だから、%eaxでなくマクロパラメータの%0が出力されるように書かなきゃ。
レジスタ名がそこにある時点でアウト。
コンバーターの仕様は知らない。
関数単位がラクでいいよ。
0802792NGNG
アセンブラの凄腕とみて 767 の __asm__() の部分を具体的に修正してください。 >> 801
AT&T 構文は知識がないのであなたの言っていることはよくわかりません。

>> コンバーターの仕様は知らない
intel2gas はすぐにコンパイルできるのでできれば試してみてください。

>> 関数単位がラクでいいよ
普段は NASM 使ってるんでよくわかります。
0803デフォルトの名無しさんNGNG
アセンブラはともかく、gccの仕様の問題です。
インラインだと、レジスタのスケジューリングの問題が
あるんで、テンプレートマクロの形でレジスタ名を指定しろという
ことです。前と後ろで勝手にレジスタの退避とかするんでなくて、
オプティマイザが具体的にどれを使うか決めるんです。
0804792NGNG
やはり、自動変換はムシが良すぎるのか・・・。
intel2gas の出力を gcc がそのまま通すと踏んだのだが ・・・。
gcc インラインアセンブラを少し勉強してから出直してくる。
ご協力感謝する >> 803
0805とおりすがりNGNG
gcc の asm は複雑やね。インライン付きのソースを
読んだことがあるけど一部いまでもわけわからんよ。
マニュアル牽きながら読まないと…。
0806デフォルトの名無しさんNGNG
お勧めページ

国内
ttp://hp.vector.co.jp/authors/VA000124/
ttp://black.sakura.ne.jp/~third/
ttp://www.e-net.or.jp/user/missing-link/assembler/
ttp://www.geocities.co.jp/SiliconValley-PaloAlto/5989/

海外
ttp://spiff.tripnet.se/~iczelion/tutorials.html (最高にお勧め)

なんつーか、基本的なアセンブラの知識は日本の奴でも充分。
WindowsプログラムのはSDKの知識と最後の奴で充分だった。
0807デフォルトの名無しさんNGNG
>>796
やりたいことはこうじゃないか?
eaxを直接指定するのは問題ないぞ。ただしCの文字列の中では % は2つ必要。
clobberに書くのはレジスタの名前。
%0 や %1 を使う必要があるのは C の変数へのアクセスだ。

__asm__ ("movl %1, %%eax \n\t"
"movl %2, %%edx \n\t"
"addl %%edx, %%eax \n\t"
"movl %%eax, %0 \n\t"
: "=m" (k)
: "m" (i), "m" (j)
: "eax", "edx");

ただし、メモリからレジスタへの読み込みはオペランド制約をrにすれば
自動でやってくれるので普通は以下のように書く。

__asm__ ("addl %2, %0"
: "=r" (k)
: "0" (i), "r" (j));
0808デフォルトの名無しさんNGNG
movl $1, %eax
addl (%edx), (%eax)
0809デフォルトの名無しさんNGNG
Sparcのframe.hについて教えてください。
Sparcのstack frameの定義がsys/frame.hにありますが、
struct frame {
int fr_local[8]; /* saved locals */
int fr_arg[6]; /* saved arguments [0 - 5] */
struct frame *fr_savfp; /* saved frame pointer */
int fr_savpc; /* saved program counter */
char *fr_stret; /* struct return addr */
int fr_argd[6]; /* arg dump area */
int fr_argx[1]; /* array of args past the sixth */
};
このfr_argとfr_argdって何がちがうんでしょうか。
fr_argdにCの関数の引数が入ってる感じなんですが。。。

アセンブラの達人の回答お願いしまっす!
0810デフォルトの名無しさんNGNG
ターボアセンブラってソフトは今も売っているんですか?
0811デフォルトの名無しさんNGNG
ターボアセンブラってソフトは今でも動くんですか?
0812デフォルトの名無しさんNGNG
これ?
http://www.borland.co.jp/bcsuite/prodinfo/bcsoverview.html
0813デフォルトの名無しさんNGNG
>>809
Sparcにはレジスタウィンドウという仕掛けがあって、関数呼び出しの際に
呼び出し元で使っていたレジスタをいちいち保存しなくてもいいように
なっているんだけど、当然ながらレジスタ数には限りがあるので、
関数呼び出しのネストがある数(8くらいだっけ?)以上に深くなると、
自分が使用するレジスタを確保するために、自分の呼び出し元の元の…の
使っていたレジスタをスタックに退避しなければならなくなる。
で、fr_localやfr_argなどがそのための領域みたい。

Sparcは実際に使ったことないので間違ってたらゴメン。
0814デフォルトの名無しさんNGNG
>>813
もうしわけないっす。
でも、fr_argとfr_argdの違いってことなんですが。。。
0815デフォルトの名無しさんNGNG
>>809
SPARC だと汎用レジスタが 32 (r0 - r32) まであって、用途は

r0    ゼロレジスタ
r1-r7  グローバル
r8-15  出力(関数呼び出しのときに渡す引数, return address, stack frame pointer)
r16-23 ローカル
r24-r31 入力(関数呼び出しのときに渡された引数, struct return address, レジスタ
         に収まらなかった引数を格納したスタック領域へのポインタ)

となってる。当然 r0-r7 は関数呼び出しのときに保存する必要がないので、
保存する必要があるのは残り 24 個。それを struct frame に適当に割り付け
てるだけだと思うよ。

名前からして fr_local がローカルレジスタ、fr_arg が出力で fr_argd が入力じゃ
ないの。
0816815NGNG
> SPARC だと汎用レジスタが 32
一つのレジスタウィンドウで見える汎用レジスタが 32 ね。汎用レジスタ自体は
もっと大量にある。
0817813NGNG
なんだか説明が変でした。すんません。
で、"SPARC ABI"で検索したら以下のようなドキュメントが見つかったので、
紹介しときます。

"Understanding stacks and registers in the Sparc architecture(s)"
http://www.sics.se/~psm/sparcstack.html
これは知りたいことの説明そのまんまになっていると思う。

"SYSTEM V APPLICATION BINARY INTERFACE SPARC Processor Supplement"
http://www.sparc.org/standards/psABI3rd.pdf
これの3-8 Function Calling Sequenceも参考になります。
0818デフォルトの名無しさんNGNG
>>814です。
みなさん、ぬりがとうございます。ちょっと調べてみます。
0819デフォルトの名無しさんNGNG
あげてみる
0820デフォルトの名無しさんNGNG
ぬりがとう… もとネタあり?
0821デフォルトの名無しさんNGNG
ぬりがとうあげ
0822デフォルトの名無しさんNGNG
ぬげ
0823デフォルトの名無しさんNGNG
movl %eax, %ebx

この構文を使うコンパイラはなんですか?

0824デフォルトの名無しさんNGNG
gnu assembler
0825デフォルトの名無しさんNGNG
アセンブラ勉強したいけど
PICとかの言語とかと同じ感じですか
0826デフォルトの名無しさんNGNG
gas + linux + x86の勉強にいいWebをよろしくお願いします。
0827デフォルトの名無しさんNGNG
$info as
0828デフォルトの名無しさんNGNG
俺はアセンブラはほかの言語よりも、ソースコードを
多めに読むべきだと思うYO。作りたいプログラムがあっても
アセンブラは1命令自体の役割は小さいから、結局
いくつかセットで理解したほうが使いやすい。
0829デフォルトの名無しさんNGNG
昔、構造化アセンブラを実現するMACROSってあったねぇ・・・。
0830デフォルトの名無しさんNGNG
PICは悪いこと言わないからやめとけ。
せめてAVRにしろ。
0831デフォルトの名無しさんNGNG
>>829
構造化ならgasでかなりいけるんじゃない?
0832MOV AX,0400HNGNG
debugウマー
0833832NGNG
・・・・・・・

wコマンドでファイル保存のやり方はどうすればよいのですか?
0834デフォルトの名無しさんNGNG
>>829
「アセンブラMACROプログラミング技法」ってのだね。
A-MACROSが正式名称かと。
0835デフォルトの名無しさんNGNG
>>833
-n ファイル名.com
-r bx
:0000
-r cx
:プログラムの終了アドレス -100h
-w

忘れていたので昔の本サンショした
0836832NGNG
ありがとうございまーす!!
0837デフォルトの名無しさんNGNG
>>833
より分かりやすい例

C:\>debug
-a 100
1709:0100 jmp ffff:0000
1709:0105
-r cx
CX 0000
:5
-n hoge.com
-w
00005 バイト書き込み中.
-q

で、上記で作成したhogecomは、意味わからん厨は実行しないように。
責任はとらんぞ。
0838デフォルトの名無しさんNGNG
アセンブラ入門したいんですけど、
どういうステップで勉強すればいいでしょうか?
0839デフォルトの名無しさんNGNG
>>838
一般論だが、

1.文法について覚える
2.命令を覚える
3.プログラムを読む/書く

ってな感じで。
0840デフォルトの名無しさんNGNG
x86系の、インテル486までの命令セット表を探してるんですが…。
ありませんか…?
0841kcrtNGNG
>>840
インテルのページに親切なPDFがあるよ。
0842デフォルトの名無しさんNGNG
>841
ありがとうございます。

早速行っていますが…。
…迷子になりもうした…。
もう、…ダメかもしれません。
0843デフォルトの名無しさんNGNG
>>842
頑張れ! o(^-^)o
0844デフォルトの名無しさんNGNG
>>840
ttp://www.intel.co.jp/jp/developer/design/processor/index.htm

Pentiumからでよければ上記

書籍では、「はじめて読む486」とか
(まぁ、いくとこいけばそれいがいもたくさんあるが)
0845838NGNG
具体的な方法を教えていただけるとうれしいのですが。
0846顔も名前も出さずに毎月100万円NGNG
    
Future-Web(フューチャーウェブ)登場
なんと10,000円単位の収入    

●10,000円単位の高収入
 1件につき最大10、000円の高額収入。月収100万円以上も可能。
●画期的なビジネス!
 インターネットを利用したこれまでにない斬新で画期的なビジネスです。
●誰でも出来ます!
 インターネットが出来る環境の方なら誰でも参加可能です。
●専門的な知識は一切不要!
 ビジネスに必要なツールはすべて当社で用意いたします。また、サポ
 ートも万全です。
●詳細は今すぐHPをご覧ください。
  http://www.future-web.tv/7823/
0847デフォルトの名無しさんNGNG
通報しますた。
0848デフォルトの名無しさんNGNG
>>845
839の一般論とやらは無視しましょう

1. CPUの仕組みと動作原理を理解する
2. CPUと周辺機の関係を理解する
3. メモリのことについて理解する

まずは、上記のようなことから始めるのが近道と思われ
漏れは、10年以上前に「はじめて読む8086」っちゅう本で
勉強したよ。今でも本屋でみかけるぞ
0849838NGNG
ありがとうございます。

>1. CPUの仕組みと動作原理を理解する
パイプラインの話でしょうか?
少しはわかってます。

>2. CPUと周辺機の関係を理解する
これはよくわからないのですがOSですか?
良い本があればお願いします。

>3. メモリのことについて理解する
これも良い本があれば教えてください。
OSのページング等の事なら、OSの本を読めばいいのでしょうか?


>「はじめて読む8086」
読んでみようと思います。
0850デフォルトの名無しさんNGNG
>>849
教えてクン、推薦図書スレをチェックしろ。
0851デフォルトの名無しさんNGNG
技術評論社から、「8086 マクロアセンブラ入門」という本が
3月25日に発売されるようだ。

詳しくは、新刊案内を。
0852838NGNG
>>850
チェック済みですが何か?
0853デフォルトの名無しさんNGNG
>>852
だったら読むべき本は分かるはず。
0854デフォルトの名無しさんNGNG
なんでVC++の英語版にはマクロasmがついているんでしょう
MSは日本人には(英語の知らないのには)asmはするなということでしょうか?
MSDNの英語版のVS6_SP5のなかにasm入ってます
0855デフォルトの名無しさんNGNG
「はじめての486」これだね。
これで分からなかったらプログラムなんて止めちまえ。
0856デフォルトの名無しさんNGNG
8086 マクロアセンブラ入門
http://www2.gihyo.co.jp/books/bookinfo.asp?ID=4-7741-1442-1
0857デフォルトの名無しさんNGNG
masmってマクロasmのことでよいのでしょうか?
masmはマイクロソフトasmですか
どちらでしょうか
素人質問で申し訳ございません
0858デフォルトの名無しさんNGNG
848ではありませんが

>>849
> パイプラインの話でしょうか?
> 少しはわかってます。
まったく役にたちません。必用なのはCPUの論理的な構造を
知ることです。

> >2. CPUと周辺機の関係を理解する
> これはよくわからないのですがOSですか?
これはむしろプログラミングの対照についての知識に近いの
でアセンブラのプログラマでも知らなくてすむ人はいくらで
もいます。組み込みなどでは知らなくてはなにもできないで
しょう。

> >3. メモリのことについて理解する
> これも良い本があれば教えてください。
これはもとの意味が分かりません。メモリはアドレスを指定
してデータを読み書きするということだけ知っていれば充分
です。

しいて言えば >>839 の一般論が正解でしょう。

却ってとまどうかもしれませんがなぜアセンブラをやりたい
かわからないと839以上の答は難しいでしょう。

単に知りたいだけならx86でやるのは最悪の撰択です。できれ
ばきれいなアーキテクチャを選んだほうが良いと思います。
一応 68000,汎用機、CASLの旧型などが私のお勧めです。
0859838NGNG
>まったく役にたちません。必用なのはCPUの論理的な構造を
>知ることです。
ハザードが起こらないようにするために考える必要があると思うのですが。
高速化するためには、どういうユニットがあるのか
それがどれくらいのサイクルを必要とするかがわかってないと
ダメだと思うのですが、見当違いでしょうか?

アセンブラを使えるようになりたい理由は、
プログラムを高速化したいからです。
0860デフォルトの名無しさんNGNG
命令ごとの必要なクロックサイクルってCISCなら固定なんだっけ?
0861デフォルトの名無しさんNGNG
>技術評論者
どうでもいいけどlinux嬢でのアセの本書いた方が売れるんじゃないか?
Windowsで汗かいてる人はもう既にかなり出来る人がおおい。それに
新規で興味持ってるひともそんなに多くないような気がする。
他にドキュメントや本も沢山あるしね。

商売が下手なのか、単に書ける人間がいないのかどっちか知らないけど、
企画として失敗な気がするよ。
0862デフォルトの名無しさんNGNG
>>859
普通にプログラミング出来ればアセンブラなんてサクッと理解できると
思うけど。

まずアルゴリズム見直そう。アセンブラは本当の最終手段だと思うな。

使わんでも下手な奴がアセンブラで書いたプログラムよりCとかで書い
たプログラムが速い事は良くある話だよw

ローテート使いたい時にインラインアセンブラ使うとかw
0863858NGNG
>>859
> ハザードが起こらないようにするために考える必要があると
>思うのですが。
> 高速化するためには、どういうユニットがあるのか
ハザードは勉強不足で知りません。これはCISCに個有なもの?
ただプログラミングするときにパイプラインがどういうふうに動作
しているからこういう命令の並びにしたほうが速いだろうと考える
る人はいないと思います。スピードを上げたいなら他の方法を考え
るでしょう。
0864デフォルトの名無しさんNGNG
>>838
ちみはどんなプログラムを高速化したいんですか?
0865デフォルトの名無しさんNGNG
メモリのアドレスでデータを操作できない言語には
戻れなくなった(覚えられなくなった)俺はこれから死滅しますか?

だってポインタ使い心地(・∀・)イイ!!んだもん
汗のレジスタハヤーイ!
0866デフォルトの名無しさんNGNG
このスレが勃ったとき2chを見てたが、
ここまでスレがのびーるとは思わなかった。
0867デフォルトの名無しさんNGNG
>>865
DAYONE-
アセンブラとCが一番居心地が良い。
0868デフォルトの名無しさんNGNG
>>838
ハザードを考慮しないといかん、ってことは組み込み系か?
少なくとも俺はアセンブラ使うときにハザードなんか意識したことはない。
0869デフォルトの名無しさんNGNG
最近のCPUは内部構造がムサクサ複雑なのでコードだけから動作速度を予想するのは
極めて困難デス
0870デフォルトの名無しさんNGNG
MASM32でNotepadもどき作ったけど、やっぱ速いよね。
サイズも小さいし。
0871デフォルトの名無しさんNGNG
>>870
実はWin32SDKを使って書くならCと大差ないという罠。

しかもCの1/10倍くらいのサイズ。
0872kcrtNGNG
C言語はローテートシフトをサポートしる!
0873デフォルトの名無しさんNGNG
Cの開発者が使ってたCPUにローテート命令は無い
0874kcrt=872NGNG
あ・・・そんな理由があったんだ。知らなかった。
0875デフォルトの名無しさんNGNG
debugのセグメントベースって変えられないんでしたっけ?
0876840NGNG
>>843,844
遅レスですみませが、ありがとうございました。
とりあえず目的の物は見つかりました。(まだ降ろしてないですが)

また、放浪中に、(486までの)各x86系CPUのオペコードのサイクルが載ってる資料?を見つけたので、
「んなもん普通に持ってんに決まってんだろ、このクソ野郎!」とか
「既出だ馬鹿。ミソ汁で面洗えよ」
と仰らない方は↓どうぞ。
ttp://www.penguin.cz/~literakl/intel/intel.doc
ttp://www.penguin.cz/~literakl/intel/intel.html
0877デフォルトの名無しさんNGNG
>>868
838の逝っているハザードはソフト的なやつで、868の逝っている
ハザードはハードの方の話ではないのかと思われ・・・・
0878ageNGNG
>>876
インストラクションセット・・
(゚∀゚)イイ!
0879デフォルトの名無しさんNGNG
>>862
> 普通にプログラミング出来ればアセンブラなんてサクッと理解できると
> 思うけど。
システムプログラミングがらみだと、そうでもないよ。マルチタスク、入出力、
仮想記憶がらみの命令は、アプリケーションプログラミングの知識があって
も理解できない。

それを知りたいなら >>848 が言ってることを抑える必要があるし、そうではなく
単にアセンブラで一般的なプログラムを書きたいって話なら >>839 だね。
0880デフォルトの名無しさんNGNG
asmが一番わかりやすいと思うな
CやJAVAより
単純だからこそ使いやすくてよろし

0881デフォルトの名無しさんNGNG
Windows上なら Delphiのインラインアセンブラが一番入門には手軽で気楽だと思うんだがなあ
C+asmだと出来る範囲はホントしれてるし
0882デフォルトの名無しさんNGNG
>>880-881
誤爆か?
http://pc.2ch.net/test/read.cgi/tech/1013958370/l50
0883デフォルトの名無しさんNGNG
>>882
誤爆ですな。
0884デフォルトの名無しさんNGNG
Windowsだと、アセンブラだけを使う機会は殆どない。
 少し前はデバイスドライバはアセンブラだったけど、これもヘッダを作るためで実装はCで書けるし

今、あえてアセンブラを使うとすれば、他の言語 C++やDelphiと組み合わせる場合
例えば、
 1、多倍長演算ライブラリを自作する( CFを使わないと非効率的な為)
 2、コンパイラでサポートされてないCPUの命令を使う為 MMXとか RDTSCとか回転とか
 3、コルーチンのようなスタック切替を使うテクニックの実装に
 4、自己解凍書庫のようにとにかく小さく作りたい場合
 5、複雑な整数演算(マンデルブロのような)をカリカリにチューニングしたい場合

ただ、複雑な処理といっても メモリアクセスサイクルとCPUサイクルが2桁も離れている現状では
大抵の処理はメモリサイクルに隠れてしまう事を考えると、処理時間のチューニングにアセンブラ
を使う発想はあまり有効でない。
0885838NGNG
ハザード関連は私が一番よくわかってないと思いますが、
とりあえず、x86というのはciscなんでしょうか?

それはいいとして、
x86がパイプランのハザードをどう処理しているのかよくわからないので
なんともいえないのですが、
ハードウエアとコンパイラ(アセンブラ)の両方で、ハザードを防止するような
アーキテクチャも存在させる事はできます。
また、ハードウエアだけで制御する事も、コンパイラだけで制御する事も
可能です。

高速化したいプログラムは数値計算です
0886デフォルトの名無しさんNGNG
>x86というのはciscなんでしょうか
インターフェイスだけはね
Pentiumのバージョンごとに内部の設計は変ってるから
それを考量して汗するのはひたすら大変だと思う。
0887デフォルトの名無しさんNGNG
つまり言いたいのはあれだ。
数値演算用のライブラリを買った方が早いということ
0888デフォルトの名無しさんNGNG
>>885 どんな数値計算? 
 たとえば統計処理だとメモリがボトルネックになって
 アセンブラで書く意味ないよ。
0889デフォルトの名無しさんNGNG
>>885
> x86がパイプランのハザードをどう処理しているのかよくわからないので
分かれよ。Intel のサイトに必要な情報は全部揃ってるから。
0890デフォルトの名無しさんNGNG
>>838
アセンブラを過大評価してるように感じる。
正直アセンブラを使うことを考えるよりもアルゴリズムを改良したほうが
遥かに高速化されると思うぞ。
その処理の中でアセンブラを使ったほうが明らかに早くなるような場合に、
アセンブラを使おうって話になるんだが。
0891デフォルトの名無しさんNGNG
CPUが処理できないからハザードになるんでないの??
0892デフォルトの名無しさんNGNG
>正直アセンブラを使うことを考えるよりもアルゴリズムを改良したほうが
それは十分わかってます

>その処理の中でアセンブラを使ったほうが明らかに早くなるような場合に、
どのように判断するのでしょうか?

>それを考量して汗するのはひたすら大変だと思う。
たしかにそうですよね・・・・
アセンブラが読めればいい、程度の気分になってきました。
0893デフォルトの名無しさんNGNG
ハザード と言ってるのは もしかして ストールの事ではないのか?


もちろんパイプラインハザードを防ぐ為にストールするという事もあるけど
0894デフォルトの名無しさんNGNG
>>その処理の中でアセンブラを使ったほうが明らかに早くなるような場合に、
>どのように判断するのでしょうか?

>>884 で書いてると思うが?
0895ageNGNG
運用・保守
0896デフォルトの名無しさんNGNG
機能追加・仕様変更
0897バイク板の鬱な藁人魚NGNG
すみません、PC/ATのBIOSがらみの質問なんですが、
INT 1Ehの飛び先アドレスをポインタにして参照する
ディスクドライバパラメータブロックの内容って
何処で調べればいいのでしょうか??
0898デフォルトの名無しさんNGNG
>>897
ここで聞いて調べなさい。
0899デフォルトの名無しさんNGNG
mov eax, DWORD PTR [eax]
みたいな、他のレジスタを経由しない演算は他と比べて遅いのでしょうか?
コンパイラの出力みるとEBXやECXを経由してるのを良く見かけるんで。
0900デフォルトの名無しさんNGNG
>>899
何と何を比較したいのかヨク分からん。両方のコードを示してみて。
0901デフォルトの名無しさんNGNG
>>899 その前に それはRAMテスト以外に何か意味でもあるの?
0902デフォルトの名無しさんNGNG
>>900
例えばLISPのペアオブジェクトのcadarを取るコード
struct pair {
 struct pair *cdr;
 struct pair *car;
};
のときのcadar(p)=car(cdr(car(p)))
の出力コードは
mov ecx, DWORD PTR [eax+4]
mov edx, DWORD PTR [ecx]
mov eax, DWORD PTR [edx+4]
になります。(VC6SP5)
これを全部eaxに直した場合とでは、速度差はでるのか?
って事です。

ちなみにEAXだけによるcdr参照は
mov eax, DWORD PTR [eax] ; t1 = cdr(t1)
car参照は
mov eax, DWORD PTR [eax+4] ;t1 = car(t1)
です。
cadarですと、
mov eax, DWORD PTR [eax+4] ;t1 = car(t1)
mov eax, DWORD PTR [eax] ; t1 = cdr(t1)
mov eax, DWORD PTR [eax+4] ;t1 = car(t1)
なので、これと前者を比較してどうか?ということです。
0903デフォルトの名無しさんNGNG
>>899
PentiumPro以降なら速度変わらないはず(レジスタリネームで別々の物理レジスタに割り当てられるから)。
古いCPUはわからない。
0904デフォルトの名無しさんNGNG
P6以降ならレジスタリネーミングで同じになっちゃうと思うよ。
P5とかだとAGIかなにかで2クロックは待たされるはず。
0905899=902NGNG
了解しました、やはりペナルティはあるんですか。
(物理的にEAX=OP(EAX)が見たまんまの効率で動くとは思えなかった)

なんでこんな質問をするのかというと、
LISPで動的にインストラクションコードの並びの生成/実行を
やってみようと思いまして、とりあえずなじみのリスト演算で
きめ打ちコードを自動生成するプログラム作ってるときに
VC6SP5の出力と比較して、あれ?と思ったので。
0906デフォルトの名無しさんNGNG
もはやP5以前のCPUのことは考えなくていいと思う。

ちょっと905の意図しているところが分からないけど、
P6以降だとインストラクションの並べ替えはCPUがやっちゃうから、
下手にいじるよりもストレートに吐いたほうがいいかもしれんぜよ。
0907デフォルトの名無しさんNGNG
いや前から どっちも同じサイクルだったと思ったけどな
0908デフォルトの名無しさんNGNG
>>905
mov ecx, DWORD PTR [eax+4]
mov edx, DWORD PTR [ecx]
mov eax, DWORD PTR [edx+4]
これでもP5ではAGIストールは起こるはず。
結局、途中のレジスタ名を変えても変えなくても同じだと思う。
0909905NGNG
じゃ、もうなにも考えずに後者みたいな自分の都合の良い方法で
吐かせることにします。
0910デフォルトの名無しさんNGNG
>>907
それは俺の自転車だYO!
0911905NGNG
>>908
それでは逆に、なんでコンパイラはあんな出力にしてるのか疑問に
思うんですが、他になにか要因があるんでしょうか。
0912905NGNG
あ、EAXのみの方がインストラクションコードとしては短くなるんで・・
0913デフォルトの名無しさんNGNG
>>911 別にどっちでも同じだから 何も考えずにやってるだけでは?
0914905NGNG
>>913
なるほど(w
もうこの件について考えるのは辞めたほうがよさそうですね。
ありがとうございました。
0915デフォルトの名無しさんNGNG
Intel C++ Compiler でコンパイルしてみたら、まさしくこの
mov eax, DWORD PTR [eax+4]
mov eax, DWORD PTR [eax]
mov eax, DWORD PTR [eax+4]
コードを吐きました。単にVC6のクセでしょう。
0916デフォルトの名無しさんNGNG
命令スケジュールをソフトでやったら多少効果あるかな?

つまり、そのMOVEの間に次の処理を埋めるとか
0917デフォルトの名無しさんNGNG
>>916
それやるとP5ではAGIストールをなくせるから、P5では効果あるんじゃない?
0918デフォルトの名無しさんNGNG
Cはライブラリ覚えるだけで人生終わる。
アセンブラは覚えること少ないから楽でいいよ。
0919デフォルトの名無しさんNGNG
>>918
アホか。
Cのライブラリの量なんてたかが知れてる。
良く使う関数なんてのは決まってるし。
0920デフォルトの名無しさんNGNG
>>919
汗の対象物に関してあんまり大した知識を持ってないで適当にやってるんでそ
0921デフォルトの名無しさんNGNG
AレジスタとBレジスタを
メモリや他のレジスタを
使わずに交換するのって
どうやったっけ。
XORとかNORとか使ってや
るんだとおもうんだけど。
0922デフォルトの名無しさんNGNG
xorのみで出来るよ。
0923デフォルトの名無しさんNGNG
XCHG A,B
0924デフォルトの名無しさんNGNG
>>923
それはデバイス依存じゃないか。
0925デフォルトの名無しさんNGNG
>>920
アセンブラ自体は簡単なんだが、それを実際に使うためには
対象物についての知識が他の言語よりも必要だよなぁ。
0926デフォルトの名無しさんNGNG
>>921
a ^= b;
b ^= a; /* b = a ^ b ^ b = a */
a ^= b; /* a = a ^ b ^ a = b */

こんなかんじかぴょん。たしかめてないけどぴょん…。
0927デフォルトの名無しさんNGNG
>>926
a = 1100
b = 0101

a ^= b => (a = 1001)
b ^= a => (b = 1100)
a ^= b => (a = 0101)

交換できてます。
0928926星人NGNG
よかったぴょん。アセは酢こんぶのように味わいぶかくて良いぴょん。
それなりにアセに熱いサイトったら、へるみさんとこですかぴょんね。
アセプログラマじゃないぴょんけど、頭の体操しながらよく見に行くぴょん。

http://homepage1.nifty.com/herumi/
0929デフォルトの名無しさんNGNG
>>927
xorで同じ値は交換出来ずにバグと格闘すると言う罠。
0930デフォルトの名無しさんNGNG
>>929
って違ったかな?何か駄目なパターンがあった気がしたんだが。

引き算なら浮動少数でも交換出来るということを残して逝って来ます。
0931デフォルトの名無しさんNGNG
NaN でも交換できます?
0932デフォルトの名無しさんNGNG
>>930 引き算てコレ?
a = b - a
b -= a
a += b
0933デフォルトの名無しさんNGNG
>>930
同じ値ではなく、同じモノを交換しようとすると値が0になって消えてまう、って奴かな。
0934デフォルトの名無しさんNGNG
ぴょん、つーのやめてくれる?
春なのに北風が吹くんですけど
0935デフォルトの名無しさんNGNG
ぴょん、つーのやめてほしーぴょん。
春なのに北風が吹くぴょん。
0936デフォルトの名無しさんNGNG
Linux + vi
で便利なtipってないの?
0937 NGNG
つうか、データ作成だけはアセンブラでやってます。
構造体やクラスでは扱えない不定形データをソースのまま
連続してメモリに配置・生成できるのはいまのところアセンブラしかない。
0938デフォルトの名無しさんNGNG
>>936
自分でさがせ
0939デフォルトの名無しさんNGNG
>>937
それ、どういうデータなのか、カナーリ興味ある。
教えてくれ。
0940デフォルトの名無しさんNGNG
>>939
インタプリタのコード。
0941デフォルトの名無しさんNGNG
>937
ネットワークバイトオーダまで考慮してくれるといいんだけどね
0942デフォルトの名無しさんNGNG
>>937
配列で領域確保するのと大差ないと思うが。
0943デフォルトの名無しさんNGNG
>>937
c なら reallocの連打でなんとかなるかも、とか思ってしまった。
0944デフォルトの名無しさんNGNG
ところで次スレどうする?


アセンブラのサンプルちょーだい
http://pc.2ch.net/test/read.cgi/tech/1016445795/

アセンブラのプログラムですけど
http://pc.2ch.net/test/read.cgi/tech/1011120676/

【Cを】GUN Assembler【極める】
http://pc.2ch.net/test/read.cgi/tech/1015895034/


これを再利用する? それとも専門スレをたてる?
0945デフォルトの名無しさんNGNG
>【Cを】GUN Assembler【極める】

これをリサイクルしようじゃないの。
0946 NGNG
配列確保したあと、どうやってデータ並べるの?
>>942
0947デフォルトの名無しさんNGNG
あとラベルだな。
データにラベルつけてGOTO命令入れたり出来ないじゃん。
0948デフォルトの名無しさんNGNG
>>945=そのスレの1
冗談はよしてくれ
0949仕様書無しさんNGNG
>>948
なんで?おなじような話題だから統一してもいいでしょ。
0950デフォルトの名無しさんNGNG
●●アセンブラって死滅しちゃうの?●●

死滅寸前のアセンブラを今まで必死こいて勉強してきた俺って一体・・・。

でどうよ?
0951仕様書無しさんNGNG
>>950
それは色々釣れそうなタイトルだな。(w
0952デフォルトの名無しさんNGNG
機械語萌え・・・・スレだから、
2本目作れば良いのでは?
0953デフォルトの名無しさんNGNG
>>945
特定の処理系である GNU as を前面に打ち出したスレでは、ちと趣旨が違うと
思われ。
0954デフォルトの名無しさんNGNG
【Cを】GUN Assembler【極める】
http://pc.2ch.net/test/read.cgi/tech/1015895034/l50
を使うのもなかなかだと思うけど、"Assembler"は「アセンブラ」と違って、
日本人には直感的に訴えにくいと思う。
ただ、>>950のようなスレタイトルだと、煽りや荒らしが心配。
0955デフォルトの名無しさんNGNG
ひっそり活動できるスレがほしいので、新スレきぼんぬ。
0956デフォルトの名無しさんNGNG
おれも新スレ希望
0957デフォルトの名無しさんNGNG
新スレにするとして、なんのCPUでOKにするん?
0958デフォルトの名無しさんNGNG
アセンブラ、というタイトル名を削ると検索できなくて
類似スレが立ちまくると思われ。
アセンブラ… (゚д゚)ウマー
に1票。
0959デフォルトの名無しさんNGNG
アセンブラ… (・∀・)イイ! #2
でイイような気もするが。
0960デフォルトの名無しさんNGNG
>配列確保したあと、どうやってデータ並べるの?
byte単位で書き込んでもいいし、どうやってもできるけど?
0961デフォルトの名無しさんNGNG
>>959
#n・・・よりは、n本の方が・・・・・
0962デフォルトの名無しさんNGNG
その □□□■
その □□■□
その □□■■
その □■□□

なんて厨っぽい?(w
0963デフォルトの名無しさんNGNG
アセンブラ… (・∀・)イイ! PC=2
はどお?
0964デフォルトの名無しさんNGNG
このスレを見る限りでは、アセンブラなのに、
組み込みの人が少ないような気がする。
時代の流れかな。
ちなみに漏れの会社は、未だに新規でZ80互換を使います。
0965デフォルトの名無しさんNGNG
アセンブリ言語なら>>10に聞け!

で決定。
0966デフォルトの名無しさんNGNG
お前らいいから早く
新スレ立ててくださいませんか。
0967958NGNG
うむ語尾はラにしたほうがいいな。
リとは締りが違う。
0968デフォルトの名無しさんNGNG
>>966
オマエガタテロYO
0969デフォルトの名無しさんNGNG
時間が無いぞ、こうしてレスしている間にも痔スレを立てねばいけなくなっている・・・
焦るな焦るな(((((;゚д゚)))))落ち着け落ち着け
0970デフォルトの名無しさんNGNG
次スレまだ勃たないのかな?
とか逝ってスレ消費してみるテスト。
0971デフォルトの名無しさんNGNG
しかたないので、自分のを勃てみるテスト
0972デフォルトの名無しさんNGNG
                 今この辺だぞ!瀬戸際!大変!
                ↓
                @
 ̄ ̄700 ̄ ̄800 ̄ ̄900 ̄|
                 |
_____________________________________|__________
      海
0973デフォルトの名無しさんNGNG
スレ滅亡の日まであと以下略
0974デフォルトの名無しさんNGNG
アセンブラ… (・∀・)イイ! LD A,0x02
Z80はまずいかな・・・
アセンブラ… (・∀・)イイ! LABEL 2
とかか。
0975デフォルトの名無しさんNGNG
どーせならオペコードで・・・(w

アセンブラ… (・∀・)イイ!B002
0976デフォルトの名無しさんNGNG
・・・・あーもう!
俺が決めるぞ!
>>988さん、よろしくぅ〜。
絶対立ててね!
0977デフォルトの名無しさんNGNG
冗談は良子さん。
0978デフォルトの名無しさんNGNG
つーかもう立てちまうぞ?
いいな、お前ら?
0979デフォルトの名無しさんNGNG
ご冗談でしょうファイマンさん。
0980デフォルトの名無しさんNGNG
インストラクションセット・・・(゚∀゚)イイ!
0981まるちNGNG
はわわわ〜〜〜〜〜
あと19ですぅ〜〜〜〜
0982デフォルトの名無しさんNGNG
うーんそうだね〜
いよいよ来た
0983デフォルトの名無しさんNGNG
>>979
きさま、その本を知ってるとは・・やるな
0984デフォルトの名無しさんNGNG
なんかもう我慢できなくなってきたYMO
0985デフォルトの名無しさんNGNG
ご冗談でしょうノイマンさん。
非ノイマン型コンピュータなんて
0986えへへNGNG
カウントダウンしましょか
つーかはよ誰か立てろや
0987986NGNG
(`Д´)モウスグモウスグ・・・・

⊂(`Д´⊂ )⊃≡ <1000ゲットの練習しる!
0988えへへNGNG
ちなみにおれは立てれん。
スレッド立てすぎです。。
と出てもーた
0989デフォルトの名無しさんNGNG
こいつはチキンランだ。
ブレーキを踏んだ奴(スレ立てた奴)はチキンだな。
0990デフォルトの名無しさんNGNG
⊂(`Д´⊂ )⊃≡ <990
0991991NGNG
⊂(`Д´⊂ )⊃≡ <991!!
0992えへへNGNG
>>990
ほなな、お前立てろや

アセンブラ… (・∀・)イイ! Part2
前スレ
http://pc.2ch.net/test/read.cgi/tech/1002267809/

でいいから。
0993デフォルトの名無しさんNGNG
のこる8まで
キタ━━━(゚∀゚)━━━!!!
0994デフォルトの名無しさんNGNG
みんな狙ってるのか・・・?
0995995NGNG
勃てました。
0996デフォルトの名無しさんNGNG
age
0997デフォルトの名無しさんNGNG
       v
     <(゚ω゚) <うっ!
      (  )\        
      /'>
0998デフォルトの名無しさんNGNG
       v
      (゚ω゚)> <はっ!
     /(  )        
       <'\
0999デフォルトの名無しさんNGNG
       v
     <(゚ω゚)> <うっ!
      (  )        
      /'>

1000デフォルトの名無しさんNGNG

       v
      (゚ω゚)/ <はっ!
     /(  )        
       <'\
10011001Over 1000Thread
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。