1 :
デフォルトの名無しさん :
04/08/26 20:24
3 :
デフォルトの名無しさん :04/08/26 20:33
終了
−−−−−−−−−− 再開 −−−−−−−−−−−
NASMの日本語マニュアルのサイトは無くなったのですか?
7 :
デフォルトの名無しさん :04/08/26 22:53
8 :
デフォルトの名無しさん :04/08/27 08:22
新スレきたー!
早杉棚
10 :
デフォルトの名無しさん :04/08/27 09:32
(°Д°)ハァ?
vc++のインラインアセンブラをgcc(AT&T形式)に変換したいのですが, 参考になるHPが本はありませんか? 教えてください.
出力ソースの先頭に .intel_syntax の行を入れて、 セグメント指定を変更 ラベルやデータの形式を変更 が楽っぽい。
>>12 gcc -S ***.cの出力ソースをいじれって事?
付け焼き刃の漏れではできない気がする.
すんません.
とりあえずアセンブラの形式を変換する
下のHPを見て書き直してるんですが,
インラインアセンブラではないので
うまくいく自信がないorz
http://www.codeproject.com/cpp/gccasm.asp 話は違うけど前スレ
>>912 に -masm=intelオプションを付けると,
書いてあったけど.linux(gcc3.23)のmanに載ってない.
cygwinだけしか使えないのか?
>>13 の続き
上の"インラインアセンブラではない"
という書き方はおかしかった.
HP内の記述を
%eax -> %%eax
に変換しないとcのソースファイルが
コンパイルできない,
と言うことが言いたかっただけです.
gcc 3.3.2なら-masm=intel出来たよ。 つーか、試してみなよ。 gcc 3.xなら、-mintel-syntaxかどっちかが使えるんじゃないかと思うけど。
>>15 option(-mintel-syntaxなど)は使えているようだけど,
適当なVC++のインラインアセンブラのコード
を持ってきてもエラーがでる.
たぶん自分でどう変えれば良いか分かってない.
>>12 >>15 さんすまん.
地道にAT&T形式に変えてみる.
17 :
デフォルトの名無しさん :04/08/27 21:35
スレタイの顔文字が怖い
18 :
デフォルトの名無しさん :04/08/27 21:41
(°Д°)ハァ?
( °д °) ポカァァン
ハァ?っていうより (°Д°)<ひでぶっ って顔だよな
>>20 そりゃお前の顔だろ。
んなことはどうでもいいんだが、前スレ使い切ってからこっちに移行しろよ。
22 :
デフォルトの名無しさん :04/08/27 23:13
(°Д°)ハァ? ↑ゾンビみたいで怖い
アセンブラのアンチスレだと聞いて来たのですが、 ここで (°Д°)ハァ? (°Д°)ハァ?してもいいでつか?
↑ COBOLER
COBOL世代ならアセンブラも普通に使えるだろ
いや、コボラがアセンブラなんか使えるわけないってことだろ。 コボラってCPUが直接COBOL命令を実行してると思ってるんだからさ。
アセンブラが難しいと思ってるやつって 若い奴だけだろ
(°Д°)ハァ?
(°Д°)ハァハァ? (;´Д`) ハァ
ん?
(*´д`*)ハァハァハァアハァ
アセンブラ… キタ━(゚∀゚)━!! で立て直して貰えませんか?
つーか次スレ立てんの早すぎ
37 :
デフォルトの名無しさん :04/08/29 10:17
つか、このスレ立てたのただの荒らしだろ
39 :
デフォルトの名無しさん :04/08/29 13:30
何を今更
一応まともなスレなんだから、このスレは削除依頼スレ。 ちゃんとしたタイトルで建て直ししる。
前スレ、単にアセンブラというスレタイの割にはx86のアセの話題しか出てないような。 Winでしかコード書いたこと無い奴ってこういう「平家にあらずんば人にあらず」 みたいな傲慢さというか井の中の蛙ぶりに気づいてない奴が多いよな。 ていうか、この板の平均年齢って案外低いのかな?
平均がいくらか知らんが、
>>41 は平均以上だろうな
40ぐらい?
わけのわからん煽り乙。
>>41 >x86のアセの話題しか出てないような
>Winでしかコード書いたこと無い奴って
いやお{犬,馬}様も同じだろう
同じUNIXでも、NetBSDユーザなら68kやMIPS,SPARCと
ユーザはいろいろなんだけど。彼等は殺伐としていて
会話をしないし。
45 :
デフォルトの名無しさん :04/08/29 14:04
>>45 たててちょ、オレの所のプロバイダからだと建てられんので。
>>47 前スレがまだ950にもいってないから、
もうちょっとしてから立ててみる。
このスレ系列なら970で適正だと思うが(ぶっちゃけ、990超えてからでも遅くは無い)
(°Д°)ハァ?
やっぱりPICマイコンだろうよ。 BASICとかCとかあるらしいが、メンドクサイので、アセンブラ。
Linuxで使えるアセンブラを書くのに適したエディタってある? viでもいいんだけどさ。
Vimおすすめ
54 :
デフォルトの名無しさん :04/08/30 10:03
(°Д°)ハァ?
55 :
デフォルトの名無しさん :04/08/30 10:58
>>45 このスレでいいじゃん
スレタイが気に食わないとか、そういうお子様な理由は通らないよ
変なタイトル付けると厨房が寄り集まってきて最悪なんじゃボケ 一回死んでこい
(°Д°)ハァ?
あと2日・・・
62 :
デフォルトの名無しさん :04/08/30 12:39
で夏休みが終わります。┐(゚〜゚ )┌ヤレヤレ
V800 カモーン!щ(゚ε゚щ)
V800って使ってみてどう?
PC-FXのCPUか?<V810
今はもうV850じゃないの? NECの石なんぞ久しく使っていないので、世間の流行はわからんが。
漏れ,最近ARMばっかりだよ。 アセンブラが難しいよ。
今日で夏も終わりです
6502ですが仲間にいれてもらえませんか?
>>69 いいよ。
全然関係ないけどX68000が欲しい。
>>70 X68000はBIOSも合法的に入手可能なのでemulator使うとか。
72 :
デフォルトの名無しさん :04/08/31 18:12
ちょっと、聞きたいのですが、アセンブラーで3000ステップあるソースをCOBOLに移行したら、 だいたい何ステップぐらいになるもんですかね?
荒らしてたのCOBOLERかよ
ワロタ
アセンブラで3000ステップってかなり短いな。
想像移植 DATA DIVISION除けば、三分の一〜十倍 DATA DIVISION入れると十倍〜三十倍 このくらいあればてきる? 中身はビット演算用のものすごいPERFOMの山かな?
この板の削除人って仕事したことあるのか?
OSを作ろうスレを消した事がある
>>78 それだけだろ。糞スレ荒らしは全て放置。
いい加減に仕事して欲しいよな
このスレは、由緒正しきアセンブラのスレですか?
ここは時機削除される
削除依頼誰か出したの?
まだ次スレが無いから_じゃないの? 真の次スレ立て→重複で削除コースかと。 タイトル不備ぐらいだと、削除依頼出しても、削除人によっては 古い方が優先されて新しい方が削除される可能性が有るので注意
85 :
デフォルトの名無しさん :04/09/03 01:33
PICアセンブラでいいやつある?無料で。
あるよあるよ、いいのあるよ char fork[] = "\x31\xc0\xb0\x02\xcd\x80"; //position independent code for `fork'
すっげ
88 :
デフォルトの名無しさん :04/09/04 03:32
マンドクセのでここが次スレage
('A`)ノ マンドクセ
90 :
デフォルトの名無しさん :04/09/04 14:05
a g e
91 :
デフォルトの名無しさん :04/09/04 15:18
.END
こっちが本スレか。。。
95 :
デフォルトの名無しさん :04/09/05 00:34
こっちは偽スレですよ・・・・ 1000取らせてもらえなかったし・・・
埋め立て乙。
97 :
デフォルトの名無しさん :04/09/05 00:35
1000まで上げさせていただきます。 アセンブラ?そんなもの知りません。
98 :
デフォルトの名無しさん :04/09/05 00:36
99 :
デフォルトの名無しさん :04/09/05 00:55
埋め埋め
アセンブラ・・・(*´-`*)ハニャーン
101 :
デフォルトの名無しさん :04/09/05 01:10
汗油 あせあぶら
汗ブラジャー
106 :
デフォルトの名無しさん :04/09/05 17:07
ん
じゃ
109 :
デフォルトの名無しさん :04/09/11 20:19:55
GNUアセンブラでPC/AT用ブートローダを作ろうとしてます。 そこで一点質問があるんですが、 アセンブル方法はふつうに as src.S -c -o src.o としても駄目でしょうか?
gasって16bitリアルモードのコードに対応してたっけ?
OS Kit 使ったほうがいいんでない?
112 :
109 :04/09/11 22:42:54
>>110 そうですか、、
どのアセンブラが適してるか教えていただけませんか?
gas.nasm,masm32があります。
いまas86をダウソしてみました。
>>111 自分でやってみたいんで自力でやってみますわ。
nasm>>>>>>masm>>>>>gas
>>115 明記されてはいないがアップデート用ファイルなので普通に考えればMS-linker 5.x系のライセンス所持
>>116 んが7.10だったらあるんだけどな。
最近VS.net買ったんだけどな。16bit linkerついてないやんけ。ぬるぽ
総合スレどこ!?
スレスト喰らって市んだ
実にふさわしいスレストだった
そもそもアセンブラは板違いだな。電気板がふさわしい。 x86みたいな厨房プロセッサはここでもいいけど。
CPUのマニュアルとか本屋でたまに見るけど、コンピュータじゃなくて そっち系の棚にあったりするんだよなー。
日頃、PLCでラダー組んでる電気屋さんはアセンブラなんて知りません。
テンプレ考えてあっちの板に立ててくる。 削除人を含めた糞厨房ばっかりのこの板はもうだめだな。
Pentium 4って INC EAX より ADD EAX, 1 の方が早いんだね。ごめん、ただそんだけ。
ついでにshlよりaddのが早い
その辺て、なんでCPU自身で速い方に切り分けしてくれないんだろうね 頭悪いよね
フラグまわりがINCとADDで違ったような どうもx86は忘却気味だ
>129 その通り。 incはCFが変化しない。
ANDのフラグ変化について具体的に教えてください。 CMPよりTESTのほうが使い勝手が良さそうなのですが、どの条件ジャンプを使ったら良いのか判らない…。
>131 ターゲットのCPUくらい書け。
ごめんなさい。 8086の場合です。
136 :
デフォルトの名無しさん :04/09/20 15:28:56
Pentium4でLinuxを使ってるんですが、インラインアセンブラで lock; xaddl って書いてある部分って、 加算&交換の最中にシグナルに割り込まれたり別スレッドに制御移ったりしないと考えてOKなんで しょうか? マセムブラ素人ですみませんが教えてください
全部実行されるか、全く実行されないかのどちらかであることを保証するだけ。
LinuxなんてつまんないOSも他にないよな
>>136 lockをつけずとも、
1つの命令の実行途中で、割り込まれたりして別スレッドに実行が移ることはない。
lockをつけると、CPUが外部バスをロックして、自分以外がバスを使えないようにする。
つまり、命令の実行中に、他の誰かがメモリを書き換えられないようにする。
主にマルチプロセッサでの同期に使うけど、バスマスタデバイスにも使うかも?
補足 他の誰か、というのは同じCPUで実行される他のスレッドではなくて、 SMPの他のCPUで実行されているスレッドや、バスマスタデバイスのことです。
141 :
136 :04/09/20 20:17:22
>>137 ,140
なるほどありがとうございます。
もう1つだけ…。いまapacheのソースを眺めてるんですが、httpd-2.0.51/srclib/apr/include/apr_atomic.hに
#define apr_atomic_t apr_uint32_t
#define apr_atomic_cas(mem,with,cmp) \
({ apr_atomic_t prev; \
asm volatile ("lock; cmpxchgl %1, %2" \
: "=a" (prev) \
: "r" (with), "m" (*(mem)), "0"(cmp) \
: "memory"); \
prev;})
#define apr_atomic_add(mem, val) \
({ register apr_atomic_t last; \
do { \
last = *(mem); \
} while (apr_atomic_cas((mem), last + (val), last) != last); \
})
(続く)
のようなコードがあるんですが、なぜ単にapr_atomic_addを lock;addl としないのか 教えていただけませんか? /usr/include/c++/3.3.x/i386-xxx-linux/bits/atomicity.h だとaddlしてるだけなので すが…。
144 :
デフォルトの名無しさん :04/09/21 09:51:51
TurboC++1.01を使ってるんですが インライナセンブラってどこまでレイジスタをいじっていいんでしょうか セグメントレジスタやインデックスレジスタは退避しておいたほうがいいんでしょうか
>>144 16bitの8086だよな?
ax,cx,dx以外は全部退避しとくこと。
もしかしたらcxもまずいかもしれない。
マニュアル・・・はさすがに無いか。
Cソースのアセンブラ出力って取得できたっけ?
もしくはディスアセンブラでコード吐かせてレジスタの使われ方を検証するしかない。
古本屋めぐりして運良くTurboC関係の本があったら取っとけ。
あと工学系の本が沢山ある図書館も行った方が良いな。
つーか今更TurboCで学習は身にならんと思うけどな?
当時のC++と今とじゃ言語仕様が全く違って使い物にならないし。
インラインアセンブラは原則レジスタ変更禁止だろ普通
>>145 無性にまたPC-98でプログラムを組みたくなったんです
TurboCの黄色いマニュアルがあったような気もするんですが行方不明で…
>>147 えーー、AXとかもだめなんですか…
高速化の為に使いたいのできついですね
レジスタの内容を退避しとけばおけ
やっぱり避けられないんですね。。。 場合によってはメインのアセンブラコードより退避の所要クロック数が上回ったりして…
>>145 ソース出力は -S
フリーなレジスタはaxとdxだったような。
軽く試したら32Bitだとさすがに駄目だが、16Bitだとそれなりには
面倒をみて退避してくれてるもよう。
ていうか、IDE入れてるならオンラインマニュアルに載って無いかな?
>>148 >>146 Merge From Current。
開発ブランチから、安定ブランチへのフィードバック
>>143 whileでループまわしといてatomicって凄い感覚だね。
>150 si,di,bpをいじらなければよし。
>>147 gccではそうでもない。
とはいっても esp ebp をむやみにいじるべきではないし、
破壊レジスタをむやみに増やすと最適化阻害の要因になる。
>>146 > MFCって?
MFC を知らないやつはバージョン管理したことない, DQN.
156 :
デフォルトの名無しさん :04/09/21 16:35:20
>>155 そこまで言い切れるほどメジャーな言葉じゃない
知らない香具師がそう思ってるだけw
noop
Microsoft Foundation Class
WindowsでVC++で開発してる人にとっては、
MFCは
>>160 の意味だし、VisualSourceSafeはMFCという呼び方をしない。
Microsoft Foundation Classes
162です。e-wordsとitmediaがclassで載せてますね。信じられん。MSは当然esつきですけど。
そういう用語集みたいのは適当な嘘多いよ。 以前にいろいろ目を通したことがあって、 電子とかハード寄りの堅い分野ではわりとまともな割合が多いけど、 ITだとかインターネットだとかパソコンだとかは嘘が目立つ。 編者の肩書きをみるとどことはいわないが教育機関の教官数人がかりで、 ああこういうところで悪貨の再生産をしているんだなあと思ったりした。
MFCは元はFreeBSDで使われるようになった言葉だよね。
今は他のプロジェクトでも普通に使われるのかな。
>>161 何て呼んでるの?
まあ
>>143 の文脈なら言葉は知らずとも意味はわかる
標準講座MFC6.0にはClassと載ってる。
>>165 「STABLE(か具体的なブランチ名)にマージ」
VCだと_asm{}ブロックでEAX,EBX,ECX,EDX,EDI,ESIは自由に使える
アセンブラってHSPの何十倍速いの?
HSPってトロイ入ってそうでこわい ソースからビルドできるなら試してみたいけど
172 :
デフォルトの名無しさん :04/09/23 06:21:30
80x86の引き算に付いて質問です。 よくC言語のコードをアセンブラに出力すると、 sub eax, ecx neg eax という感じでsubの後にnegというコードが現れるのを見かけるのですが、 このnegは、いったい何をやってるのでしょうか? subだけでもよさそうな気がしますが、 C言語の引き算はsubだけでは完結しないんでしょうか? negは補数の正負を逆点する、とかいう説明を読んだことがありますが、 いまいち意味がわかりませんでした。 どういう場合にnegがないと困るのか教えてください。
補数表現すら知らないでアセンブラか? 少なくとも大学生以上ではないな 今は学校の勉強でもしておきなさい
174 :
デフォルトの名無しさん :04/09/23 06:42:49
2の補数なら判りますが、 なぜ引き算を行う局面でそれが必要なのかがさっぱりわからないです。
>>172 多分左辺と右辺が逆になってるんじゃね?
b - a;
という式が、何かの要因で
mox ecx, b
mox eax, a
sub eax, ecx
neg eax
という具合に変換されたとか。
つまり
-(a - b)
という解釈だな。
>>173 つーかお前さ、
こんな質問に学校とか関係ない話ではぐらかして
ちゃんと答えないってことはぁ、
なんも説明できねーってことだろ。
じゃ、お前も同類だよ(w
まじめに勉強してこいよ。
176 :
デフォルトの名無しさん :04/09/23 07:35:52
172です。
>>175 >多分左辺と右辺が逆になってるんじゃね?
やっと意味がわかりました!
今デバッガでやっと確認できましたが、それが正解みたいです。
でも例外なくsubの後にnegが入ってるのが謎ですけど、
これは手抜き工事か何かなのかな…。
とにかくありがとうございました。
>>173 ( ゚д゚)、ペッ
>175 そんな偉そうに解説する程の事でも無い。 そもそもアセンブラ弄ってる人間なら 「さっぱりわからない」なんて言う訳ねぇだろ。 っつーか、そもそもお前の例えもおかしい。 学校で習いましたか?(藁 実際に使った事ねぇだろ? a = ( b - a ) * b; //eax = a, ebx = b sub eax, ebx ; a - b neg eax ; -( a - b ) = b - a mul ebx ; ( b - a ) * b
176は周りに敵をつくるタイプやな。
やけにガっ子にこだわるね
>( ゚д゚)、ペッ >( ゚д゚)、ペッ >( ゚д゚)、ペッ >( ゚д゚)、ペッ >( ゚д゚)、ペッ >( ゚д゚)、ペッ >( ゚д゚)、ペッ >( ゚д゚)、ペッ >( ゚д゚)、ペッ >( ゚д゚)、ペッ >( ゚д゚)、ペッ >( ゚д゚)、ペッ
なにその(ry
ヨンジュン
次スレのタイトルは アセンブラ… ( ゚д゚)、ペッ でおながいします
186 :
デフォルトの名無しさん :04/09/23 08:53:49
ソレダ!
次スレのタイトルは アセンブラ… ( ゚д゚)、ペッ ヨンジュン でおながいします
188 :
デフォルトの名無しさん :04/09/23 09:27:06
タイトルにハゲワラ、房が房に(ry
190 :
デフォルトの名無しさん :04/09/23 17:57:24
PC/ATの質問です。 BIOSのサービスを使ってBX * 64の数値を表示させて やりたいんですがどうすればよいでしょうか?
>>172 aレジスタのが速いってことか。そりゃないか
ペアリングとか。そりゃないか
直前に結果がEAXに固定された命令(乗除算とか)があったとか。
>>190 BX*64はシフト命令使え。
表示は INT10H でぐぐれ。
>>191 negはNP命令なんでペアリングはぶっちゃけありえないw
195 :
デフォルトの名無しさん :04/09/24 11:00:26
>>192 直後に eax に値が必要な命令を置くためってのもあるね。
手抜きコンパイラに一票。 たぶん1パスじゃねーの。
お邪魔します。。C言語で素数一覧を作るプログラムを作ってたのですが、 アセンブリを習いながら早くしてみようと思っています。。 結果をファイル出力したいのですが、C言語のfprintf関数を使おうと思っています。 3つの引数をpushして、call fprintfして、add esp,0Chしようとしたのですが、 MASMでundefined symbolというエラーが出ます。。 外部変数の宣言をすればいのかな、と思いつつもサイトが引っかかってくれません。 どうかお教え願います。。
んな馬鹿やらないでインラインアセンブラ使いなよ・・・
それでやってたんですがせっかくだしasmファイルを作ってみたかったのです・・・すいません>_<;
>>193 ありがとうございます。
激しく感謝です。
>197 はっきり言って、その辺に転がってる素数求めるCソースを コンパイルした方がはやい。 作業的にも、実行速度的にも。
>>197 分割アセンブルでぐぐると、適当なのが引っかかると思うが。
最適化が優れたアセンブラを教えてくださいm(_ _)mペコリ
アセンブラって、最適化すんの? パス増やしてジャンプ短くする程度とか?
ネムー.
最適化するアセンブラって MOV [BX],AX ADD AX,DX を ADD [BX},DX にしてくれるようなアセンブラかのう?
outsb nop nop nop outsb を outsb outsb にしてくれるようなのじゃないの?
そこにnopをおいとくのが重要だったりした場合は?
>208がなんで最適化になるのか理解できないのは漏れがヴァカだからですか?(´・ω・`)
それいったら
>>209 も糞になるが…
程度の差はあるが
考えてみれば最近のCPUは最適化しながら実行しているようなもんだな。
昔私が作った例だと、 mov ax,si mov si,ax を mov ax,si に、 mov si,ax mov si,ax を mov si,ax に換えるくらいはやったけど。
>215 そんなんアセンブラ使う意味ないから高級言語に乗り換えれ。 アセンブラは人が最適化するから意味がある。 機械任せでいいなら苦労する意味すら無い。
重要なnopというとwait以外にも遅延分岐とかアラインメントとか まあ最適化を部分的にON/OFFできるなら何をやってくれてもいいけど
遅延分岐・・・・懐かしいな。 PlayStation初代機にR3000カスタムが積まれているけど、これは遅延分岐を サポートしていたね。 結局スーパースカラになっていくと遅延分岐は速度向上の足かせになるので 取り払われてしまったが。
あー、そのアセンブラはCの出力をアセンブルするのが目的だったからね。 Cコンパイラの最適化が甘い部分を改善するためにニモニックのカットをしたわけよ。
224 :
デフォルトの名無しさん :04/09/25 14:00:53
>205の 「最適化が優れたアセンブラ」 ってのは、アセンブリ言語・ニモニックじゃぁなくて、erだから、コンパイラのことだろう。 >214 fishingか? >考えてみれば最近のCPUは最適化しながら実行しているようなもんだな。 なんだよこれ。 ハードが最適化するのかぁ?んなアホな。 パイプラインやキャッシュ引きを最適化と呼ぶならお門違いだと思うけど。
μOP変換などは考え様によってはアセンブリ的最適化の逆を行っているかもしれん
デバッガの話もここでいいんですか?
>>224 レジスタリネーミングとかOOO実行とかも最適化といえるかもしれない。
>>218 後でJUMP命令入れてパッチが当てられるように
NOPで3バイト分確保しておくとかよくやってたな。
初めてアセンブラの勉強する為のテーマとしてブートローダに挑戦してるんですが これって大風呂敷でしょうか?
墨染さくらにきいてくれ
大風呂敷っつーか、うまく動かないときに、どこがどう悪いのか、もっと分かりやすい題材のほうがよいと思われ。
>>197 です。。どうもありがとうございました。
asmファイルを作れて少し感動です(*´∀`)
>>233 「ああいうの」ってアセンブラ=コンパイラとか言ってる奴だよね?
237 :
デフォルトの名無しさん :04/09/26 13:44:15
アセンボラって 覚えたほうふあいいですか。
238 :
デフォルトの名無しさん :04/09/26 18:49:13
>238 ageて荒れそうなネタ振るなヴォケ。
一日考えたのですがやっぱり分からないので教えてください。 Cの関数に入ったところに push ebp mov ebp, esp sub esp, 8 and esp, -16 というコードがあるんですが、 and esp, -16 は一体何をしたいんでしょうか? and esp, 0xfffffff0 と、スタック位置を256byteアラインメントしているようなんですが・・・。 少々ポインタ操作を誤っても隣の関数のスタック領域を破壊しないようにとの配慮なのでしょうか?
>>240 の書き方では状況が分かりにくいかもしれませんのでソースも書いておきます。
Cソース:
int main(void) {
return 0;
}
gcc -S -masm=intel sample.cの出力:
.intel_syntax
.file "sample.c"
.def ___main; .scl 2; .type 32; .endef
.text
.globl _main
.def _main; .scl 2; .type 32; .endef
_main:
push ebp
mov ebp, esp
sub esp, 8
and esp, -16
mov eax, 0
mov DWORD PTR [ebp-4], eax
mov eax, DWORD PTR [ebp-4]
call __alloca
call ___main
mov eax, 0
leave
ret
です。よろしくお願いします。
あ、256byteではなく16byteですね、すいません。
>>241 ただ単にアライメントをとったほうが実行速度が
はやくなるからじゃないの。多分256byteでアライメント
してるのはPentium4のキャッシュラインのサイズを
意識してだと思うけど。
資料がないかIntelのサイトを軽く検索してみたけど
ちょうどいいのが見つからなかった。すまん。
>>240 DebugとReleaseでは変わる?
256byteじゃなくて16byteか。 Pentium4のキャッシュラインの話は間違ってるかも しれん。適当に答えたので無視してくれ。恥ずかしい。 逝ってくる。
多分、実行速度の問題でそうなっているのは 当たっていると思う。
しつこいがPentium4のキャッシュラインは128byte。 それ以前は32byteだった。間違って覚えないでくれ。
128bitアラインがSSEなどで有利なのは確かだが cygwinのプロローグコード生成のバグだった気がする 無駄な__allocaもあるし
レスありがとうございます。ご飯たべてました。 書き忘れましたが使ったgccのバージョンは3.2.3(mingw special)で、最適化は無しです。 3.3.3にアップデートしてみましたが吐かれるコードは__allocaも含めて同じでした。 速度的な問題なんですね、ありがとうございました。
ついでにVCTKで/Fa出力したところ、こうなりました。 ; Line 1 push ebp mov ebp, esp ; Line 2 xor eax, eax ; Line 3 pop ebp ret 0 とても読みやすいです。Cを道具にしてアセンブラを学ぶのには、コンパイラにVCTKを 使ったほうがいいのかもしれません。
/FAcs もオススメ
そんなこと調べて何の意味があるの?
知障は知らなくて良いことだよ
>>253 Cの関数がアセンブルされたらどのようなコードになるのかある程度
知っていないとデバッガでインストラクション実行していっても
わけわかんないので勉強してます。レジスタを監視しても一体
どんな用途でそのレジスタが使われてるのか理解するのも一苦労
ですし。
>>252 あ、これ便利ですね。勉強に使いやすそうです。ありがとうございます。
>>255 生成コードを丹念に見るのはいい心がけなのでがんがれ
>253 コンパイラがどういうコード吐くか知ってれば、 Cでの記述でもある程度高速化出来る。
258 :
デフォルトの名無しさん :04/09/27 01:20:04
ENTER 命令は使われないのか?
240の成長を生暖かい目で見守っておこう。
さてと アセンブリ言語囓ろうと思うんだけど まずこんなボンクラはどんな本に飛びつけばいいのか教えて下さい? ISBNコードのみで( ´,_ゝ`)
4274132072
4-7980-0853-2
>>258 ENTER はたしか Pentium のどれかで「普通にBPいじるより遅い」ってことで使われなくなった。
Pentium 4 だと遅くないらしく、Intel Compiler で Pen4 あたりに最適化すると使われたような気がする。
最近のノートとかに入ってるPentium MプロセッサってPen4の仲間ですか? 多くの場合速度はPenM < Pen4なんだけど、 PenMに対してPen4の最適化は有効なのかなって。
どっちかというとPenIIIの仲間です ついでに普通、速度はPenM > Pen4です
Intel CompilerのP4最適化でenterが生成されるというのは経験がないなぁ。 Intelの最適化マニュアルにも次のように書いてあるし。 > アセンブリ/ コンパイラ・コーディング規則39 ( 影響ML、一般性M)。一般的に、4 つを > 超えるマイクロオペレーション(μOP) を含み、デコードが1 サイクルで完了しない複雑 > な命令( 例えば、enter、leave、loop) の使用を避ける。代わりに、単純な命令のシー > ケンスを使用する。 > 複雑な命令を使用すると、アーキテクチャ上でレジスタの節約になるが、マイクロコー > ドROM に対するパラメータの設定のために4 マイクロオペレーション(μOP) のペナル > ティが発生する。
あ、ちなみにSSE2はちゃんと積んでるんでPen4向けの最適化も結構有効に効くはずです ただ、それほどターゲットCPUを絞り込んでチューニングというものに意味があるかは正直微妙
ああ、不等号の意図が伝わんなかったですね。 処理に掛かる時間が。 PenM < Pen4ということです >どっちかというとPenIIIの仲間です お答えありがとうございました。
>>266 漏れの勘違いだったようです。情けない。
アセンブラーでCD-DA再生する方法教えてちょんまげ いま簡単なOSみたいなの作ってるんだけど
独自OSですべての環境に対応するのは無理 アナログ接続のATAPIならCD再生用パケットを送信すればおけ
アセンブラとCの使い分けはできるようになるべきだ。 Cからアセンブラのモジュールを呼ぶこととか、その逆とか。 いっぺん、標準ライブラリ抜きで(main()も使わず)、スタブとライブラリを アセンブラで書いてみるのがいいな。 とは云ってみたものの格好のスタディケースがこのご時世、ないんだよなー ROM化コードをCで書いてみるというのはとても勉強になるとおもう。 もちろん、OSのようなものを書き起こしてみるのもね。 じじいのひとりごとすまん。
DEBUG.COMでシコシコやるような時代じゃないからなぁ
278 :
デフォルトの名無しさん :04/09/27 22:02:12
別のアセンブラのスレに行ったのですが人がいないようだったのでこっちで質問させてください LDA,(8000H) CP7FH JPZ,300H すみませんが各行ごとに処理内容を教えてください。
宿題は宿題スレへ、って気もするけど、 LD A,(8000H) ; Aレジスタにメモリの8000H番地の内容をロード CP 7FH ; Aレジスタの内容と 7FH を比較 JPZ 300H ; 等しかったら 300H へジャンプ
一瞬、なんだか意味わかんなかったよ >278 っつーかスペースくらい入れろや。
>>273 簡単なOS書いてみたいんだけど、参考になるリソースは何?
やっぱタネンバウムの本くらい読まなきゃだめなんだろうか。。
282 :
デフォルトの名無しさん :04/09/27 23:43:50
>>279 ありがとうございます。
宿題スレも探したんですが、言語が限定されてるものしか見つからなかったのでここに来ました。
>>280 スペース入れたはずなんですが・・・・
>>282 多分スペースでなくてタブ入れたから無視されたんだよ。
>>281 >やっぱタネンバウムの本くらい読まなきゃだめなんだろうか。。
スレ違いだが、とりあえず読んどけ。
286 :
七誌 :04/09/28 14:06:14
しません 明日マイコンの試験があるのですが、 CPという命令の意味がわかりません。 Aレジスタと何かを比較するということはわかったのですが、 比較したあとにどうなるのかがわかりません。 くだらない質問かもしれませんが、宜しくお願いします。
教えない
試験前日にフラグレジスタがわからない時点で無理だからあきらめろ
>>286 たいていの実装では
「減算を行うがフラグのみ変化でアキュムレータは変化しない」
…と、さらに
>>286 を混乱させるよーなことを言ってみる。
試験を受けて自分だけ合格しようとする卑怯なやつは放置
ぼくは、情報2種は大学1年で1発合格したのだが
宅地建物取引業主任者試験は、こたえあわせした同じ問題を直後に解いても
合格点ぎりぎりの60点しか取れなくて、本試験は落ちた口だが、
人には向き不向きがあるから、
>>286 には、コンピューター関係は不向きなんじゃないか?
ツーホーシマスタ と レジスタ は 似ている
/ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ | 汎用レジスタ! \  ̄∨ ̄ ̄ ̄ ̄ ̄ ̄ ∧_∧ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ∧_∧ ( ´Д` ) < インデックスレジスタ! ( ´Д` ) /⌒ ⌒ヽ \_______ /, / /_/| へ \ (ぃ9 | (ぃ9 ./ / \ \.∧_∧ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ / /、 / ./ ヽ ( ´Д` )< セグメントレジスタ! / ∧_二つ ( / ∪ , / \_______ / / \ .\\ (ぃ9 | / \ \ .\\ / / ,、 ((( ))) / ̄ ̄ ̄ ̄ ̄ ̄ ̄ / /~\ \ > ) ) ./ ∧_二∃ ( ´Д` ) < フラグレジスタ! / / > ) / // ./  ̄ ̄ ヽ (ぃ9 ) \_______ / ノ / / / / / ._/ /~ ̄ ̄/ / / ∧つ / / . / ./. / / / )⌒ _ ノ / ./ / \ (゚д゚)レジスタ! / ./ ( ヽ、 ( ヽ ヽ | / ( ヽ、 / /⌒> ) ゚( )− ( _) \__つ \__つ).し \__つ (_) \_つ / >
294 :
デフォルトの名無しさん :04/09/28 21:53:32
ちょっと質問。 Visual C++上でoffsetを使う場合、 void main() { int ver; __asm{ mov eax, offset ver } return; } これだと error C2415: オペランドの型が無効です。 というエラーがでる。 で、 int ver; void main() { __asm{ mov eax, offset ver } return; } これだと問題ないんだけど、一体どうしてでつか?
ENTERとLEAVEが使われない理由はなんででしょうか? push ebp mov ebp, esp mov esp, ebp pop ebp
エンタの神様が「使うな」と言ったため
main() { int ver; __asm{ lea eax,ver } return; } なら通る
>294 よくわからんが、offsetは#defineみたいな直値に直されるんでね? スタック上に動的に確保される場合は一意的なアドレスに確定しないからダメで、 グローバルに静的に確保される場合は通る、とか?
299 :
デフォルトの名無しさん :04/09/28 22:23:56
自分の言ったとおりに翻訳しない翻訳コンニャクがダメなように、 自分の書いたとおりに翻訳しないスコンパイラはダメだとおもう。 コンパイルした結果が遅ければ、自分で考える。 プログラモ技術が磨かれる。 やはりこうでなくtへはいけない。
>>294 mov eax.offset [ebp-4]
というコードは存在しないので記述できないから
lea eax,[ebp-4]
とかは存在する
久しぶりにIntelのサイトに行ってみたんですが、日本語のIA-32 デベロッパーズマニュアル上中下巻が見当たりません。 日本語ドキュメントの配布は終了しちゃったんでせうか?
>>302 それのPentium4の新機能に対応したやつありませんか?
あと、Pentium4で拡張された命令のインストラクションコード吐けるアセンブラってありますか?
>>302 ありがとうございました。
早速ダウソロードしますた。
EAXが0のとき、CFの値をEAXのビット0に入れたい場合、 ADC EAX, 0 と RCL EAX, 1 ってどっちが早いかな
adc eax,eax
なるほどそれがあったか。
>>309 AthlonXPとPen3だとどうですか。
つかIntelの3つのPDFにクロック数掲載されていないのは不便ですね
>>310 クロック数だけを説明することは困難。
ちなみに adc eax.eax がいちばん命令長が短いと思われ。
>>310 自分は大して詳しくもないアマチュアなので間違っているかもしれないが、
加減算よりシフトやローテートの方が速いCPUなんてのは聞いたことがない。
某有名コンパイラは128倍の計算で7bit左シフトではなく加算を7回するのだそうな。
あすろんえくすぴ ADC mreg8,reg8 10h 11-xxx-xxx DirectPath Latency:1 RCL mreg16/32,1 D1h 11-010-xxx DirectPath Latency:1
ミス。 ADC mreg16/32,reg16/32 11h 11-xxx-xxx DirectPath Latency:1
>>310 AthlonXPとPen3の場合、
実行クロック数から言うと、どれでも同じ。
命令長では adc eax,0 は3バイト、rcl eax,1 は2バイト、
adc eax,eaxは2バイト。命令長の短い命令を選択した方がベター。
また、Pen3の場合、シフト演算器は1つしかないので、rclよりadcの方がいい。
>>312 それはPen4(Prescottコアを除く)の事ですね。シフトより加算の方が圧倒的に速い。
ただ、キャリーが絡むと話は逆転し、
Pen4の場合、adcよりrclの方が速い。
またadc eax,eaxよりadc eax,0の方が速い。
pen4めちゃくちゃだな・・・
>>311 パイプラインとかキャッシュとかの関係ですか
>>312 アセンブラリスト出力の仕方を忘れていて出力に手間取りましたが
DWORD Multi128(DWORD dwBaseData){
return dwBaseData*128;
}
なんていうのは、VisualC6リリースモードで
; Line 1311
mov eax, DWORD PTR _dwBaseData$[esp-4]
shl eax, 7
; Line 1313
ret 0
となってますた。@あすろんえくすぴ
>>313-315 なるほど・・・。無理にサイズ増やす必要ないですね。
演算器の数とかまで考慮する必要があるとはなかなか奥が深い。。。
>>317 Visual C++のコンパイラは古いよ。
最新版のコンパイラに差し替えて、Pentium4用に最適化してみると、結果が違うかも。
Pentium 4 プロセッサでは、以前の世代のプロセッサより、shift 命令とrotate 命令の レイテンシが大きくなる。3 またはそれ以下の左シフトの場合は、add 命令のシーケンス の方がレイテンシが小さい。固定シフトと可変シフトのレイテンシは同じである。
初心者にもわかりやすいアセンブラの書籍、サイト、ツールはないでしょうか? ニーモニックなんかはわかったのですが、上手く例題等を実行出来ず、 何が悪いのかさえもさっぱりです。
このスレは初心者を生ぬるい目で応援しています
それは卑下する目ですか?
日本語を勉強汁 卑下とは自分を下げる、すなわち謙譲的な概念だよ 蔑む・蔑視とはちょいと違う
生ぬるい目 ( ´_ゝ`)´_ゝ`) フーン
( ´_ゝ`)´_ゝ`)´_ゝ`)´_ゝ`) フフフーン
あーあ クソレスで埋めんなよ つまんねえ奴
昔みたいにx86房が!といわれなくなったのでこのすれも温かくなったきがする x86っていくら最適化しても専門分野に使われるCPUとは別物なのが かなりものすごい勢いでかなしいぃ、せるコンピューティングとかはまた別かな?
このスレはCASL IIが乗っ取った!
サルでもわかるコンピュータ用語講座 「レイテンシ」 テストが最悪で 恥ずかしさのあまり死んでしまうこと。
>>330 はスルー ( ´,_ゝ`)プッ
っと。
石が専用か汎用かなんて事はあまり関係ないだろ 問題はソフト面 i386やZ80だって専用プログラムさえ組めば ミサイルを目的地まで自動操舵するくらい出来るんだし
いや最適化のはなしだろ?え、ちがった?
あ、釣られたか・・・・・orz
一番最適化しやすいのはゲーム専用機 「環境がそれしかねえ」ことだし
>>334 普通に調べたら分かると思うが
スカッドミサイルがi386、トマホークはZ80
ネタではなくマジの話
>>336 Z80でよく地形分析しながら飛べるもんだ
>>337 こんなトリビア知らなくても無理はないが……。
トマホーク就役は1983年。開発開始は70年代。
誘導方式は慣性航法(INS)と地形等高線対照(TERCOM)。
地形等高線対照ってのは自分の直下の高度をずっと測定して、記憶した地図と
つきあわせながら飛ぶんだよ。
ちなみにミサイル本体とはずれるが新しいタクティカルトマホーク火器制御シス
テムの開発プロセスはCMMのレベル5で実施され、30%の生産性向上、20%の開発コ
スト削減、15%の不具合修正コスト削減ができたそうだ。
そろそろSSE2の勉強でもしたいと思っているんだけど Intelのサイト以外で何かお勧めの本とか無いっすか?
たのしいすうがく
,、------- 、 ,、-'´ `ヽ、 ___/ _\ \ / // /  ̄`ヽ、 ヽ / レi // / /ハヽ \ヽ |`iー 、 // |ヾ r//i / / / ヽヽ ヾi V ヽヽ // /| `7 |_|_L _/ / / | | |l |//! ゙i ゙i // / |三|'´| | || | /| / -─!ト!、|| |/ | | | | || / l>-|、rァ〒ヾ|/ |.! __,リ⊥ リ|彡/! |! | | || | |⌒l` |‐':::::::| l、_j::::::iゝr‐vi|| |ト、', ',ヽ! | ト、∧ ー---' |::::::::ノ '/ / || || ヾ.、 \! | | | | |‐! , j  ̄` /- ' ', ト、 \ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ヽト、! ',ヽ! \ ー_- /^i | ヽ、 | \ `ー < お兄ちゃん、これは罠だよ \ヽミ ゙ヽ、 ,、-' ´ j/ ヾ-、ヾミー \__________ `` _|`` ー ' ´ ト--、_ r‐、| r‐v--、 __,、-‐'´ | / >ー-、 \\l‐、ヽ | rくヽ |--──/ // ̄ ヽ し! | ヽ | / ヽヽ |rv'l / ,、-'´/ ヽ-/ / ./ ヽヽ |`=/-‐'´,、-' ´ / / / / _ヽ.|_/__∠/ / く`ー─‐' ´/ ∧ | く =しヘ / i ノ } _/7
お前は誰だ?
>>341 ゲーデル,エッシャー,バッハ―あるいは不思議の環
もオススメ
グラグラマーって儲かりますか。 アセンブラでポログラムするのって需要がありますか。
345 :
デフォルトの名無しさん :04/10/03 11:42:51
>>315 >シフトより加算の方が圧倒的に速い。
どうゆう設計をすれば、そんなことがおこるのだろう
347 :
デフォルトの名無しさん :04/10/03 12:08:06
>>345 rcl A,数値
で 数値ぶん 内部でループするのでないかな。
1ビットシフトの命令だけにしとけばよかったのにね
俺は昔のMIPS R2000/3000時代の人だから、今時のCPUのことは言えないが、 昔から加算よりシフトのほうが重かった。 1クロックで加算をする回路は簡単に作れるけど、 1クロックでnビットシフトする回路は簡単には作れない。 ゆえに、1ビットシフトする回路をnクロック動かすのが現実的。 先輩が嘆いてた。 回路のことを気にしない純粋な情報系の学生さんが、 ファンアウト数を気にせずにロジックを組み合わせて、 それが何故いけないのか理解してくれないと・・・。
ファンアウト数ってなんでしょう?
サッカーでいうサポーターがサポート辞めることじゃない?
ファンアウト数ってのは出力にぶら下がれる入力の数の事を言うんじゃないか?
蛸足配線でファイヤーだな
今の情報系の教育ってのは全く回路はやらないの?
電子機械科
てか今はどこの大学でもアセンブラ教えないな 日本だけじゃないけど 熱心に教えてるのはマレーシアや台湾、インドくらいなもんじゃないか
>>349 >ファンアウト数を気にせずにロジックを組み合わせて、
ファンアウトか。
懐かしい・・・(遠い目)
32bit幅だったら、32個分のシフト結果を シフト数でmultiplexすればいいじゃーん
漏れの学校もアセンブラなんか教えない てかCしか教えない 自分で勝手に勉強するから別にいいんだけど
うちは回路もアセンブラもやったよ
回路って、AND・OR・EOR(XOR)ぐらいやっときゃいいの?また別の話?
基本は増幅回路。
デジタル回路じゃなくて?
>>363 ディジタル回路でも中身はアナログ回路なので、
アナログ回路のことを全く無視してはいけないよ、
というのがファンアウトの話。
アナログ⊂デジタル
最近のCPUはアナログだから演算結果に誤差が出るんですね へぇー
4mA
一番最近に出たx86系のアセンブラの書籍って何があるでしょうか? WinXP環境下で例題を実行しているものを探しているのですが
なんかエロゲーの改造主体の本が出てたな 一応アセンブラの本。
「アセンブラとC、Delphiができます」 『ウチじゃ必要ないんだよね。いまどき出来ても意味ないし』 上っ面だけ見て知った気になってる奴には必要ありませんねとしか
>>372 プログラマやゲーム解析者の間でクソミソに叩かれている本ですね。
筆者はネトランのライターで、本の半分はインテルのアーキテクチュアマニュアル丸写し、
他の部分も間違いだらけという凄い内容だそうで。
>>372 それを買おうかと思ったのですが
アマゾンでぼろくそに言われてるので踏みとどまりました。
やはり最近はアセンブラの本って出てないんでしょうか
書名キボンヌ
いまどきのアセンブラ
>>375 >アマゾンでぼろくそに言われてるので踏みとどまりました。
良かったですね。ゲーム解析スレでは、この本の購入者を「被害者」と呼んでますよ。
それと、アセンブラで何をしたいのかを詳しく書いた方が良いかと。
ワロタ まず作者が評価書いて、周りにけなされ始めたんで焦ってまた自演でフォロー入れたってのがバレバレな感じですな
スキャンコードを取りたいのですが うまいこといきません
>>378 ゲーム解析スレってどこの板に有るの?
心当たり探したけど見つからんorz
「はじめて読む8086」 MS-DOS上で学習を進めていく設定だけど、 XPのコマンドプロンプトにもDEBUGコマンドはあるから、それでよくない? アセンブラはMASMとかNASMとか色々あるし。
VisualCのデバッグモードでレジスタ一覧をウォッチしながらステップ実行するといい
DEBUGか・・・軟派な俺は使ったことないや。 8ビット時代はROMに入ってるマシン語モニタを使うしかなかったから使ったけど・・・ DOS時代はCode ViewとかTurbo Debugger使ってたよ。 良いデバッガを使うことが、習得のしやすさに繋がると思うよ。
>>385 この本は参考にせず独習しろという意味のサブタイトルなんだろうな
俺はてっきりマジカル☆オープンの方かと思っていたがそんな本が出ていたのか。 まあ橋本和明じゃな・・・。
>>387 >>385 を読んだやねうらおさんが、その内容のあまりの酷さにあきれて、
「解析魔法少女美咲ちゃん」の執筆を決意したとのこと。
>まあ橋本和明じゃな・・・。
問題のあるライターのようですね。他所でも文章のパクリを指摘されていたし。
最近、思ってるのはオンラインで本買うと、 とんでもない糞本を買っちゃったりしてショックを受けたりする。 書評が絶対評価でない証拠かな。 やっぱり、その本を実際に手に取って調べてから買うほうが外れを引かないかも。
専門書は安くないしねぇ。 糞本は火にくべてやれ!
著者に買取りを要求するとか。 昔北朝鮮を楽園だと著書で賛美した某教授は 古本屋で著書を回収するのにやっきになっていたらしい……。
どっちもどっちだけどあえて比べれば、美咲ちゃんの方が良かった。(謎
美咲ちゃんの方がそりゃマシだけど、こっちはデバッガの使い方書いてるだけって感じだったな
>>395 だな、あまりの酷さにあきれた割には呆れるなw
いやまぁなんつうか、あれはアセンブラ本と呼んではいけないだろう。 まともな本のような書名と壮丁にすんなよ、まったく。
購入者一同で訴訟起こしたら勝つんじゃないか?
とりあえず出版社に苦情だな
>>397 ゲームの解析本としても役に立たないし・・・
あのCPUってデコーダはしょってるから OUT B や OUT Im があるのに OUT A が無いんだよね。 変わりに、裏命令で、 OUT (A+Im) が有ったりする。(謎
>>401 それ、至る所で良書に分類されてるな。
自分も買って読んだけど、買ってよかったと思ってる。
>>401 意外に良書だね、まぁ正直なくてもいいけどw
407 :
デフォルトの名無しさん :04/10/06 15:21:07
いやもう比べるの明らかにおかしいでしょ、 何やってんだよまったくw 解析魔法少女美咲ちゃん これ書いた奴吊って来い
>>406 "いまどきのアセンブラプログラミング"のレビュー、
本の内容ならまだしも紙の質までも文句言われてる所にワロタ。
>410 だな。 >401の本は、他の数ある(難しく書かれているものも含め)CPU本の中でも、プログラムのOPコードの0/1を受け取って、制御信号ON/OFF(0/1)を作る命令デコーダを作成しているところに格段の違いがある。 しかも、命令デコーダを、状態遷移図からステートマシンに持っていく、ASICのようなプログラムで組むのではなく、 しっかりとワイヤードロジックの回路で組んでいる。 これは、今も昔もCPUでは変わらないはず。 この辺に、この本が、アニメチックでも、内容がCPU製作入門のバイブルに成り得る理由がる。 実際のCPUの場合には、EDAツールで、回路図作って、レイアウトにして、レジストーエッチング回数分のフォトマスク層ごとにLAYER分割して、GDSファイルとして出して、 次に、フォトマスク描画装置用のMEBES等のファイルに変換し、ポリゴンなどを微修正し、データを描画装置に投入して、マスクを作る。 そのマスクをネガポジにして、ウェハーに焼き込む(ステッパー)。ちなみにマスク製造もステッパーも超縮小プリントになる。 >(もちろん、表紙やイラストそのままで) は、別として・・・w。まァ、コレが無いと文章がつながらなくなると思うが・・・。
少なくとも、ガッコでやった、真理値表やブール代数演算が、CPUの中でも、更にその中でコントロールしているデコーダで日の目を見ることを知り、また実際に実践的な学習ができる。
>401の本「CPUの作り方」で、20年前の8080Aや命令セット互換のZ80は作れるようになるかもしれないが、 その後の16bitで採用され始めた、複数のアドレス指定方式、ページセグメント方式、パイプライン、キャッシュ引きを含めた予測機構、 現在のGHzオーダへの高速化のレイアウト(実配線)・半導体構造までには、開きが大きいだろうな。 この部分も2chで語れる位に技術的に土台ができないと、INTELには追いつけない。
>>410 確かに。
あと、思ったのは英語に翻訳して海外進出もいいと思う。
Japanimationも流行ってるしw、結構うけるのでは?
いい線行くと思うよ。
けど、Pentiumも特許でガチガチだからな・・・、ウカツに作れないな。
作っても自分だけで使えばいい
>>413 そういうものは、応用的な話では?
まずは、基本から。
インテルは日本の企業でCPUは日本人が作ったってしってるか
>>418 微妙に違うぞ。
インテルはCPUを、日本の企業の金で、その企業から出張してきた日本人が作った。
うーん、なんかちゃんと伝わらない気がする。 「嶋正利」で検索しる!
>>418 誤解の無いように、知識を身につけましょう。
ムーアの法則のムーアが設立者の一人ってことぐらいしか知らない
スレがすっごくいやらし光線
>417 確かに。 まぁ、日本でも大企業が、パイプラインや2命令同時実行(スーパースケーラ)を作っているから、まぁそれほど杞憂するほどでもないかな。 >416 多分、CPUの作り方から、8080互換とか作るなら、 ・コントロール信号を外部に引き出す為のコントロールレジスタ、もとい、これにビット立てる為のデコード→0/1制御信号回路。 ・割り込みコントロール機構、割り込みレジスタ、割り込み(マスク)フラグレジスタ、、次アドレス保持用のスタック機構がいるな。 まぁ、これは「CPUの作り方」のを製作できて、多少ベンキョすれば、8080のINT,HALT(HOLD?),NMI辺りで数が少ないし、 割り込み許可不許可は、割り込みレジスタのビット立ったのと、マスクレジスタの値をANDを取れば済むことだし、それにより、ベクタ指定のエンコードは、デコーダ同様にやればできる、それをプログラムカウンタに入れてやってアドレス飛ばせばいい。 スタックへのアドレス退避、戻しは、INT命令デコードと外部割込み(ピンアサート)のデコードが要る、上記のベクタ機構も含めて。
>425
それが、コントロールレジスタ(bitごとにR/W,・・・ワスレタ、が立つ)。
このコントロールレジスタが、アドレスレジスタ、データレジスタ同様、外部のピンに出ている。
コントロールレジスタにビットを立てる制御信号0/1も命令デコーダで作る必要がある。
あと、>424の追補で、x86はスタック操作にALUを使用するらしい。
http://www.watch.impress.co.jp/pc/docs/2002/0913/kaigai02.htm どういうやり方やってるのかは知らないが、スタックというのは容器であり、先入れ後出しになるから、
その各レジスタをレジスタごと順次シフトの計算に使っているようだ。
けど、ここに書かれてるDedicated Stack Managerのように、単独で、スタック操作のデコード回路作るのがやりやすいはず。
作るならPICマイコンのようなシンプルなものにするのがいいかと。 8レベルのハードウェアスタックを実装する配線がウザいかもしれないが。
つまらん話題でオナヌーしてるハード屋さんハァハァ
アレはIC10個で作れるってのがいいんだろ
>429 だな。入門としてはモッテコイだ。 >427 PICはシンプルだからな。 シンプルさの由縁は、条件ジャンプは、1ステップジャンプでプログラムカウンタを2回回せばいいからだと思うが。 通常は、条件ジャンプ命令の尻尾の飛ばし先アドレスをつかませて、それをプログラムカウンタに入れるのが多いけど。 8080でも、命令セットがぴったり合えば、コンパチブル(互換)はいくらでもできるよ。 内部の構造・アーキテクチャはヨリドリミドリだ。 ペリフェラル(外部)素子との信号やり取りも、セットアップ・ホールド時間が合えばいい。 きつければ、clock自体を落として、ペリフェラルもろともスピード落としてやればいい。
普通に作れば逆にペリフェラルがCPUに追いつかないんじゃないの?
>431 なぜ?汎用IC使って、CPU作ってもかい?
ところでこの板の住人は皆さん理系ですか?
高卒出津
>427 あと、PICは命令のアドレス方式(アドレス指定方式じゃない)が最大2アドレス指定で、 OPコード 第一オペランド,第二オペランド しかも、演算や操作の相手は、ALUのコバンザメのアキュームレータ(PICの場合Wレジスタ)と決まっているからな〜。 OPコード f,Wの場合は汎用レジスタとWレジスタを計算し結果はWレジスタに置いたまま。w移動するにはmovしてやらないといけない。 OPコード f,selfの場合は、汎用レジスタとWレジスタを計算し結果は汎用レジスタ。コレはステップ数が一番多い方か・・・。 汎用レジスタ同士は演算できない。従って、命令デコーダも単純化できる。 ステップ数が少ないのがPICの特徴だな。
ん、正しくは、アキュムレータか・・。 あと、 >2アドレス指定 も間違えた。 >2アドレス方式 だね。
ところで、x86はWindows走ってる時のプロテクトモードってアドレス指定方式は、 レジスタ間接アドレス指定でしたっけ? エト・・、ポインタ操作のアドレス参照にぴったりマッチしてるなぁと思って>レジスタ間接アドレス指定。
欽ちゃんの 仮想大賞---------------------------------- べれっべーべッ べれべーれッ べれっべーべッ 1番、アドレス指定-------ッ(カン高い声) ビロビロビーン
割り込みを掛けた場合、 プログラム、次の行のSTOPは、 エグゼキュート(実行)サイクルが終わって、次の行の命令フェッチサイクルに入ろうとする時に 内部CLOCKを止めればよいのかな?
訂正です 内部CLOCKを止めればよいのかな? ではなく 命令フェッチサイクルに移行しようとする内部制御信号に対し 内部CLOCKを止めればよいのかな? 内部同期の場合ですけど。 です。
442 :
デフォルトの名無しさん :04/10/06 22:23:00
もう電子板でもどこでもいいから巣に帰ってくれ 迷惑だ
同感 いい加減にしろ
は?別にスレ違いでもないし いい加減もクソもないだろ(w
じゃ、次の話題ができるまでってことにすれば? 自治厨の発言こそが一番無駄
今後CPUの内部状態の話は全部禁止な。 CPUはブラックボックスとして扱うこと。
ム板としてのアセンブラすれとして、↓から再開。次の方どうぞ。
とりあえず、上のほうにある頓珍漢なx86の知識を 生ぬるぽっくり見守りたいと思います
_ ∩ ( ゚∀゚)彡 おっぱい!おっぱい! ( ⊂彡
処で、CAP-Xってどこ行ったの? #昔COMP-Xエミュレータを作ったのは内緒。
454 :
いなむらきよし :04/10/07 23:27:43
まあアセンブラもできないやつはプログラマを名乗る資格はないって事だキケー!
今は亡きVMテクノロジー
.NETの中間コード手書きとか
MSIL
ハンドアセンブル出来る奴いるか??
68000ならハンドアセンブルって言うかマシンコードじか打ちやったけどね
「マシン語覚えていて」なら極端に割合下がるけどな
レジスタセレクタや命令デコーダのbit配置を頭に描くとマシン語が出てくる・・・
レジスタの値を0にしたい時ってなんでmov eax, 0ってやらずにxor eax, eaxって排他的論理和をとることが多いんですか? movだと何か問題があるとか?
・8bit時代からの遺産 ・命令のバイト数が少ない ・最近のCPUはxorによるレジスタクリアのための特別なサポートがある
どうしてICって全部NANDの組み合わせでできてるの? 普通にそれぞれのゲート使ったほうが部品数も少ないだろうに
>>465 > どうしてICって全部NANDの組み合わせでできてるの?
できてません。
>466 昔はNANDだけで構成されていた。 NANDだけでどんなロジックでもできる。 >465 NANDが一番Trの数が少なく組めるから。
>468 Vdd | ーーーーーーーー | | A→oPMOS.|→oPMOS | | | | | |ーーーー.)ーーーーー出力 | | | | | | |→NMOS | | | |ーーーーー | B→NMOS | GND で、MOS2個でできるんだよ。
>469 正確には、 「C-MOS2つでできる」 であったな・・・。
CMOSの数ならNORも同じだろう トランジスタ数の話はTTLの方では?
月刊トランジスタ技術
(°Д°)ハァ?
「クレイジークライコー」
476 :
デフォルトの名無しさん :04/10/12 10:14:42
x86の質問なんだけど、loop命令って今はあんまり使わないの?
>>476 んな、こたーない。
まず、疑問に思った理由を書け。
ケースバイケースだな。
ところでml.exeどこいった
480 :
デフォルトの名無しさん :04/10/12 17:51:41
なんでloopじゃなくてdec ecx/jnzなの?
(゜Д゜)アッチョンブリケ!
>>480 AMDのloopはVectorPath命令で遅いよ。
AMDの最適化マニュアルにも使うなって書いてあるし。
rep movsd をクアドレジスタ使ってどうかくの? 8バイト単位でコピーするからはやい?
>>469 NAND自体のトランジスタ数が少なくても
ANDやOR、NOT、NOR、XOR等表現するのにNANDが何個もいるから
結局トランジスタもその分何倍も必要になる、つまり無駄だろ?
AMDのLOOP命令が速いというのはK6の事みたいですね。 K7,K8は遅くなってしまったようです。
>>480 ありがとうう
でもアドミニじゃないからインスコできない_| ̄|(´Д`;)
>>490 別にインストせずとも、解凍ソフトでml.exeとml.errを取り出せばいい
492 :
デフォルトの名無しさん :04/10/14 15:57:27
493 :
LettersOfLiberty ◆rCz1Zr6hLw :04/10/14 16:36:14
Re:>492 コンパイラの付属ソフトに、Intel系プロセッサのアセンブリコードに変換してくれるプログラムは無いの?
494 :
LettersOfLiberty ◆rCz1Zr6hLw :04/10/14 16:37:20
Re:>492 ああ、ごめん。アセンブリコードにすること自体はもうできるのね。それより、NASMに限定しなきゃ駄目?
495 :
Dust :04/10/14 16:51:30
逆アセンブラの凄いツールしてったら教えてください。アセンブラツールも教えてください。リバースエンジニアリングを悪用するとかじゃないんでお願いします。
497 :
Dust :04/10/14 17:12:51
逆アセンブラツールてどれですか?サイト教えてください。
教えてもおまえみたいな香具師には使いこなせない
500 :
Dust :04/10/14 17:25:30
日本のツールじゃなく海外のツールだよ頭おかしいですか?逆アセンブラDownloadできるとこ教えろ!
501 :
Dust :04/10/14 17:26:33
無料のお願い
「Re:」の変な使い方を見てると殺意がわいてくる
505 :
Dust :04/10/14 17:31:22
テスト
506 :
Dust :04/10/14 17:36:09
68用ならdisがあるぞ。
>>506 おまえ、どんな環境でアクセスしてんだよ。
学校の串に弾かれてるんじゃねーか?
プププ
またヘンな教えてクンか・・・
510 :
Dust :04/10/14 18:06:12
505と506のdust偽者です。それで・・・例のツールは?
誰か禁断のツールgoogleをおしえてやれよ
512 :
名無し@google :04/10/14 18:14:27
gooって何
goo.co.jp問題とか最早懐かしいな
あれはco.jpを抑えなかったgooがわるい
発生当時はドメイン買収で金払うのが一般的じゃなかったから。 無論、有名なほうに引き渡すべし、なんて方針も無かった。 # そーいやnhk.jpって空いてんのか?ひきこもり協会で押さえてやるか
あ、抑えられてたわ。
519 :
492 :04/10/14 21:04:55
>LettersOfLiberty レスどうもです。 勉強のためにNASMで吐き出せる物を探していたんですが、 どうやらないようですね。
>>486 トランジスタ数はその通りなんだが
けっきょくNANDに統一したほうが作るのが簡単なんだな
マスクやパターンのレベルで
521 :
ほんたま :04/10/14 22:35:47
おみゃ〜らよ、スリムドカンアップしたぞ。リソースエディタデバッグしたぞ。 だがまだバグはある。それにまだダイアログひとつしかつくれん。 2つ以上つくろうとすると、どっかデータがおかしくなっちゃうのだ!自分じわかるか? だが、ダイアログひとつだけなら、ほぼ問題なくつくれるようにはなった。ほぼな… おみゃ〜らよ、物事は何事も一歩一歩着実にだぞ!あせりは禁物だぞ! 現時点でここまで出来れば上出来すぎるぞ。おみゃ〜らよ!おりは神かもしれんな…♪ 自分じわかる?
若いからワカリマセン!
>>521 アセンブラでタブブラウザは作れますか?
COMにアクセスできるなら何とかなると思うのですが。
APIとCだけでCOM扱える香具師なら CALLに置き換えていけば出来ると思う
自分でコンパイラ作った方が早い
80x86アーキのインストラクションセット一覧表みたいなものはないですかね? int16→0xDC 0x16 みたいな機械語と対になってる表みたいなのが欲しいのですが…
intelのpdfに全部書いてる
>>528 ありがとうございます。
intelのホームページで探してきます…ってintelの鯖おちとるがな!!
マスクこんなところにもいたー
ここム板じゃねえか……orz
Linuxでgccを使い、アセンブリの勉強をはじめた者です、、 自分で作ったとても短いプログラムを、 gcc -S で出力して、一行ずつ読もうとしてるのですが、 andl がどういう働きなのか分かりません。 Googleでも解説ページが見当たらず、、 とりあえず、gccが作成するアセンブリコードを読みたいのですが、 どのあたりを調べれば分かるのでしょうか、、、教えてください。
ごめんなさい。馬鹿な質問をしました。 なぜそこでAND命令が出るのか不思議で、 ANDではないだろうと考えてました・・・ 内容としても>240さんとまったく同一だと思います。
ANDでいいんじゃない? スタックって、大きな番地→小さな番地に向かって進むので、 ANDで下位ビットを0に丸めると、キリのいいところまでゴミを積むのと同じ効果があるんだよ。
ANDがAMDに見えてしゃーないのはなんでですか。
すいませんtasm32.exeはどこにあるんでしょう・・・ pro以上に付属するとあったのですが無料では無いでしょうか・・・
つーーーほーーーしますたーーーーーー
スーファミのアセンブラってどれが一番いいんだ? p://www.intsys.co.jp/tools/cgb/sdk/archive/cgb_sdk991026.exe もしかして↑これ?ダウソしたけど勇気無くてダブルクリックできない…
543 :
LettersOfLiberty ◆rCz1Zr6hLw :04/10/18 22:22:49
[>542]を見て改めて思ったこと… ゲーム機専用アセンブラなんてどうするのだ? もしかしてロムでも作ってくれるの? Re:>542 404だった。
あーあ、踏んじゃったよこの人。
545 :
LettersOfLiberty ◆rCz1Zr6hLw :04/10/19 12:45:20
Re:>544 何かあるのか?
とりあえず変なRe:をやめい
ICC8.1で、/QxN /QxBなとIntelのCPUに最適化するオプションで コンパイルしたコードをAMDのCPUでどうさせたいのですが、方法は無いでしょうか?
>>547 C++ソースにこれを追加する。
extern "C" void __intel_proc_init_N() {}
extern "C" void __intel_proc_init_B() {}
ありがとうございます。 しかし、リンカで libirc.lib(proc_init.obj) : error LNK2005: ___intel_proc_init_N はすでに test.obj で定義されています libirc.lib(proc_init.obj) : error LNK2005: ___intel_proc_init_B はすでに test.obj で定義されています と出てきて、はねられてしまいます。
>>549 /QxN や /QxB つけてもはねられる?
どうしてもはねられるなら、/link /FORCE を付けてみて。
>>550 うまく行きました。ありがとうございます。
いえ、どういたしまして。
ここの皆さんは普段どのプロセッサ向けのアセンブラ作ってるんでしょうか?
Z80に決まってるだろ なめんなハゲ 「Z80?なにそれ?Z32なら知ってるけど」 とか言う奴を原子炉の中に叩っ込んで そのついでにチェレンコフ光を見てやりたいくらいである
私もz80でやってます
アセンブラ作ってる人がそんなにいるとは思えないが。 それともZ80で動く別のCPU用アセンブラを作ってるんだろうか。
x86。 フルアセンブラではないけど
Z8用のクロスアセンブラだったら作ったけどね。 あぁ、Z80/8085/8080用のアセンブラも作ったわさ。 N88Basicでw
559 :
デフォルトの名無しさん :04/10/20 00:35:18
おいらはプレイステーション(1の方)上で動作する Z80のディスアセンブラとデバッガを作ったことがあるじょ。 デバッガの関数名はもちろん「DDT」にした。
↑特殊な趣味の変態ですか?
>>559 それって、懐かしのゲームをエミュレータ方式で忠実に移植しちゃいましょう、って奴ですか?
GBとMSXのどっちだろ
563 :
ほんたま :04/10/20 04:06:11
おみゃ〜らよ、スリムドカン1.1.9アップしたから見ちみれ? おみゃ〜らよ、リソースエディタ2つ以上つくれるようになったぞ。不完全ではあるがな… おみゃ〜らよ、サンプルのDaialog.asmをビルドすると、2つあるダイアログのうちのひとつが開き問題ないように見える。 だがこりはリソース内部ではデータ がまだどっかおかしくなっているのだ。だからいろいろいじくるとボロが出てくる… おみゃ〜らよ、もう少しデバッグしなけれなならんようだ… だがここまでくるとおりはもはや神だな♪ だがおみゃ〜らよ、おりは次のメニューの作成に移ってもいいかな?どうじ? メニューをつくりながら、ひまを見てはダイアログをあとちょっとデバッグするという路線でいこうと思うのよ。自分じどうか?
>>532 いまさらながらのお返事ですが(汗
ありがとうございます。
現在APIC(Advanced Programmable Interrupt Controller)の挙動を調べるために
いろいろ書籍等をあさっているのですが。やっぱりIntelオフィシャルの英語マニュアルしか
情報は無いんでしょうか…
APIC周りが詳しく書かれた日本語のWebや本等ありましたら、どなたか情報をください。
お願いします
うんちおいしい
>>564 8259 picで検索すりゃいくらでも出てくるだろ
>>548 の方法だとDAZモードがイネーブルにならないようなので、
こっちの方がいいかもね(ほとんど変わらないとは思うが)。
extern "C" int __intel_cpu_indicator;
extern "C" void __intel_cpu_indicator_init() {__intel_cpu_indicator = 0x200;}
しかし、スレ違いだな…。
リンカもどきを作ってるのですが、 関数の先頭アドレスは、やっぱり境界を4バイトや8バイト毎に揃えた方が 効率が良くなるのでしょうか? 今作ってるやつは何も気にせず隙間なしで詰めちゃってますけど。
あと、詰め物を入れるからには、関数呼び出し以外に、 ラベルのジャンプ先もあわせないとたぶんあまり効果がないですよね。 これはリンカの仕事じゃないですけど。
>>568 ターゲットCPUが判らないとなんとも言えませんが。
例えば86系でも8088は2バイト境界ですら無駄。
ttp://hp.vector.co.jp/authors/VA003988/asm.htm によると、
>命令のフェッチはキャッシュから16バイト単位で行われるため、
>ジャンプ先の最初の命令が16バイト境界をまたがないようにする。
(486の場合)
とあるので、関数とラベルは16バイトの境界合わせをするのが良い?
でも16バイトって結構長いですよね。
最長15バイトも穴埋めが必要ですが、全部nopで埋めて良いんでしょうか。
(nop自体もクロックって掛かりますよね?)
Pentium以降だとまた事情が変わってくるみたいですが、
Pentium3と4に限ると、何が最適でしょうか。
>>569 すいません、Pentium3以降で効率が上がれば良いです。
質問させてください。。VC++6.0(インラインアセンブラ)なんですが、 以下の部分をReleaseモード時のみ通らなくなります。。 どうしてなのかお知りの方、お教え下さい。。 mov eax , 適当な数 mov ebx , 10 mov edx , 0 div ebx add edx , 48 //'0' → mov byte ptr [edi], dl ←ここで止まります。 ちなみにeaxの数の下一桁をとって、文字列に変換しようとしています。 hensu = '0' + (num % 10); というイメージです。 よろしくおねがいします。。
575 :
デフォルトの名無しさん :04/10/21 23:41:47
nopさーん ウホ、ウホホホホウホ おやおや、ゴンタ君もおおはしゃぎですね
淫乱アセンブラ
ediがぬるぽな予感。
止まるってのは実行時に止まるのかコンパイル時に止まるのか コンパイル時に止まりそうにないが
レスありがとうございます。。止まるのはReleaseモード実行時のみです。 止まった時にデバッグを開くとediに20が入ってました・・・ でもデバッグモードで1行ずつ進めていくと値が入ってるんです。。 というか・・・今関数の先頭行で引数をprintfしたら、 2回目の呼び出しでediに入れる変数のポインタが20になってました・・・>_<; すいませんもういっかい見て出直してきます。。
ediに(ry だれか説明してや(ry
>>581 ediってのは拡張レジスタだから使うときは宣言しないとだめだよ
そうだったんですか・・・ありがとうございます>_<; ネットで見よう見まねでやってたものですから。。 まず本屋さんにでも行ってきますw
>>584 インラインアセンブラを云々する前に、C++がどういうアセンブラ出力をするかよく勉強しろ。
特に、最適化の有無(Debugビルド/Releaseビルド)での振る舞いの違いに注意。
>>587 環境がよくわからない。
プログラマブルタイマを使って割り込みでも掛けるのが常套手段だが。
>>589 ハードウェア構成が判らないとなんとも言えませんが。
大抵は外部にタイマを持っていると思うので、それを何らかの形で利用すればいいのですがね。
なんらかのタイマも時計(カレンダ)も持っていなければお手上げですね。
>>587 どうすればプログラムを終了できるんだ?
とりあえず10秒経ったら電源落とせ
すいません、ちょっと言い方が悪かったかもしれませんが、 10秒たつとSW1を押してもカウントされないようにするって意味です・・・
ふつうに10秒たったらnopのループにすればいいんじゃねーの?
クリスタルキングが歌ってますが I/Oは何故取り戻さないといけないのですか。
プログラマブルタイマをセットしてポーリングするのが最も簡単だね。 それがなければ、仕方ないからせっせと8085のクロック数を計算して ループをその分回すしかなかろう。 8085はパイプライン構造ではないから計算通りのクロック数で走る のではないかと思う。
時はまさに世紀末
「nopさーん」
you a shark!
I/Oポートの何番に何がマッピングされているか詳しく書いてほしい。
>I/Oは何故取り戻さないといけないのですか。 CPUには、MEM/IOなぞというコントロールピンがあって、H/L制御でデバイスを選び、 MEMとIOが同じアドレス(アドレスバス上の信号)であっても、別のデバイスを選択する、 すなはち、MEM空間とIO空間が別にある。 IO空間へのアクセスをアセンブラのIO制御命令で行う場合は除くとして、IOよりCPUへのアクセスは外部割込みとなる。 一つの外部割込みが延々と続く場合、他の優先順位が大きい多重割り込みが発生した場合、どんどんスタックに値が溜まってゆく、すなはちスタックオーバーフローの可能性が出てくる。 メモリのオーバフローの場合、x86系では、例外エラーのブルーバック画面に移行する。 尚、モトローラ・IBM68系ではメモリ空間内にIO空間がある。 すなはち、アドレスで、メモリとIOが連続している、すなはち、アドレスバスが太い、すなはちRISCの特徴。 この場合でも、IOからCPUへのアクセスは割り込みだ。
一般的にI/Oをポーリングするより割り込みを使った方が応答性が良い。
プログラムも簡単になる。
但し
>>601 も言っているように、連続して異なるレベルの割り込みがかかると
コントローラのような貧弱なメモリ空間では苦しくなる。今の場合は10秒間
経った事を検出しさえすればよいので、そういう問題は生じないだろう。
>>601 所々勘違いがあるようですね。もっと頑張りましょう。
>メモリのオーバフローの場合、x86系では、例外エラーのブルーバック画面に移行する。 はぁ?誰も糞OSの話なんてして無いだろ
IN命令を実行する時にウェイトが自動的に挿入されるようなハードウェア だったら面倒だな。もっともこれは昔の腐ったメモリにも言えるけど。 やっぱり割り込み使おうぜ。それが一番確実だ。
>605 >604の「所々勘違いがあるようですね。」の部分をずばりしてきたか・・・。 確かに、ブルーバック画面を出すのはCPUな訳は無い品。 例外エラーのルーチンに持ってく処理は、x86だが、処理コードはBIOSもしくはOSだな。 それぞれ、リアルモード、プロテクトモードで違ってくる。 もっと突っ込むと、そもそも例外も含め割り込みは、例えば、例外では、 例外でOSがINT×(番号忘れた)を出したり、CPU内部エラーでINT×をCPU内部で生ずると、 割込みフラグレジスタにフラグを立てる、その値と割込み許不のマスクレジスタのANDを採り、 IDTR(割込みディスクリプタテーブルレジスタ)の一部(上位か下位か忘れた)に入れる。 IDTRの値のアドレスを検索、すなはち、割込みベクタテーブルアドレスの内容を引きにいく、 ベクタテーブルの内容をアドレスとして、割込み・例外処理ルーチンに飛ぶ。 そのルーチンには、ブルーバック画面のコードが書かれている。 IDTRで値を入れてない部分の値は、リアルモード、プロテクトモードで違ってくる。 すると、引きに行く割込みベクタテーブルアドレスが違ってくる。 すなはち、リアルモードとOSによる例外のプロテクトモードでは、見る割り込みベクタテーブルも割込み処理ルーチンも違ってくるということだわな。 リアルモードでは、割込みベクタテーブルは0番地〜(BIOS上)にあり、割込みルーチンは、おそらくBIOS上(或いは640kバイト内にあるかもしれない)、 主にOSが行うプロテクトモードでの例外は、割込みベクタテーブルも割込みルーチンも1M以降のメモリ空間にある。 この意味では、違ってるな。 >603 「所々勘違い」と書いているからには、まだあるということか? どこだ?
勘違いだらけで突っ込む気も起きん
いきなり割り込んできてスレ乗っ取る気なんかね? とりあえず放置しようぜ
あぼんに登録しました
問題は、リアルモードで、割込みベクタの内容がBIOS上のアドレスを示しているか、メモリ上(OS上)を示しているか、 すなはち、割込みルーチンがBIOS上にあるか、OS上(おそらく640kのコンベンショナルメモリ内)にあるかだが、 確かめる方法はある。 違うOSを載せて、リアルモードで動作させることができた場合(仮想ではない。ここが難しい)、例外が生じた時、同じ画面が出るかどうかで判断できる。 同じ画面が出れば、リアルモードの割込みハンドラルーチンはBIOS上にあることになる。 >604のようなのを何と言うか教えてやろう、 ・人のアラを探す。 ・重箱の隅 と言う。>604のリンクは前レスもあわせて見てみれば、意味が分かるであろう。 >610 内容が「割込み」だけに、 >いきなり割り込んできてスレ乗っ取る気なんかね? ~~~~~~~←ココ か?小ザムイギャグだ。内容がナイヨぅだな・・・。 >604、>610 ザマア無いな・・・、wクァッ!クァッ!・・・
判った風な顔をして墓穴掘り捲くってる香具師が暴れてるスレはここですか?
ここじゃないです
__________ <○√ ‖ くく とりあえずε=( ̄。 ̄)yー~~は俺がここを支えているからどっかに入ってくれ
__________ <○√ ‖ くく ε=(*。*)y\~~  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
>ε=( ̄。 ̄)yー~~ もうすこしIDTRレジスタについて勉強しよう
言ってることが見当違い過ぎる それ以前にこいつは既知外だが
ε=( ̄。 ̄)yー~~ は、彼女どころか同性の友達すらいないんだろうな。 実社会では誰にも相手にされず、唯一2chだけが彼をかまってくれるんだろ。 みんな、もうちょっと温かい目で見てあげようぜ(プ
なんでそんなホイホイ釣られるんですか?
621 :
デフォルトの名無しさん :04/10/25 01:24:09
学校でアセンブラを習い始めたんでとりあえずmasm32をインスコしてみた。 でも使い方が分けわかんねぇ・・・・orz 自分の環境はP4でXP、なんかいいHPとかないすかね? とりあえずコマンドプロンプトのDEBUG機能使ってアセンブラの練習してまふ
623 :
デフォルトの名無しさん :04/10/25 23:06:39
>>622 初心者向けのmasm32解説書なんてあるんですか?
文法からコンパイルの仕方などが流れに沿って解説されてるようなやつ希望
コ ン パ イ ル の 仕 方
>>623 生まれてくるのが10〜15年遅かったようだな
とりあえず「まずむ」とか言うな!!!!!!!!
628 :
デフォルトの名無しさん :04/10/26 00:03:49
>>626 大学の講義で「計算機械」という科目があるんですが(もちろん必修)
計算機の動作原理を学ぶ内容のはずが担当教授の暴走によりアセンブラの
授業になってしまって困ってるんです><
>>627 「えむあすむ」でしょ?nasmは「えぬあすむ」lasmは「えるあすむ」で
いいのか?
アセンブラ分かれば下手に概念だけの授業よりよっぽど計算機のことが分かるような。
>629 癒えてるね。
講義の本来の内容にもよるけどな。 論理回路とかコンピュータアーキテクチャとかはアセンブラやってもわからんでしょ。
MASMって今は無料なの? いいなぁ。 俺裸の時は、MASMが含まれてた頃のMS-DOSからMASMだけ引っ張り出して使ってたよ。 別売りになった途端、すげー値段が高くなったような・・・。
MinGWにgasは、付いてないってことですか? どすで、as -v と打ったら何やらversionと出てきたのでてっきり‥
いきなり何なの
VC++6.0でHelloWorldプロジェクトをスケルトンのまま混合モードで表示させてみたんですが、 mainに入る前に add byte ptr [eax], al がずら〜と並んでるんですが、これは何の意味があるんでしょうか?
>>638 たぶん、プログラムのエントリに入った直後じゃないかな。
エントリと main() が異なることは分かってる?
わかってないです・・・すみません プログラムのエントリとmainって違ったんですか。 組み込み系のアセンブラをやっていたのですが、 アプリに関してはさっぱりです。 何かその辺のことについて書かれている書籍とかご存知でしたら教えて頂けませんか?
>>640 いや、別にむつかしい話じゃないよ。
VC6 のコンソールアプリの場合、
VC6 に付属のライブラリで実装されている次の関数がエントリとなるんだよ。
int __cdecl mainCRTStartup();
この関数の実装では、いくつかの前処理と後処理を行っていて、
その途中で開発者が定義した main() を呼び出している。
というまぁそれだけのこと。
もっと詳しいことを調べると mainCRTStartup() を独自に実装するような
裏技も使えたりするよ。
642 :
ほんたま :04/10/26 22:55:30
おみゃ〜ら〜、「スリムドカン」のダイアログエディタが完全になったぞ。吉報だ! おみゃ〜ら〜、「スリムドカン」のダイアログエディタはひとつのダイアログばかりでなく、複数のダイアログを自在に編集し、しかもそれをメインウィンドウから別々に開くことができるまでに進化したぞ!わかるか? つまりおりは神だってこと!! おみゃ〜らよ、一応自己テストではバグは出なかったが、使っているうちにバグが見つかるかもしれんから、そのときは報告してくれ♪ おみゃ〜らよ、「スリムドカン」もいよいよ完全なダイアログエディタを備えるまでになったってことだ!! おりは神だな♪ おみゃ〜らよ、次はいよいよメニューエディタの作成に取り掛かるぞ! 今年中にメニューエディタ、アイコンエディタまでは完成させときたいな♪どうよ?おみゃ〜ら〜? おりは神だな♪
>>638 セクションの先頭をページアラインするために、0でパディングしているだけです。
>>643 あ、そういう話か。
すんませんね、想像で別方面の説明しちゃったよ。
>>645 なんか言ってどうにかなるようなもんじゃないし。
今時、goto文なんて使ってんじゃねーよ ローカルスコープにしか飛べないなんて、使い物になんないぜ
そうでもないけどな。 でもC++でローカル変数のオブジェクト生成を飛びこえられないのは とっても使い勝手が悪い(gcc限定?)。
俺はそういう時インラインアセンブラ使ってる
すいませんでした、 MinGWでも gasi、できました 「プロ〜ングの力を生み出す本」の、GDBのコマンド・ファイル読み込みで > gdb -x comfile puu となってたのでまごついてしまった、 dosでは当然、拡張子(略
651 :
デフォルトの名無しさん :04/10/27 07:16:31
このC言語を8086アセンブリに変換したらどうなりますか? count=0 for(i=0;i<=1499;i++) { if(Array(i)<0) { Array(i) = -Array(i) count++ } } ;Arrayはsigned 32bitsの整数です。 ;どなたかお願いします。
652 :
デフォルトの名無しさん :04/10/27 07:24:22
653 :
デフォルトの名無しさん :04/10/27 08:06:07
>>651 signed 32bitsってなんだ??
signed long int...t...t
655 :
デフォルトの名無しさん :04/10/27 08:46:12
こんな感じかな? 8086emulatorでいいんだよね? # make_COM# ORG 100h Start: MOV al, data MOV ah, al MOV bh, ah MOV ch, bh AND al, 1 SAR ah, 1 AND ah, 1 OR al, ah ; A+B SAR bh, 2 AND bh, 1 mov al, bh ;(A+B)+C SAR ch, 3 AND ch, 1 AND al, ch ;(A+B+C)*D MOV bl, al AND bl, 1 RET DATAdb 00000111b
656 :
651 :04/10/27 09:15:15
>>655 ありがとうございます。でも、ちょっと僕が言っていたのと違いますね。ごめんなさい。
どなたかわからないでしょうか?
657 :
デフォルトの名無しさん :04/10/27 09:19:32
658 :
651 :04/10/27 09:49:30
絶対にCじゃない
>>651 やるたいことを予想してみると、
配列でマイナスのものカウントと
マイナスの場合、正の値にしたいということ?
8086は、よくわからないけど
カウントは、最上位ビットが立っているものをカウントして
正の値にするのは、反転させて+1すればいいと思うよ。
マルチにマジレスすんなよ
663 :
651 :04/10/27 11:58:18
>>661 ありがとう。そう、Array(long integer (signed 32-bit))
がnegative numberだったらそれをpositive numberに変換するような
感じ。だから、ArrayのMSBが0だったら1に変換するようなcodeを
書きたいんだけど、ちょっと挑戦してみます。どうもありがとう!!
馬鹿じゃなきゃ、自分でCコンパイラに食わせて、出力を見るだろうよ・・・。 紙と鉛筆で机の上でウジウジしてる学生さんだね。 学校の宿題かなんかじゃないの?
665 :
651 :04/10/27 14:26:57
emulator8088 って日本でも使われてるんですか?
emulator8080 って日本でも使われてるんですか?
emulator8000 って日本でも使われてるんですか?
串
>>667 マジレスすると、けっこう年とった人は使ったことあると思う。
若い人は全然知らんと思う。
よくいうよ。
671 :
デフォルトの名無しさん :04/10/27 21:49:50
若い人はemulator4836のほうが馴染みがあるんじゃない?
自作自演乙
x86系は遅延スロットを意識してコードを書かなくてもいいの?
あの子を意識してしまいコードが書けません!
関数のアラインあわせで埋まってる0xCCってint 3でしょ? int 3て何ですか?(VC)
ありがとうございます
678 :
ほんたま :04/11/01 21:57:19
おみゃ〜らよ、おりはいまマシン語プログラミングソフト「スリムドカン」のサンプルを充実させようと取り組んでいるところだ。 だが、おみゃ〜らよ、「ファイルの開く」コモンダイアログがどうも出ないのよ。 おみゃ〜らよ、「ファイルの開く」コモンダイアログを出すアセンブリソースでいいのないか? できればnasmでいいのないか?マクロを使ってない、フルアセンブリコードのサンプルができればいいな♪ それ見てパクって「スリムドカン」のサンプルにするから‥♪ あと「猫でもわかる‥」みたいな解説のアセンブリ版みたいなサイトないか?
>>678 コンパイルを途中で止めて生成されたアセンブラソース読めばいいんじゃねーか?
WTLのヘッダファイル見れ
たまに生えてくるこのキチガイはコテなんですか?
空気だからきにすんな
キチガイというのはそもそも2ch自体もそうだろう。 ヤツだけというわけじゃないな。
また湧いた
男は黙ってNGName
686 :
デフォルトの名無しさん :04/11/03 19:11:29
くれ〜MASM街の〜 光とハゲの中ぁ〜 ということでMASMをくれ。
nasmの構文解説したサイトどっかない?
689 :
ほんたま :04/11/03 22:51:42
おみゃ〜ら〜、すげーぞ〜!!! おみゃ〜ら〜、「スリムドカン」の最新版をアップしたぞ〜♪ おみゃ〜ら〜、「スリムドカン」の最新版はすげーぞ〜♪ まずダイアログエディタにバグが見つかったので、それを直した。 次におみゃ〜らよ、サンプルプログラムをすこぶる充実させたから、見ちみれ? おみゃ〜ら〜、サンプルにはビットマップの描画サンプルと、「ファイルを開く」コモンダイアログを出すサンプルが仲間入りしたぞ〜。わかる? 特に「ファイルを開く」コモンダイアログを出すのは難しく、nasmとかのいいサンプルがないか探したんだが、結局見つからず自力で実装したという次第よ。 おみゃ〜ら〜、「スリムドカン」のサンプルもいよいよ「猫でもわかる…」のサンプルと同レベルのものが登場してきたよ。 つまり、「スリムドカン」はいよいよ中級のウインドウズソフトがつくれるソフトになってきたってこと!! おみゃ〜ら〜、サンプルにビットマップの描画サンプルと、「ファイルを開く」コモンダイアログを出すサンプルがあるってことは、もはや「スリムドカン」でつくれないウインドウズソフトはないといっても過言ではないのではなかろうか? どうじ?おりはもはやここまで来ると神だな♪自分じどうじ?
ろくな説明もできない人間がまともなもの作れるわけないな
>>689 じゃぁ、まずwebブラウザ作ってみろ。
IEコンポーネントもGeckoも使わないやつな。
KHTMLだな
ネタにマジレスすんなよ
何故ここの住人は放置すら出来ませんか?
国語能力≠プログラミング能力 天才は左脳に障害がある場合が多いから
凡才なのに左脳に障害があるのはどうしてですか?
必要条件と十分条件の区別もつかないのは脳に障害があるからですか?
Z80のアセンブラしか扱ったことなくて 昨今というか8086以降のCPU知らないんですが キャッシュとかパイプラインの制御もアセンブラで出来るものなのでしょうか?
キャッシュは若干できるがパイプラインは無理。
>>699 ありがとうございます
ということは命令の順序の並び替えぐらい考えれば
あとは普通にアセンブラ書けばいいんですね(違う?
パイプラインの制御も普通にあるだろ・・・
パイプラインに直接働きかける命令なんてあったっけ
>>698 の意図次第だな
Pentium以降、CPUIDでパイプラインが止まるとかそういうのはある。 でも制御とは言えないな。
意味もなく分岐してストールさせる。 予測あるからどこまで通用するかわからんが。
そりゃ制御じゃねーだろ。
いや、別な意味で間違いなく制御だ。 Pentium???の最適化マニュアルはそのためにある。
プリフェッチキューも「制御」できるし BTBも「制御」できるし、 レジスタリネームも「制御」できるんだね! カッチョエー
>698の言っているパイプラインは、 CPUの内部パイプラインではなく、外部パイプラインバスのことを言っているのではないのか。 パイプラインバスなら、確か286あたりからバスタイミングチャートに3つくらいモードがあって、 パイプラインバスとかメモリインタリーブとかできたようだった。 ただし、コントロールレジスタ(コントロールピン)を直接煽れることは無いと思った。
pc98の割り込みについてまとめられているページ無い? ググったらDOSのファンクションコールの事が殆ど。
711 :
ほんたま :04/11/08 23:03:00
おみゃ〜ら〜、サンプルアップしたぞ〜♪ホームページもアップしたぞ〜♪宇宙一すげぞ〜♪ おみゃ〜らよ、なぜ宇宙一すげーかわかるかな? おみゃ〜らよ、おりはな、「Visual C++」で自作したDLLをスリムドカンでつくったプログラムから呼び出すのに成功したんだよ!わかる? おみゃ〜らよ、DLLを呼び出すプログラムを「Visual C++」」でつくるには、Libファイルをリンクに設定したり、ヘッダファイルをインクルードしたりとやるべきことは多いだろ? おみゃ〜らよ、DLLを呼び出すプログラムを「HSP」でつくるにも、やはりDLLの他に「.as」ファイルが必要だよ。 だが、「スリムドカン」の場合、DLLの他には一切何も必要ないんだな〜う〜ん、これが…自分じわかる? つまり「スリムドカン」の場合、DLLさえあればDLLを呼び出すプログラムがビルドできるってわけ♪ おみゃ〜らよ、おりは宇宙一画期的だと思わないか? おみゃ〜らよ、宇宙一すげ〜とわめいたのはそういうことよ♪ おみゃ〜らよ、自分じどうじ?
このスレは祟られてたりするんですか?
何でもそうだが巷にある参考書、解説書は たとえ使わないものであれ全部解説したものって一つもないよな よく使うものだけを解説するのも結構だが 俺は完全版辞典が欲しいんだ
PC-9800ならアスキーから出てる奴に大抵のことは書いてあったと思うが。 絶版臭いが。
>>717 それか。
ハードの方はそこそこ詳しかったが、BIOSの方はあんまし役に立たなかったような記憶があるなあ。
そういえばinterrupt listに少し載ってなかったっけ?
アセンブラ勉強中 バイナリサーチをインラインアセンブラで書いたら VC++に最適化させたCコードの方が5倍くらい速かった… アセンブラやめようかな…
アセンブラ勉強中 良く分からないのでCの簡単なコードをコンパイルして アセンブリコード吐かせてCPUのマニュアルとにらめっこ。 そんなことをやっているうちに結構読めるようになった。
今時のコンパイラは最適化通り越してコンパイルタイムで定数にしちゃったりするからねぇ
>>720 読むのと書くのは大違いだから勘違いしないように
723 :
デフォルトの名無しさん :04/11/11 17:14:08
アセンブラそーすってどうやって吐かせるんだっけ? まえ某のコンパイラでやってたけどアセンブラつまらんって思ってたから 忘れちまった。このスレみてたらまたやりたくなってきた。
-S
725 :
デフォルトの名無しさん :04/11/11 17:30:32
bcc32 -S hello.c
コレダ!
>>724 ありがとう思い出せたよ。
>>722 読めればいいので問題無いです。
書くなんて言ってないのにそう
解釈するのは短絡な思考ですよ。
改める方が良いです。
昔はアセンブラばっかだったけど、最近はサッパリ使う機会が無いな。 AT&T式使ってたけど、死滅しちゃったかな?
AT&T形式はGASというクソアセンブラでしかみたことないですなあ
最近のCPUでコンパイラの最適化以上の速さのコードを自力で書けたりするかなぁ?
SSE 使っていいなら楽勝
ループで連続したバッファに対して 連続してFPU使うのは以外にコンパイラ以上に最適化できんのがおおいよ 日本語が良くわからんorz
732 :
デフォルトの名無しさん :04/11/12 23:31:10
sourceforgeにありました
FPU叩くやつなら大抵自分で書いた方が速いな
>>735 こんな感じです。
ただの数当てなんだけど。
なんというか分からない事だらけで困る。
int dat[256];
for (int i=0; i<256; i++) dat[i] = i;
for (int i=0; i<10000000; i++) {
int tmp = rand() % 256;
int answer = 0;
__asm {
mov ecx, 128;
mov eax, c;
mov ebx, tmp;
L1:
mov edx, eax;
add edx, ecx;
cmp dat[edx*4], ebx;
ja L2;
add eax, ecx;
L2:
shr ecx,1;
jne L1;
mov answer, eax;
}
}
>>736 俺も試してみたが、
cmp dat[edx*4], ebx;
この行は、datの値ではなくdatのアドレスをオフセットとして足してしまう。
やりたい事は
cmp [dat][edx*4], ebx;
なんだろうが、そういう命令はx86にはないので、
mov esi, dat
か何かとしておいて
cmp [edx*4+esi], ebx;
とやる必要がある。
で、VC7.1で最適化を掛けたらcdqとsubとsarの組み合わせを / 2 で吐いてくれたが
unsignedでstatic_castするか、shrで符号を無視すればアセンブラとCの吐いたコード
の速度は差がほとんどなくなった。
738 :
デフォルトの名無しさん :04/11/13 05:02:17
MASM32の使いかたが分からん・・・ コマンドプロンプトで「assmbl sample」と打ち込むと sample.obj sample.mapが作成されるんだがここからどうすりゃいいんだ? とりあえず「link16 sample」として実行すると sample:fatal error L1101: invalid object moduleとエラーが表示される ちなみに当方の環境はXPっす。 MASM32の使い方を流れにそって解説してあるようなHPキボンヌ
>>738 なんかわからんが、link16って何?16ビット用のリンカか?
linkだけじゃだめなん?
MASM32なんぞ使う奴は肥溜めに落ちて死ね
741 :
EXCULTer's / Active PC ◆/80RBXpvJA :04/11/13 05:34:13
>>737 スケールインデックスあったんじゃねーの?
マニュアル見てみ。
>>738 オプションが足りないのでは?
ヘルプ見てみ。
742 :
EXCULTer's / Active PC ◆/80RBXpvJA :04/11/13 05:37:41
>>740 ビミョーかも。アトアトのことを考えるとVC++のほうがよさそうだけど。
>>741 何言ってるのお前?スケールドインデックスは*1、*2、*4の事だろーが。
俺が言ってるのはdat[]のdatのアドレス値を使いたいのに実際はdatの
アドレス値が置かれているアドレスがインラインアセンブラで使われてるって
事だよ。いっぺん氏ね。
744 :
EXCULTer's / Active PC ◆/80RBXpvJA :04/11/13 06:07:52
>>744 逆ギレすんなよ。自分が間違いましたと素直に謝ればいいものを。
746 :
デフォルトの名無しさん :04/11/13 06:57:12
>>739 LNK.BATとLINK16.exeならあるけどLINK.BATが見当たらない。
>>743 int dat[256] が自動変数だと仮定すると
cmp dat[edx*4], ebx
は
cmp [ebp-定数][edx*4], ebx
と解釈されて
719がやろうとしていることはできると思うのだが。
mov esi, dat
cmp [esi][edx*4],ebx
なんてしたらAccess Violation間違いないぞ。
どっからアドレスのアドレスが出てくるんだ?
>>747 それがやってみたらだめなんだよ。もちろんdat[]は自動変数にして。
実際VC7.1で試してみた?
VC6.0、ICC8.1ともに大丈夫だが。 VC7.1のインラインアセンブラはmasm準拠じゃないの?
755 :
デフォルトの名無しさん :04/11/13 09:04:36
>>749 そりゃ、引数として渡されたdatでは、
cmp dat[edx*4], ebx
なんてできるわけ無いじゃん
>>749 そのソースのmov edi,datの部分はおかしくないかい?
これだとediには、dat番地じゃなくてのdat番地の内容が入っちゃうよ。
ごめん。↑は忘れて
>>756 の言うとおりで、mov edi,datをlea edi,datにすれば
cmp dat[edx*4],esiとcmp [ecx*4+edi],esiの結果は同じくなるわけだが
そもそも、元のソースが何やってるかわからない ・・・・・アホでスマン Cのソース出してくんね?それアセンブラにするから
ちなみにこのようなソースだと、インラインアセンブリの部分でレジスタに わざわざ毎回ローカル変数をロードしているので、CやC++で書いた場合 よりも時間的に若干不利。
>>762 コンパイラを教えれ。VC7.1とBCC5.6.4では間違いなく失敗する。
>>764 758の言っている意味分かる?
CPPソースの_asm{}の中身が間違っているんだよ。
>>766 func1とfunc2は等価というのが前提なの?
func1の場合は検索に失敗した時点で終了。
func2はとにかくITER回繰り返してから終了。もちろんその間何回も検索は失敗している。
と、思いますが。
768 :
755 :04/11/13 12:18:40
あのね、俺が言っているのはアドレスとポインタ変数は違うってことだ。
例えば、以下のようにしたとき
int dat1[256];
int *dat2=dat1;
dat1とdat2の違いって分かってる?
Cではdat1[i]とdat2[i]どちらもできるが、
アセンブラでは、dat1[edx*4]はできるが、dat2[edx*4]はできないのは当たり前だろ、って言ってるの。
>>736 ではdatはポインタ変数ではなくアドレスだろ。
>>762 ,
>>764 あんたらも、アドレスとポインタ変数の違いが分かってないんじゃないのか?
以下のソースが、どんなコードに変換されるか見てみれば分かると思うよ。
int main()
{
int dat1[256];
int *dat2=dat1;
__asm {
lea ecx,dat1
lea ecx,dat2
mov ecx,dat1
mov ecx,dat2
}
return 0;
}
ずいぶん前に32bitのWindowsXP上でAMD64のコードを走らせたという方が いたと思います(このスレじゃないかも) モード切替には一旦ページングを切らないといけませんが、その時に 仮想=物理アドレスとなるメモリ領域を確保する必要があると書いてあったのですが それはどのような方法で行ったのでしょうか? お願いします。
WindowsXPのアセンブラでソフトウェア割り込みを登録したりってできますか? 自分でページフォルトとか例外飛ばしたいんですが
761 のコードを見てるとバイナリサーチする必要すらないんじゃないかという 気がしてくる私は多分 PG 失格
774 :
EXCULTer's / Active PC ◆/80RBXpvJA :04/11/13 15:01:30
やっぱり、アセンブラやってるヤツってどっかおかしいんだよな(わら
743 :デフォルトの名無しさん :04/11/13 05:44:00
>>741 何言ってるのお前?スケールドインデックスは*1、*2、*4の事だろーが。
俺が言ってるのはdat[]のdatのアドレス値を使いたいのに実際はdatの
アドレス値が置かれているアドレスがインラインアセンブラで使われてるって
事だよ。いっぺん氏ね。
>>768 そいつはわかってる。今俺が言ってるのは
>>766 のどこが問題で、俺のように
動いたり、他の誰かのようにleaにしないと動かないかってとこなの。
>>768 さんの言いたい事はわかる。定数とアドレス変数は一段階アクセス
モードが違うから、アセンブリをする時はそれを考慮しないといけない。
しかし
>>766 はもう関数の引数にアドレス変数として入ってしまっているので、
movでいいじゃないかって事なの。dat[ecx * 4]とかしたら、datは中身では
なくそのもののアドレスって意味に取られてしまうわけでしょ?leaにしたって
同じ事。
>>767 そうだよ。等価にして速度比較するというのが前提だと俺は思っていたぞ。
結果は(l + r) / 2と書くか(unsigned)(l + r) >> 1 と書くかで違うけど。
VC7.1は後者の場合アセンブラと同じコードを吐きやがった。
>>771 AMD64のコードを動かしたわけじゃないけど
1)VirtualAlloc()で仮想アドレスを指定してCOMMITする。
2)1)が成功したら、その仮想アドレスをカーネルモード(ドライバ)に渡す。
以下カーネルモード
3)受け取った仮想アドレスの値と同じ物理アドレスに対応するPFNを参照し
使われていないか確認する。使われていたら1)に戻る。
4)3)のPFNをデータベースのリンクから切る(そのメモリ領域はOSの管理から離れる)
5)1)の仮想アドレスがマップしている物理アドレスに対応するPFNから
ページフレームの(仮想)アドレスを得る。
6)そのページフレームのアドレスフィールドに1)の仮想アドレスを書きこむ。
PFNについてはググってちょうだい。
ただ、PFNのアドレスはOSやバージョンによって違うから、MSのカーネルデバッガで
調べるしかない。
ありがとうございます。 裏ファンクションみたいな物があると期待したのですが、そう簡単にはいかない みたいですね。ですが、何とかがんばってみます。
780 :
デフォルトの名無しさん :04/11/13 19:02:29
>>776 >そいつはわかってる。
うそつけ。わかってるやつが、
>>747-748 のようなことを言うわけない。
自分の無知さを認めたくないからって、必死になるなよ。
781 :
デフォルトの名無しさん :04/11/13 19:04:27
>>780-781 決めつけはよくないな。俺が定数と変数の違いを理解してないとでも?
ばかにするのもほどほどにしろよ。
とにかくお前とは何回言葉を交わしても論点がズレてしまうのでもう
相手にせん。勝手にそう思ってろ。
2ちゃんぬるでのお約束 (口喧嘩のお約束) 馬鹿にされたら正論を吐いてはいけない 馬鹿にされたら更に馬鹿にし返すのが常道であり作法
ぬるか・・・
782の言動をまとめると
>>736 で提示されたソースを見て、
cmp dat[edx*4], ebx;
は間違いだと言っている。
実際には
>>747 が指摘したように、これで正しいのだが782はそれを理解できない。(
>>748-749 )
自分が正しい証拠として、
>>749 で782の書いたソースが公開されているが、
>>736 のdatはアドレスなのに、このソースのdatは仮引数(つまり変数)になっている。
つまり、条件が変わっていると言うことであり、条件が変わればコードも変わるのは当然なのだが、782はそれを理解できていない。
以上のことから、
>>768 で言ったことを知らなかったのは明らかだろう。
別に馬鹿にするつもりは無いが、バレバレの嘘ついても惨めなだけだが。
普段から、あんまりそんなことしてると、友達無くしますよ。よけいなお世話ですが。
この流れがそもそも理解出来ないんですが皆さんすごいですね
自分の無知を認めたくない737が必死だな。
さて判定は? ↓
>>778 スレ違いですが、もう一つだけ教えてください。
MnPfnDataBaseからフレームが並んでいることは分かったのですが
物理アドレスに対応するPFNはどのように見つけたらよいのでしょうか?
お願いします。
>>792 あの・・・・わかってるんですけど。
最初から配列はmain()で定義し、関数には配列の先頭アドレスを渡して
動かしていた。
>>736 のソースは悪いけど一回も動かしてないよ。
797 :
デフォルトの名無しさん :04/11/14 16:22:04
自分の頭の中で勝手にストーリーを作り それを真実であるかのように思い込むのは神経症と言う いい例が被害妄想 例 "C"としか言ってないのに勝手に"C++"に置き換える奴
>>797 そいつは微妙だ、昔からCを使っていてC++に移った人間はそもそも区別していない。
転換点らしいものが無かったから。
それについては被害妄想というより誤解と誤解のぶつかりあい。
要素が異なるのでやれる範囲も違えば 名前も違うし であれば明確に区別しなければ「ならない」
学生のテストじゃあるまいに・・・
そんなことすら区別できないバカがプログラムなんぞ出来るわけない Z80とPentiumだとしても同じアセンブラなんだから 同じ言語構成で行けるはずだろ!て言うバカと同じ 同じことをやろうとしてるんだけど CPUごとそれぞれ違うんですよ そんなことまで教えないといけないのか
区別できないと気にしないの区別ができないバカがいるな(w
似てるなんて言えばJAVAとCも似てるわけだが 気にしねえとか言って、JAVAさえもCと呼びそうな勢いだなw
しねーよバカ、JavaとCではそもそも互換ねーじゃよ
805 :
デフォルトの名無しさん :04/11/14 16:46:21
CとC++も互換なんざしないわけだが バカにはわからない (すればC, C++の区別も必要ない)
在るよ上位互換だバカ
テスト
Cでオブジェクト指向 できるんだってさw すげえ!
「Z80とPentiumでも同じ"アセンブラ"なんだから同じコードで通るはずだ」 このとおり、言い出しそうな有様
まあとにかく技術的なディテールよりもこのスレは「動くソースを載せる事」 が一番雄弁に真実を語る事は間違いない。
>>808 Cでオブジェクト指向した結果の延長がRuby
>>809 まあ 8080 のコードは Z80 で通ったりする訳だが
いつの話だ
ソースコード読む能力よりも、 「書いてあることをそのままの意味で読む」 能力が必要なんじゃねえのか?w
昔の話
いまでも8086のコードがPentiumで動いてる
8080のコードはV30でも(ry
V30って8080と実は互換あったん? 今頃初めて聞いた。
>>819 モードが切り替わるだけだから同時には使えない
このスレ、フレームばっかりだな
フレームって言うとenter/leaveって使ったことないなー
最近のCPUならpush/popの方が速いからねー
>>796 はい?
>>736 をみて
>>737 の発言が出てくるってことは、分かってないってことでしょう。
最初から云々なんて関係ないし、動かしたかどうかも関係ない。
それとも、いまはわかってるってことですか。
それなら、よかったですね。
もう誰が誰やらワカンネーYO!
>>826 このスレでは人を賤しめて自分の価値を再確認するバカが必死になってる
ようなんで。IDでも付けば解決するんだがな。
心の目で見ろ。そうすれば誰が誰だかなんて一発で・・・・くそッ
>>819 ゲームの資産を残すための互換性だったらしい
gccはathlon用にはleave使うよ〜。enter使わないけど。
入ります ディレクトリ
>>793 フレームは物理アドレス0番地から順番に並んでいますよ。
探し方は↓
[MmPfnDataBase] + (物理アドレス
>>12 ) * フレームサイズ
フレームのサイズは、通常24バイト、PAEで28バイトらしいです。
出ます ディレクトリ
>>826 737=743=748=749=761=776=782=796=825
755=768=780=785
792=824
だと思う。
824は否定しておりますがw
誤 824は否定しておりますがw 正 825は否定しておりますがw
ebpを元に戻すのに、leaveは普通に使われてると思う。 と思って試したら、VCではebp使わずにespで引数や変数にアクセスしてた。 BCCではleave使ってたが。
>>834 あの流れで737が別人とは思いづらいが、証拠があるわけでもないからね。
>>836 leaveはWinXPのカーネルでも良く使われているよ
じゃあenterが無いのはなんでだ
>>839 enterが遅いからでしょ。leaveはそれほどでもないんだろうけど。
Athlon64では、movとpopするよりleave使った方が 速いみたいだ。
今時は全部esp経由でいいんじゃね
843 :
デフォルトの名無しさん :04/11/15 21:25:00
最近アセンブラを使用しはじめました。 一つ質問をお願い致します。 以下のアセンブラのメモリ使用量を知りたいのです。加算16回のCコードを、VC++6.0でアセンブラ表記すると以下となりました。 004013B9 fld qword ptr [_rtP (00441a30)] 004013BF fadd qword ptr [_rtP+8 (00441a38)] 004013C5 fadd qword ptr [_rtP+10h (00441a40)] ・・・ 00401413 fadd qword ptr [_rtP+78h (00441aa8)] 00401419 fstp qword ptr [_rtB (00445850)] 左からアドレス、オペコード、オペランドになると思われます。 ここで、オペランドが指し示すデータのサイズ1つは8byteになると思います。 その他、オペコード(fld、fadd、fstp)自体もメモリ上にあると思われますが、メモリ使用量はいくつになるのでしょうか。 同様にオペランド(qword ptr[・・])自体のメモリ使用量はいくつになるのでしょうか。
>>843 ただ単にOBJやEXEファイルのサイズじゃダメなのか?
オペランドはアドレスだから4バイトだろうが
L1: 004013B9 fld qword ptr [_rtP (00441a30)] 004013BF fadd qword ptr [_rtP+8 (00441a38)] 004013C5 fadd qword ptr [_rtP+10h (00441a40)] ・・・ 00401413 fadd qword ptr [_rtP+78h (00441aa8)] 00401419 fstp qword ptr [_rtB (00445850)] L2: L2-L1でサイズわかるだろ
「ディズニーランドとオペランド 彼女と行くにはどっちがいいのですか」
>>842 espだとSIBコードのためにOPコードが1バイト長くなるような希ガス。
標準スタック・フレームを作成してebp経由でアクセスする事が前提に
命令フォーマットが作成されているかららしいね。
でもスタック・フレームを作成しないで全てesp経由にする事ももちろん
可能。
1バイトぐらいケチケチすんなYO!EBPが空く方がでけーぞ
>>844 004013BF fadd qword ptr [_rtP+8 (00441a38)]
上記加算の行を2行、4行、・・、1024行、2048行と増やし、生成されたexeのファイルサイズから差分を計算すると
一行につき22byteになりました。
>>846 L2-L1から計算すると1行6byteとなります。
どちらが正しいのでしょうか。
正確なバイト数は masmかなんかでリスティングファイル出力すればわかるだろうに
843はx86は1行が常にnバイトだと思ってるのかな?
平均とってどうするの?
その命令を含む簡単な実行ファイルをつくり、 デバッガで該当領域をディスアセンブルすればいいよ。 ニブちんの843でも一目瞭然だろ。
質問です。 nasm等のマクロアセンブラで作成したプログラムにおいて dbやdw等で確保したメモリのアドレスの場所は確認してますか? 私は小さいプログラム程度ならいつも確認してしまう癖があるのですが。 SYMDEB等で調べて安心するも、俺だけかと思ってしまい夜も眠れねえ
>>832 ありがとうございます。
何とか完成しました。ブルースクリーンを10回ほど出してしまいましたがw
855は843の兄弟か本人な気がしてならない とんちんかんな質問が流行?
860 :
855 :04/11/17 12:56:32
855です。
>>858 855は私ではないです。
>>859 1つのアドレスでメモリ上の1byteの領域を指し示すという事ですね。
で
>>843 の左のアドレスでは6byteずつ増えているため、
fld qword ptr [_rtP (00441a30)] やfadd qword ptr [_rtP+8 (00441a38)]
はメモリ上の6byteを使用し、記録されているているということですね。
>855です。
>
>>858 >855は私ではないです。
いや、笑ったけどさ
…な、なんかトソチソカソが大流行の悪寒。
>>860 =855と名乗りながら、自分が855ではないと否定。
意味のわからなさがなんかツボにはまった。
ここは匿名性が高いインターネッツですね。
ネッツ!!!!!!!!!!!!!!!!!!!! るby::!!!!!!
↑最近君が哀れでしょうがなく思えてきた
Ruby厨を演じているんだろうけど 全部同一人物ならかなり哀れだな それにしても似非Ruby厨大杉
867 :
デフォルトの名無しさん :04/11/19 00:10:46
こんにちわ。 最近PICをやろうと思い、アセンブラを勉強しはじめました。 質問なんですが、ビット処理命令というのと、リテラルデータの意味が わかりません。どうか後教授御願いします。
PICは使った事がないが、多分 ビット処理命令ってのはシフト(ビットをずらす=2で掛けたり割ったり)や and とか or とかの論理演算のこと。 リテラルデータというのは命令コードにデータが組み込まれた命令、 普通はどこかのメモリーもしくはレジスタを指定して読み出すけど、それがなくて命令中に直接値が入っている。 即値ロードと即値加算が多い。
>>867 君の場合、アセンブラの勉強の前に論理回路の勉強した方がいいよ
アセンブラの勉強を始めたのですが、見よう見真似で作成した以下のコードを masm32(と16bitリンカ)を使用して、"ml /c /Fl test.asm"するとエラーになります。 ググッてもビギナーには見当がつかない。 どうしたら動くかご教授ください。 『 CODE SEGMENT ASSUME DS:CODE,CS:CODE,ES:CODE,SS:CODE .186 ORG 100h START: mov ah,09H mov dx,message ←(*) int 21H mov ah,4CH int 21H message db 'This is a Test Program', 0DH,0AH,'$' CODE ENDS END START 』 (*) error A2070: invalid instruction operands
>>872 masm32で16ビットコードを書けたっけ?
>>873 アセンブルはできる気がする。
でも隣家だけ16ビットって試したことないなぁ。
>>872 エラー行はたぶん "OFFSET message"または LEA 命令。
com 形式って懐かしいなぁ。
セグメントレジスタは自動で初期化されるんだっけ?
ってか、32ビットのフラットモデルで勉強したほうがよくない?
アセンブラーでフロッピから起動してCDを再生するのですが
>>875 で、どうなっ
ここは「途中で言い止めるスレ」ではありま
それなのにint 21h?
先輩方、875めは私(872)ではございませんぞ!
使ったこと無いから予想だけど link /t test.obj じゃないか
そのとおりでした。。先輩方ゴメンナサイ!! 全部、上手くいきました、です! (本当にゴメンナサイ!)
何度も大恐縮です。 不肖の愚弟に知恵をお貸しください。 [ ]を使ってデータをやり取りしたいのですが、 (*)の場合のOFFSET指定?が分かりません。 『 mov ax,OFFSET [original] mov [carboncp],ax ←(*) (中略) original db 'AB', 0Dh,0Ah,'$' carboncp db '00', 0Dh,0Ah,'$' 』 このままでは (*) error A2070: invalid instruction operands でした。 馬鹿の一つ覚えで mov OFFSET [carboncp], ax とか mov [OFFSET carboncp], ax とかしたのですが error A2001: immediate operand not allowed でした。
まずmasm捨てるか、masmのイカレタ構文を染まるか、覚悟を決めろ
じゃあ、masmを捨てます!
nasmの方がいいんじゃね?つかmasm32っていちおう違法だろ
>>883 はdbだからだろな(確かめてない)
mov al, original
mov carboncp,al
db宣言されたラベルにはワードでアクセスできない
>>886 ,
>>887 ありがとうございます。
『
mov al,[original]
mov [carboncp],al
mov al,[original+1]
mov [carboncp+1],al
mov ah,09H
mov dx,OFFSET carboncp
(中略)
original db 'AB',0Dh,0Ah,'$'
carboncp db '00',0Dh,0Ah,'$'
』
でとおりました。一方、ワードを使ってみたくて
『
mov ax,[original]
mov [carboncp],ax
mov ah,09H
mov dx,OFFSET carboncp
(中略)
original dw '愛',0Dh,0Ah,'$'
carboncp dw '00',0Dh,0Ah,'$'
』
としてみると、コンパイルできるものの、
愛であろうと死であろうと文字に関係なく化けまった。。
我がアセンブル道(ミチ)の先は長そうである。
がんばってね
『 mov ax,word ptr[original] mov word ptr [carboncp],ax mov ah,09H mov dx,OFFSET carboncp (中略) original db 'AB',0Dh,0Ah,'$' carboncp db '00',0Dh,0Ah,'$' 』 これでどうよ?
>>889 サンキュッ・サーであります。
>>890 コンパイル、実行とも上手くいきました。
(返事遅くなってすみません。)
おかげで色々確かめながら勉強できるようになりました。
ありがとうございます。
しかし、しかし…、ANCIとかISOとかの世界と無縁のためか
初っ端からとっつき難い印象です。。
先輩方はこれを仕事にして食ってったり、当たり前の
教養として別に仕事されたりしてるんですよねぇ…。
自分には、スゴイ迫力であります。
NASMも試してみます。
>>887 初っ端からゼンゼン勝手が分からずにクヨクヨしてしまったので
以降は作戦を変えて、実験的にcでプログラムを作成しながら、
そのコードをVisualStudioあたりで逆アセンブルし、
ちまちま比較しながら進めていこうか、という考え。。。
mov al,13h int 10h ret
ぶっちゃけアセンブラプログラミング能力てどこで必要とされてる? こんなスキル生かせるのはウイルスソフト会社くらいでは? 小難しいアセンブラやるならC,C++やjavaを勉強したほうがいいのでは? いまいち何目的にアセンブラをやるのか、それがわからない
組み込みなら、汗も必要だろうが。
MASMは余計なことしすぎだよな。 勝手にセグメントのオーバーライドとかは激しくウザいし、 とくにmasm32の while とかの、わけのわからん高級言語風の記述。 かえってわかりにくくなってる。
別にやりたいからやる。やりたくなけりゃ、やらなくていい。 しかし、見えない本質を体得した後は、確実にコードに差が出る
C/C++みたいに、直接asmが吐かれる言語をやる人は知っておくべき Java,php,perlなんかがメインの人には要らない
898 :
お願いします :04/11/20 18:38:28
あるプログラムを逆アセンブルしたら、 次のように、意味のないジャンプ (次の命令へのジャンプ) をしている個所がたくさんあったのですが、 なぜこのようなことをしているのか分かりますか? ... E61: push eax E62: push(d) +00 E64: call(d) [USER32.MessageBoxA]; E6A: xor eax,eax E6C: jmpn E71 E71: pop edi E72: pop esi E73: pop ebx E74: leave E75: retn
> あるプログラムを逆アセンブルしたら タイーホ
>>898 パイプラインフラッシュのためかな?関数内での後始末部位だから。
単に最適化がしょーもないコンパイラだろ
>>900 すいません、それってどういう意味があるのでしょうか?
このプログラムは特殊なプログラムじゃなくて、
普通の GUI アプリケーションなんですが。。。
>>901 なんかそうかもしれません。
このようなコードでは、他の場所からもジャンプされているので、
たとえば、switch 文で case 句から抜けるときに、
switch の最後の case 句であるかどうかにかかわらず
ジャンプ命令を生成しているのかもしれませんね。
うーん、 if (MessageBox(NULL, lpText, lpCaption, MB_OK)); こういう処理やってるんじゃない?実際に試してはいないけど、こうすれば 多分そのまま次命令へのジャンプ処理が生成されるかと。
>>902 メモリ参照のジャンプのようなswitchに相当する部分は無いの?
見た感じjmp直前で eaxを0クリアして関数の返す値を0にしてるので、
defaultに落ちてきた時のエラー処理に相当するコードかと思うのだが。
>>904 すいません、「メモリ参照のジャンプ」というのはどういう意味でしょうか?
関数ポインタという意味ですか?
いかにも switch 文らしきところはあります。
たとえば、別のコードですが、ウィンドウ プロシージャの一部だと思われます。
L00006E4A: cmp [ebp-0C],0000040E
L00006E51: je L00006C01
L00006E57: cmp [ebp-0C],0000040F
L00006E5E: je L00006C24
L00006E64: cmp [ebp-0C],00000410
L00006E6B: je L00006CB6
L00006E71: jmpn L00006E76
L00006E76: push(d) [ebp+14]
L00006E79: push(d) [ebp+10]
L00006E7C: push(d) [ebp+0C]
L00006E7F: push(d) [ebp+08]
L00006E82: call(d) [+off32 USER32.DefWindowProcA]
L00006E88: jmpn L00006E8D ;; <-- ここ
L00006E8D: pop edi
L00006E8E: pop esi
L00006E8F: pop ebx
L00006E90: leave
L00006E91: retn 0010
ああ、ウィンドウプロシージャなら確かにそういう処理するな。
車のECU作ってますが何か
908 :
デフォルトの名無しさん :04/11/20 21:26:33
>898 Hex.コードは数字の羅列であり、OPコードとOPランドとの境が不明であり、逆汗しても正しいとは限らないというか、ほぼ間違っている、何故ならこれは、その一命令が何バイト命令か不明であるからこうなる。 >裏を返せば、1命令が例えば2byte命令で統一されていたりすると逆汗結果が正しいということが分かる >実際はそんな命令セットはほとんど皆無に近いから、逆汗コードが間違っているということが分かる。 >ちまちまダンプリストから手で逆汗するのが正しい手法。>DOSからdebugで入るならDコード
というか >908は、 どこから逆アセリストを取り始めたかにより正しいか間違ってるか決まってくる。 命令の先頭であるOPランドからリストを取り始めているなら正しいだろう。 しかし、コードの中には、命令でなく、パラメータや割り込み用ベクタアドレス(これらは命令でなくただの数字とアルファベット)であるものも含まれている。 その箇所を把握していないと正しい結果は出ない。
そんなキモイ本紹介せんでくれ
912=見た目と思い込みで判断するアフォ
やねうらお先生も、こんな辺境まで来て宣伝しなくてはいけないぐらい生活に困ってるのかww
見た目がキモくても、それなりに内容があれば文句は言わんのだが・・・
要は中身 で、その中身がどうかというと… ↓
エロゲPGだな
ただの汚物
いま汗が最悪な出来だったから少しだけマシなやねうらお本がさも良書の如く言われてるだけー
ケース別 OllyDbg 解説書「こんなときにはこの機能が便利」 アセンブラの勉強目的だったら内容が薄すぎるので止めといたほうがいい シェアウェア作者ならこの本に書かれてる程度の内容でクラックされるのは 恥ずかしいだろうから買っといた方がいいかも # ただし対策側ノウハウはまるで書かれていないので覚悟してから
対策=法的手段に訴える
こっちはクラック技術なんかお呼びじゃねーんだよ
面白いね。ついでにGPLの日本における法的妥当性も争ってほしい。
禿しくスレ違いだな
CPUの創り方はイイ!
そうなの?こんど買ってみよう。。。 どこらへんがよかった?
この本って、プログラマとしての技術にどれぐらい寄与すると思う? 今時の CPU とずいぶんかけ離れていたりしないのかな?
タイトルの通り「CPUの創り方」であって「CPUの使い方」ではない。
>>929 プログラマに直接的なプラス要因になる本じゃないと思うよ。
むしろ、サプリメント的に後々壁にぶつかった時に理解する下地を作れるって感じかな。
932 :
デフォルトの名無しさん :04/11/22 10:14:47
Winnyを解析したいのですが、よいリバースのツールありませんか?
core吐きますな。
お前ら何をム板でコアな話してるんだよ!
937 :
デフォルトの名無しさん :04/11/22 15:31:35
今アセンブラのソースを見ているのですが AND EBX,0F こう書かれている箇所があります。 EBX+0x0Fだと思ったのですが0Fってのが理解できません。 普通の16進数のFではないようです。 これはどういう処理になるのでしょうか?
普通の16進数のF
C風に書けば、 EBX &= 0xf;
普通に下位4ビット取り出しだな
・・・すみません。単なるADDとANDの読み間違いでした。 こんなつまらないことで御手数かけて申し訳ないです。
プロテクトモードに移行するためにプロテクトモード用セグメントを設計しているのですが いろいろ読んでみてもいまいちよく分かりません。 セグメントディスクリプタのメンバーの1つであるベースアドレスについてですが。 ここのベースアドレスには物理アドレスを入れればよいのでしょうか? 後物理アドレスの算出方法は 1000h:0000h というアドレスを物理アドレスに変換したい場合は 1000h * 16 + 0000h でよいのでしょうか?。 どなたか教えてください。お願いします
セグメトアドレスってページングの後に決定じゃなかった? だから セグメントベース=リニアアドレス≠物理アドレス ページングoffならリニアアドレス=物理アドレス
>>942 ベースアドレスには物理アドレスをそのまま入れてやればいいですね。
その算出法というのが何を意図してるのかわからないのだが(リアルモードと混同してる?)、
ベースアドレスの値のままでいいでつ
てかC++とか使いこなせる人がさらなるスピードアップのために使うものでないのか?
今時アセンブラで書くにはそれなりの理由があるので、 単にさらなるスピードアップと言うだけで使うわけじゃないから、 C, C++を使いこなせるかどうかはあまり関係がない(相関はあるだろうが)。 言語処理系なんかでCじゃ書けないことを実現するとか。 SSEなんかのSIMD命令の利用も、まあ更なるスピードアップでもあるけれども、 意味合いとしてはCじゃ書けないことの部類に入るかな。
>>942 セグメントベースには論理アドレスを入れるから
>>943 の言う通り。
ページングを利用する場合も0x0Eの割り込み処理(ページング機構といった方が早いか)がしっかり整っているなら、別に気にする必要ないと思う。
リアル/仮想8086モードでのセグメントとオフセットの話はその通り。
何してんのか知らないけど頑張ってね。
プロテクトモード移行だからreal to prtectedなんだろな 2つデスクリプタ作って、うぞうぞやってればその内できるよ
>>950 正直言って君の書いたプログラムを使いたいとは思わない。
286の設計段階で、セグメントベースもリミットと同じように 4Kごとにしてしまえばよかったのに。なんでだめなの?
あ、よく考えたらやっぱだめか。 286の段階ではディスクリプタ(8byte)の先頭から6バイト分しか 使われてなくて、リミットのオフセット4K(Gビット=1)ってのは 386から導入されたものだってことだね。286のOSは、64kの セグメントを複数切り替えて動作する、純粋なリアルモード のアプリケーションを複数走らせるものだったということなのね。。
皆さんどうもありがとうございます。 real to Protectのコードを書いているのですが。どうにも3rd exceptionが発生してだめなんです… Monaの旧スレを見ながらやっているのですが… もうちょっとがんばってやってみます
286のOSだとプロセスごとにGDTを割り当てて、
タスク切り替え時にGDTRを、ちょうど386がCR3を
書き換えるみたいに、入れ替えるということなのね。
なるほど。。。
>>942 実際に手を動かした人にだけ技術力はつく!がんばれー
漏れも286のOS作ってみたくなってきたw
>>942 >1000h * 16 + 0000h
8086ではセグメントレジスタの値は自動的に16倍されるけど、
286/386のプロテクトモードにおけるセグメントディスクリプタ内の
ベースアドレスは16倍されないはず。セグメントの開始アドレスは
バイト単位で指定できるようになってる。
286ではベースアドレスに24ビット = 16MB
386ではベースアドレスに32ビット = 4GB
のリニアアドレスの領域指定できる。
>>952 だけど、やっぱりいろいろ考えると変だな。386のリミットの
4kオフセットはでかすぎにしても、ディスクリプタ内のベースとリミットは
8086のセグメントレジスタのように無条件に何倍かにしてもよさそうだ。
8086ですら、16バイトごとにセグメントっていうスコープを割り当てて
メモリ空間使ってたわけだし。286のOSの役割は16ビットアプリケーションに、
セグメントディスクリプタのPビットを386のページエントリのPビットと
同じようにして使って、連続した1MBの領域があるかのように見せるだけだしな。
そもそも286の段階でセグメントのリミットなんて必要だったのかな?8086の
アプリケーションは1MBの領域をアプリケーション内でセグメントレジスタ
という物差しを割り当てて使ってただけでしょ?リミットなんてない。
セグメント指定したら64kすっぽり読み書き可能。OS(特権モード)の
ために用意されたってことかいな。
そろそろ次スレか? アセンブラ… (´・ω・`)ショボ━━ン!!! でおながいします
キモい顔文字イラネ
◎店名 女性専用出張風俗店「LilyMotion」 ◎営業時間 24時間 年中無休 ◎利用できる場所 ホテルor貴女の自宅 ◎利用できる方 女性のみ(カップルの方のコースも別にあります) コースと料金(女性の方お1人でご利用の場合) 60分(1時間) 10000円 120分(2時間) 20000円 180分(3時間) 30000円 240分(4時間) 40000円 300分(5時間) 50000円 指名料 2000円 ◎お相手は全て当店の指導を受けた素敵な優しい女性ばかりです。 ◎女性を満足させるためのテクニック+αがあるのは当店だけです。 ◎ピンクローター、ローション、双頭バイブ等のオプション料や追加料金は頂きません。 ◎年会費無料の会員登録をされますと全コース2000円オフになります。 ◎会員様には男性を指名できる特別限定コースもご用意しております。 ◎カップルでご利用の際は下記コースと料金になりますのでご注意下さい。 コースと料金(男性と女性もしくは女性と女性のカップルでご利用の場合) 120分(2時間) 23000円 180分(3時間) 33000円 240分(4時間) 43000円 300分(5時間) 53000円 指名料 2000円
>>957 それ書いたの俺だわ。
今読むと読点が変だ。恥ずかしい。
8086との互換性のことまでは考えてなかったです。
16MBもの広大な空間を64KBに細切れにしたら使いにくいよ、ということが言いたかった。
8086を作った人達は、8080の16ビット版を作る気だったんだと思うよ。
当時のプログラムは1プロセスあたり64KBで十分で、
それを複数個同時に動かすために1MBのメモリ空間を用意し、
バンク切り替えよりも気が利いている程度のものとして作られたのだと思う。
セグメントレジスタを複数個用意するのはOSに必要だからいいとしても、
それをユーザモード(んなものはないわけだが)に解放したのが間違いだと思う。
>>964 8085の16ビット版だろうね。
で、ユーザモードなんて概念がないんだから開放するしかないのだが。
>>964 8086にだってプロテクトモードを設けることはできたでしょう。
1MBの領域を細切れにし、2,3のプログラムで分ける。
でもそれなら、セグメントレジスタには16bitも必要ないでしょうね。
もっと目の粗いものでも十分だった気がします。8bitで、純粋に
GDTのインデックスを指定するためのものという扱いです。
ディスクリプタも4byteぐらいに抑えておけばGDTのサイズもそれ程
膨れ上がりません。
やはり8086のセグメントは単一のアプリケーションに64k以上のメモリ空間を、
バンクの切り替えにより、自由に操作可能とするためのものだと思います。
またUNIXのようにプロセスをバンバン起動するような利用形態は8086では
考えられていなかったのではないでしょうか、どうでしょう。
当時の様子を知らない、素人の推測ですのであてになりませんが。
どうなんでしょう、中の人じゃないので、本当のところはわかりません。 もし、セグメントレジスタを8ビットにして、4KB毎でしか区切れないようにしたら、 メモリがもったいない! と怒られていたと思う。 64KBや128KBしかRAMを積んでないマシンでの4KBは貴重ですから。 セグメントによる恩恵は、64KB越えのメモリアクセスは後からの話で、 まずは、メモリのどこにロードしても絶対アドレスへのジャンプを 書き換えなくてよい、というのが大きいです。
でも ヒ ュ ー ジ モ ー ド は 最 悪 に 遅 か っ た な
huge mode? なにそれ?
Cでセグメント境界を自動的に調節してくれるが、オーバーヘッドが大きい 諸刃の剣。 ってあれはhuge modelだな
971 :
デフォルトの名無しさん :04/11/26 22:05:49
age
>>966 重なっている部分は共有メモリとして使うつもりだったらしいよ
ume
もったいない
8086の段階でも、セグメントレジスタのビットシフト数を特殊レジスタに 設定しておくことにすれば、ソフトもハードもそう過大なオーバヘッドを招くことなく、 スケーラブルにできたんだよ。 それをしなかったのは、その時点で1MBは使い切れない程広大な メモリ空間だと思われていたのが1つ。 さらに、次(々)世代ぐらいでは完全な新設計になるので未来のことを 考慮しておくのはナンセンスだと思われていたのがもう1つ。 ところが現実は・・・
いいじゃないか。386で対応できたんだから
>>975 8086なんて、プログラムが難しい以前に、調達が難しいだろ。
978 :
デフォルトの名無しさん :04/11/27 08:59:54
>>975 集積度が足りなかったんだよ。それぐらい空気嫁。
それともお前は現在の基準で過去を裁く人間なのか?
>それともお前は現在の基準で過去を裁く人間なのか?
それ程深くもない知識で歴史を眺める以上、ある程度は避けられないですね。
というか8086が出たのが78年。286が出たのが82年。
'71 4004 4bit
'74 8080 8bit
'78 8086 16bit
'82 80286
'85 80386 32bit
この4年の間にどれぐらいの製造技術の変化があったのでしょうかね。
8086から286への変化はCPUの仮想化と見てもいいような変化だと思います。
また32ビット化も考慮されて(Pagingは想定外だったかも)設計されてる。
凄いですね。
>>967 >もし、セグメントレジスタを8ビットにして、4KB毎でしか区切れないようにしたら、
考えていたのは、8bitというのは単純にGDTのインデックス値であり、
ディスクリプタ内で16bitのベースアドレスと属性フィールドを持つような形です。
OSへ新規セグメント要求システムコールを呼び出し、GDTの8bitのインデックスを
割り振ってもらう、そんなものをイメージしてました。システム内ではGDTは
共有されるので、同一の特権モードの保護はなされません。
まあ、その当時にそんな重たいメモリ管理ユニットを乗せられるわけもないですねw
>>980 ものすごい勢いで集積度は上がりましたが。
ムーアの法則って聞いたことない?
>>それ程深くもない知識で歴史を眺める以上、ある程度は避けられないですね。 ならだまってろ。だれにでも発言権があるわけではない
>>982 何様のつもりだこの池沼。仕切り屋ふぜいが。
俺様のつもりだ。わかったらとっとと退場しろ
嫌だね。仕切るなら金払え。
CPUアーキの後だしジャンケン論争って、8ビットのころからちっとも 変わってないな
>8086の段階でも、セグメントレジスタのビットシフト数を特殊レジスタに >設定しておくことにすれば、ソフトもハードもそう過大なオーバヘッドを招くことなく、 実際これのオーバーヘッドってどれぐらい? アイディアとしては悪くなさそうだけど。
次スレは?
もう有るよ
今のエンジンは100馬力あるのに、昔のエンジンは10馬力しかないからクソ、 10倍大きくしてでも100馬力にするべきだったといってるような議論だな。
池沼を追い込むなよ。刺されるぞ