1 :
デフォルトの名無しさん :
2005/05/04(水) 15:32:49
2 :
デフォルトの名無しさん :2005/05/04(水) 15:33:40
3get
4 :
デフォルトの名無しさん :2005/05/04(水) 15:34:40
5 :
デフォルトの名無しさん :2005/05/04(水) 15:37:45
>>1 乙。
ホントにこのスレタイで立てたんだな…。
アセンブラヽ(`Д´)ノモルァ アセンブラヽ(`Д´)ノモルァ アセンブラヽ(`Д´)ノモルァ アセンブラヽ(`Д´)ノモルァ アセンブラヽ(`Д´)ノモルァ アセンブラヽ(`Д´)ノモルァ アセンブラヽ(`Д´)ノモルァ アセンブラヽ(`Д´)ノモルァ アセンブラヽ(`Д´)ノモルァ アセンブラヽ(`Д´)ノモルァ ヽ(`Д´)ノモルァ
詳しいことになると、ゲーム特有のアドレス配置もありそうなので ブレイクについて教えてもらえませんか。 ゲーム解析をしていますが 当該パラメータ格納アドレスを特定し実際に減算イベントを発生させて ブレイクさせてログを採るところまではできました 一般的にはブレイクしたときのログに載ってるアドレスのどれか近辺が、 実際の減算ルーチンになる可能性が高いのでしょうか。
ポロレスだったら離れるだけで済む。 「ブレイッ ブレイッ」 「1,2」 「ののののの」
でもビーム解析は重要だな。 アセンブラのピの字も知らなかった漏れがここまで理解できるようになったのは ゲーム解析のおかげ。
馬鹿が変な本出すから、
>>9 や
>>12 みたいなのが発生するんだよ。
お前らアセンブラでプログラムを書いているのかと小一時間。
14 :
デフォルトの名無しさん :2005/05/04(水) 20:12:38
吼えてゐる 吼えてぬる
ぽ
>>15 mov ah,09
mov dx,msg
int 21
int 20
:msg
db "ガッ$"
17 :
184 :2005/05/04(水) 20:49:20
(0w0)ウェーーーーーーーーーーーーーーーーーイ
>>16 ネタにマジレスして悪いんだが、
突っ込みどころ満載のソースだなw
20 :
16 :2005/05/04(水) 21:13:18
(・∀・)ニヤニヤ
アセンブラのピョインタがどうにもうまくできません 覚えるにいい方法ないですか。
絶版が多いのが残念だ。
このスレ目立つぞ
「NOPさーん」 「ウホ ウホホホホ」 おやおや ゴン太くんは今日も元気ですね
export _DriverEntry _DriverEntry: xor eax,eax mov [eax],edx ret
別にC言語じゃなきゃ、0番地に何か書くのもアリだろ。 CPUによっちゃ、割り込みベクタがあったりするしな。
>>32 何阿呆言ってるの?
C言語でも必要があったら0番地に書かなきゃならないんだけど。
つーか、環境と言語の区別ができませんか?
児童ポルヌ
38 :
デフォルトの名無しさん :2005/05/05(木) 20:08:08
org 100hでどうぞ
orz 人生h
or2 穴h
>>29 RadASM+MASMな感じでやっているのですが
フォントを MS Sans serifからMSゴシックとかに変えてしまうと
ダイアログの大きさとかボタンの大きさが変わってしまって困っています。
dialog box base unit とかが関係しているっぽいのですが
RadASMのリソースエディタというかプレビューする機能を
改造するまでにはいたらず。だれかボスケテ。
全部英語で作ってイメージ貼り付けたボタンとかで逃げようかしらー
42 :
デフォルトの名無しさん :2005/05/06(金) 03:10:52
MASMってもはやフリーで配布されているそうですが MSDNにも見つかりませんでした 本当にフリーなんですか
43 :
デフォルトの名無しさん :2005/05/06(金) 03:14:44
いちおう検索して、マイクロソフトでDDTの申し込みをするべきだ とのヘルプがあったのですが 脳天から落とされそうで怖いのです どうしたらいいですか。
>>43 >DDTの申し込み
>脳天から落とされそうで
ワラタ
46 :
デフォルトの名無しさん :2005/05/06(金) 07:37:52
過去ログで何度も出ているがMASM 6系の最新版であるMASM 6.15.8803は Visual C++ 6.0 Processor Pack (vcpp.exe, vcpp5.exe)に含まれている。 ただで落とせるが、ライセンスに関しては自分で判断せよ。 MASMの最新版はVS.NET 2003に付属の7.10.3077。
何故MASM? NASM使えよ。
別に誰が何を使おうが…
でもmasmは知ってるのにnasmは知らない人は可哀相に思える
NASM NWSA TASM MASM どれでも好きなのを使え(左から俺の高感度順)
NASMを使わない奴はこのスレ禁止な。 オープンソースマンセー!!!
で、それにgas。これ最強。
gccからgasに出せば何となくいじれるが、 フルスクラッチでgasは俺にはムリポ
57 :
56 :2005/05/07(土) 03:09:22
>gccからgasに出せば 何か日本語が変だ まぁ、何にしろ俺にはムリポ
>>56 gas究めれば、もはや敵無しなのに...
俺は最初はTASMだったが、
TASM → NASM → gas
に移った。
.intel_syntaxを付けても良いなら 俺もgasで書けそうな気はするが。
%とか$とかいっぱいでキモチワルイ
gas ってドキュメントが少ない気がする
∧_∧ ( ´∀`) GASを出すのに理屈は要らねえんだよ /, つ (_(_, ) しし'
オープンソース・ソフトウェアにケチをつけるバカタレがいるスレはここですか?
屁理屈ですか
65 :
64 :2005/05/07(土) 06:05:22
あぁ、可哀想にM$に洗脳されてんだな。
洗脳されててすみませんのう。
ソースを例にとってソースを語ってみよう。 ソースを買ってきた。 開けた。オープンソースである。 使われないでいると、当然腐ってしまう。 オープンソースは腐るのが早い。 使われているならば腐る前に腹に入るが、 そのうちどんどんなくなってくる。ネタの枯渇である。 このように、ソースとソースの間には密接な関係があると言えるだろう。
ちょっと質問、int 10hで文字列の表示ってどうやるんだっけ?
英語じゃわかんねーよボケ!!!!
74 :
69 :2005/05/09(月) 18:31:30
「はじめての486」と「はじめての8086」のどっちを読むのがいいですか?
8086 -> 486 の順番で
78 :
75 :2005/05/10(火) 22:14:19
はじめてシリーズは一回読んだら捨ててよい本だから買うな。 借りとけ。
クロックの十分の一は神様に捧げなくては行けません nop
天使の取り分とかあるのかなw
神様は分けてもらったクロックでエロ動画をエンコしてるのか
えろい神様だな。
nopを捧げても1クロックに満たなかった為、撥が当たりました
右のTLBをInvalidateされたら、左のTLBも差し出しなさい MIPS神
nasmも.386とか宣言する必要あるよね
nopが実際にはEAXのチェンジをしているのはx86系のみ?
最初の頃は知らんが最近のCPUだと実際にはエクスチェンジしてない本当のnop
「nopさーん」 ウホ、ウ(ry
8086/8088/80186/80286/386では xchg ax,regもnopも同じ3clockで区別がつかん 486ではnopは1clockに下がったのでnop専用回路があるんだろう
>>88 どちらかというと、axレジスタ同士の交換のコードをnopに割り当てたと言うべきだね。
どうでもいいが、NOPの命令コードが00(16ビットなら0000) じゃないCPUは許せん。
いや、寧ろffであって欲しい。 UVErasableROMを使っていた頃は心底そう思った。 #そして、0x66番地に0xc9を書き込むと。
「nopさー(ry
だから若者置いてけぼりネタはやめろと
ぬこを追いかけるときには、メガドライブの「エアダイバー」最終面の音楽やな。 ねこねこねこねこねこねこたーんー ねこねこねこねこねこねこたーんー ねこねこねこねこねこねこたーんー ねーこちゃーねーこーちゃー にゃーねーこーちゃーねーこーたーんー ねこねこねこねこねこねこねーこー ねこねこねこねこねこねこねーこー ねこねこねこねこねこねこねーこー テンポ180くらいで 血管ブチ切れるまで
やっぱこれでしょ sll $zero, $zero, 0
>>94 だよね〜。
ROM上ではffになるように、データバスの入出力にインバータ入れてたりした?
FFはむしろNOPよりトラップが似合ってる
mips2などのRISCでは、空き領域に 0xDEADBEEF を入れてた俺。
データエリアには0xDEADBEEF、テキストエリアには0xDEADC0DEは基本だろ。
(´-`).。oO(・・・
ツマンナイ、何が尾も知りわけ 意味が無いコード出すなよ。
z80の質問してもよかですか?
でもこのスレのヲチャだったら即答しそうな希ガス
Z80は16ビット関連命令が少ない(8ビットCPUだから当たり前か)上に、 アドレッシングモードが貧弱過ぎて、泣けてくる。 同じ8ビットでも6502のようにアドレッシングモードが豊富だと、ニヤリと できるのだが。
アドレッシングモードってなに?と言ってみるテスト
113 :
111 :2005/05/19(木) 02:32:19
マジレスかよー、まいったまいった。 もう寝るわ。
スミマセン. 質問です。 x86 CPU で DF の影響を受けるのは lods, cmps, scas, stos, movs 以外にもありますでしょうか?
pushf smsw int bound call 他にもある
どうもありがとうございます。ins と outs も影響を受けるみたいですね。 pushf とか smsw は使った事ありませんでした。もっと勉強しなくては。
おい騙されるな
>>68 先生!意味がわかりません。
もっと、詳しく!
119 :
デフォルトの名無しさん :2005/05/25(水) 22:40:44
Enablemenuitem関数で メニューを強制的にEnableにするには 引数には何を渡したらいいんですかね。 引数のレジスタもわからない。 アセンブラ orz
>>119 stdcall関数は引数を渡すのにレジスタは使わずスタックにpushしていく。
push 0
push メニューID
push メニューハンドル
121 :
デフォルトの名無しさん :2005/05/25(水) 23:01:36
>>120 おかげさまで、Enableになりましたが、
ターゲットの項目のうち大部分はクリックしても
その後のウインドウが開きません。もともとリソースの無いものを
呼び出したのかなぁ?
123 :
デフォルトの名無しさん :2005/05/26(木) 00:15:43
x86上のlinuxでgccです。 ストリングI/O命令がさっぱり速くないのは、そういうもんなんでしょか? asm-i386/io.hのinsbマクロを使って、0x0100番地台から読み込んでるんですが、 inbをforループで回したときと速度が変わりません。 objdumpで見ると、ちゃんと「rep insb」なコードになってるんですけどねぇ。
>>123 intelのPDFみてみ。IN/OUT命令そのものが多量のレイテンシを伴う
ので、ストリング命令使ってもほとんど旨味がない。
>>124 即答ありがとう。
そうだよなぁ、単発でマイクロ秒単位かかる命令だから、ループの判定なんて元々
埋もれちゃってるよなぁ。そんな魔法みたいなウマイ話は無いよね。
薄々は気づいてたんだけど、やっぱ微塵も速くならないとなると不安が拭えなくて。
すっきりしました。
んだから、ちょっとした遅延処理の時によく利用されてるだよ。 > IN/OUT命令
>>125 それでも、386より前のDOS MODE下でのIN/OUTは結構早かったんだけどね。
プロテクトモードに移行してから鈍亀みたいに遅くなった。
>>127 大人(プロテクトモード)には子供(リアルモード)にはない事情があるのですよ。
特に入出力にはね。
130 :
123 :2005/05/26(木) 23:05:24
いやぁ、わざわざストリング版を用意してるぐらいだからってことで、ちょっとは期待してたんですけどね。 単発の異様な遅さを回避できるなにかを仕掛けてくれてるんじゃないかって。 実は某組込ボードの取説に「insbを使えば高速」とうたってたのに、やってみたらまったく変わらなくて。
>>119 Cで書いてコンパイラがどんなソースを出力してるか観察しる。
身近な成功例を真似するのは基本だぞ。
>>125 >>127 昔はメモリマップドIOのほうが速いと言われてたけど、今はどうなのかなぁ。
メモリの当該エリアがキャッシュ禁止だと、かなり遅くなるわけで・・・。
repを使っても毎回特権モードのチェックしてるのかなぁ。
それとも、バーストが効かないからダメダメなのかなぁ。
132 :
デフォルトの名無しさん :2005/05/30(月) 22:25:04
CPUのエミュレータを作ってみたいんですが それって基本的にswitchの塊になるんですよね。 そういうアプローチじゃなくて自己改変コードによって 動的に実行コードを作っていけたら効率が良いように 思えるんですがどうでしょう? 自己改変コードはキャッシュ書き換えのペナルティ大きいんで 逆効果ですかね?
>>132 先ずは普通に作ってパフォーマンスを見極めてからにすれば?
インストラクション毎にデバッガで追えなくてもいいなら コンパイラの最適化と同じ
っていうか今時 switch の塊のエミュレータなんて使ってないっしょ。
>>135 じゃあどういうやつ?
俺の頭では、あとは関数ポインタくらいしか
思い浮かばないんだが・・。これは遅そいぐらいでメリットなさそう。
switch文が大きくなると、 自動的にジャンプテーブルにしてくれる、 という話を昔見たのだけど・・・
動的コード変換が都合が悪い場合や移植性重視のときはswitchを使うな 自分の環境だと関数ポインタテーブルよりswitchの方が無駄なエピローグプロローグコードが生成されずに良好な場合が多かったので 長いswitchブロックを見ると自分のコードながらうんざりするが
switch メリット: 分岐予測可能 デメリット: コードが見難い ジャンプテーブル メリット: コードが見易い デメリット: 分岐予測不可能
そこでThreaded Codeですよ
switch文内で書かずに、 それぞれの処理をする関数を呼ぶだけにすりゃいいじゃん。 マクロで、 ENTRY(0x00, NOP) みたいなのを、 case 0x00: DoInstructionNOP(&context) ; break ; みたいに展開してやりゃ、見やすくなるでしょ。
switch並べてもcaseの数が多くなればコンパイラが ジャンプテーブルにしてくれるよ。
switch文が大きくなりすぎると、コンパイラが根をあげてHDDを フォーマットしちゃうんだって。
俺が現実に作るとなると 実際の命令の出現頻度をある程度(種類別に)調べておいて 頻度の高いもの数種類をifで先に処理し 残りをswitchにするかも。 その方が分岐予測的に良さそうな気がするから。 まあifで処理するかswitchで処理するかの判定に ビットテーブル位は使うかも知れんけど。
漏れなら先ず最初にテーブルで作ってみるがな。
switchが使えるアセンブラの話をするスレはここですか。 あと、コンパイラが根を上げるアセンブラの話もここですね。
>>148 インラインコンパイラも含めていいことになってるから
ギリセーフ。
150 :
デフォルトの名無しさん :2005/06/02(木) 20:45:01
「nopさー(ry
Z80で時計を作ってnopと繰り返しで正確な1秒を作ってた頃が懐かしい・・・
>>149 ああ、含めていいんだ… インラインコンパイラ
って、なんだ ?
アセンブラのソース中にC/C++等のコードを混ぜることが可能なもの、ではないか?
>>151 クロックジェネレーターって時計を作れるほどそんなに正確だったのかな?
正確でしょ。安いものほど時計用のクロックを流用してたよ。
マシンのクロックとか内蔵タイマで時計を作ると天文時計とはどんどんずれてくよ。 日常の時計が必要な場合はRTCデバイスを装備しないとダメ。
今時の時計が少し進んだり遅れたりするPCのマザーボードには、 時計用の水晶が使われているのですが・・・。 その水晶の品質もあるけど、 発振回路の出来や温度などにもよるわけで・・・。
本当に正確なものを求めるのならセシウムでないといけない ていうか外界から影響を受けやすいようなもので作っても意味がない
某マシンはRTC乗ってなかったな 起動のたびに現日時を入力させられた
PCも電波時計を搭載しよう。
( ( ( ( ( (゚∀゚) ) ) ) ) )
正確な1秒を刻む時計はあるけど、 正確な一日を刻むのは日時計しか(ry
164 :
test :2005/06/04(土) 18:11:42
wwwwwwwwww
まず1日の定義から話を始めようか。
俺が起床してから就寝して、また起床する直前までの間が1日としようか。
PCの時計を1日とすればいいだよ 完璧だろ?
マイメロ始まった時から 次のマイメロが始まるまで これを元に一日を算出。
bt 使用してスピンロックする排他処理をx86アセンブラを使用して書いてるんだけど うまく排他がかからない。(Linux for SMP & pthread) ひょっとして、システムで用意されてる排他処理関数を使用せずに ユーザ空間で排他処理作成することって不可能?
>>171 > うまく排他がかからない。
うまく排他がかかる状況は一つしかないんだけど、
うまく排他がかからない状況は星の数ほどあるわけで…。
そういうときは正露丸 排他には歯に詰めてご使用くださいってあるし、間違いないだろう。
>171 lock bt でおk
177 :
171 :2005/06/07(火) 23:44:02
lock btc、lock dec、lock incを使用したんですけどダメでした。(volatileな排他変数を使用) 不可分処理中にわざと sleep などでコンテキストスイッチを発生させてるのですけど そういう処理はやってはいけないんですか? (もし、不可分処理中に別スレッド(排他権限を獲得してない)に移っても排他変数を dec できないはず)
CPU一個だとうまくいくのか?
179 :
171 :2005/06/08(水) 03:54:54
アセンブラで書いた排他スピンロック処理できたァ━━━(。A。)━━━ッ!!!!! for Linux SMP & pthread
>>178 そんな次元でなかったです。単にコード間違ってただけでした。 orz
さて (´・ω・`) 寝るとするか。
おいおい・・・
つまり、まとめると正露丸が効いたということだな。
さすが正露丸、CPUにまで効くとは。
実際に正露丸を歯に詰めたら、凄まじく臭くて死にそうになったがな
184 :
171 :2005/06/08(水) 20:22:11
64bit の Linux SMP(Op x 2)でもうまくいってるし、完璧みたいだな。
さすが正露丸。 64bit でも ok か。
俺も正露丸買ってきて次のデバッグに備えるよ
正露丸、正露丸って、全然面白くねーんだよ。 消えろボケが。
歯に正露丸つめるのはやめとけ。 単に感覚をマヒさせてるだけで、症状はそのまま進行してるからな。
アセンブラでクイックソートの書き方がわかりません。 教えてください。 提出が明日で切羽詰ってます。 考え方はどうでもいいのでソースをおながいします。
191 :
189 :2005/06/09(木) 21:18:52
正露丸! 正露丸をお持ちの方はいらっしゃいませんか!
>>189 さんが困っています!
193 :
189 :2005/06/09(木) 21:29:17
てめーは引っ込め!正露丸ヲタが!!
征露丸ください。
195 :
189 :2005/06/09(木) 21:34:31
193の書き込みは偽者です! 切羽詰ってるんです(汗) 何とかしてください おながいしますw
197 :
189 :2005/06/09(木) 21:39:29
>>196 ありがとうございます
ついでにソースもください
切羽詰ってるんですw
アセンブラスレとドット絵スレとローポリスレの惨状が 時代の変化を感じさせる今日この頃です。
>>189 他の言語(含自然言語)でクイックソートを書いてそれを脳内コンパイルすればいい。
202 :
189 :2005/06/09(木) 22:11:25
>>199 どーやってコンパイラに出力させるんですか?
VS.netの環境があります。
>>202 プロジェクトの設定。
それ以上は該当スレへ。
204 :
189 :2005/06/09(木) 22:43:06
どうも参考になりましたw 明日おこられまつww
いまどき汗でqsort書く必要ってどこにあるんだろうな。
189に課題を出した方は成績つけられるだろ。
207 :
デフォルトの名無しさん :2005/06/13(月) 00:08:21
masm バージョン8.00.50215.44でSSE2命令を使えるようにするには どうすればいいのでしょうか? .686/.MMX/.XMMは指定しています。
アセンブラ…ヾ(゚∀゚)ノ" フォーウ!!
211 :
207 :2005/06/13(月) 10:29:42
日々、このスレのレベルが低下してるな
213 :
171 :2005/06/13(月) 13:36:15
ふと、思ったが Opteron は HyperThreading を実装してないけど、 pause 命令は有効に働くんだろうか? nop 使用するよりもお徳なのかわからん。 AMD マニュアルにも載ってないし...うーむ、謎だ。
214 :
デフォルトの名無しさん :2005/06/16(木) 22:30:14
215 :
エルデス・モルデル :2005/06/16(木) 22:44:49
>>214 3冊も出てるってことは、売れてるってことだな
グチるより、儲けたモン勝ちか、、、
217 :
デフォルトの名無しさん :2005/06/17(金) 18:37:08
>>216 1冊目は引っかかった初心者が結構いたけど、2冊目は発売直後に内容のひどさが話題になったから、
あんまり売れてないよ。3冊目は2冊目と同じ内容で他社から出して売ろうという魂胆みたいだね。
そういえば、2冊目は、『なぜか』yahooのセールスランキング集計書店では異常なまでに売れていたらしい。
売れる本ってのは二つに分かれる。 良い本で話題になる本か、 悪い本で話題になる本だ。 腐ってる本でも、腐り度合いによっては話題となり売れるのさ
219 :
デフォルトの名無しさん :2005/06/17(金) 21:15:48
MIPSにおいて、 キーボードから整数を10個読み取って配列に格納する方法を教えてください。 宜しく御願いします。
>>218 それは言えてる。名前は言えないが、某○比○とか。
いまどきの って Kやらアプリ改造入門のためだけなら使える?
無理矢理使おうとすれば全然使えないとも言い切れないと思える気もしないでもないかもしれない。
223 :
219 :2005/06/18(土) 06:24:10
あげ
悪いところを全部指摘できるようになればかなりの実力です!・・・とか 厳しいな
>>221 アマゾンのレビューを見れば分かると思うが、間違いが多すぎて全然使えない。
そもそも、クラッカーやゲームの解析やってる人達からゴミ扱いされている本だよ。
「クラッカー・プログラム大全」とか「解析魔法少女美咲ちゃん」とかの、
まともな本を買った方が良い。他には「はじめて読む8086」とか。
それと、「Digital Travesia」という有名解析系サイトも要チェックかと。
どこかにnasmのドキュメントの日本語版ってないの?
229 :
227 :2005/06/18(土) 19:06:18
訳っていっても「ELF Object Format」 が「小妖精オブジェクト・フォーマット」 になってるような中途半端な段階のもの。 探せばどっかにもっとマシなものがありそうな気はする。
231 :
226 :2005/06/18(土) 19:12:38
ちょっと酷いな
あれって機械翻訳かけただけじゃなかったっけ?
233 :
227 :2005/06/18(土) 21:29:35
>>232 いや、少しづつ手を加えていた。
だけどこれに関してはまだほとんど手を加えてない段階だったと思う。
完成まで至ったものは少なからずいい品質のものがあった。
英語はスラングさえなければいい訳が出来る 英と米でスラングも違うから書いた人の出身地まで考慮して 訳を進めるなんて芸当はできない
次スレのスレタイは アセンブラ…ヽ(゚∀゚)ノフォーウ!! でおながいします。
俺コンパイラ用のアセンブラ書いてんだけど アドレッシングモードが超面倒臭い
そこでサボると、コンパイラのユーザから「アホなコードしか吐かない」って叩かれるよ。 頑張って最適なコードを吐くように作らなきゃ。
ア・ドレッシングモード
>>213 どうせなら、Opteron(AMD64)専用のアプリとして PAUSE なんか使わずに NOP 使っちゃえ!(w
IA-32の話ですが、 どのCPU製品がCPUIDの0x80000002〜0x80000004に対応しているのかの一 覧表ってないもんでしょうか。
243 :
デフォルトの名無しさん :2005/07/07(木) 04:40:43
NASMを使ってLinuxでアセンブラプログラミングしたいんですが
何かいい入門書orページありませんか?
ttp://www.nk.rim.or.jp/~jun/lxasm/asm00.html ↑は初心者向きとは思えません。。。
hello,worldをネットを見ながら打ち込んで動作させたのですが
命令各所が意味不明です
javaなら実用レベルなんですが。。。
dosのアセンブラ入門ページは見かけるのですがlinuxの物となると
見つかりません、お願いします。
z80のアセンブラ関連で、一番イイよ!っていう推薦書みたいなのありませんか? (できればまだ絶版になってない本で)
247 :
デフォルトの名無しさん :2005/07/07(木) 11:54:25
C=A×Bのアセンブラのプログラムを教えてください
>>247 push a
mul a, b
mov c, a
pop a
ld r1 = [A] ld r2 = [B] mul r3 = r1,r2 st [C] = r0
>>247 249の抽象コードで意味はわかると思うけど、3行目はほとんどのASMで
mul r2,r1 でr1=r2*r1という動作になる。3つのレジスタを同時に触るASMはあまりない。
4行目はもちろんその結果のレジスタを変数Cに入れるのだから、st [C]=r1ね。
251 :
249 :2005/07/07(木) 15:49:37
ああっ、ほんとだ。間違えてしまったorz
結果レジスタを別指定できるCPUなんて珍しくないと思うが ARMとか
.global _main _main: mov.w r6,@-r7 mov.w r7,r6 mov.w #.LC0,r2 mov.w r2,@-r7 jsr @_printf adds #2,r7 sub.w r2,r2 mov.w r2,r0 mov.w @r7+,r6 rts
アセンブリニングするには、何が必要ですか。
まず脳みそ。
アセンブラって難しそうだけど、 mlb nba,abs elt trf,kgb msn co,ltd みたいなかんじですね?
>>258 2行目と3行目をひねったつもりだろうがつまらん。
きみはまずN88 BASICから始めたまえ。
ご、ごごごごめんなさい
ゴゴゴゴゴゴゴゴゴゴゴゴゴ・・・
あれ、86系って(e)cx=0のときにrep movsb とかやると 16or32bitの最大回数転送じゃなくて何もしないんだっけ? 確かcx(ecx)=0でloop だと、 16or32bitの最大数ループしたよなあ。
>>262 記憶違いだろ。
「REPプレフィックスがストリング命令に指定されたとき、ECXが0だとストリング命令は実行されない」
とちゃんと書いてあったぞ?
いやそういう意味。 後半はloop命令で回したらってこと。 xor ecx,ecx lp1: movsb loop lp1
>>264 そりゃぁ、loopニモニックに到達する前にループから脱出することはできないからだね。
スタックって難しいね pushとpopがかみあわない
先入れ先出しを守っていればいいはずだけど。 それにしても、関数を何回も呼び出したり再帰したりできるんだから スタックというデータ構造はすごいな。
先入れ先出しはキューだよ。 スタックは先入れ後出し。 push R1 push R2 ・・・ pop R1 pop R2 ってやったらR1とR2が入れ替わって戻っちゃうよ。
間違えました。スマソ
func: pop ax dec ax push ax ret
これが噂のデクリメント関数。
これ最強。 func: mov 4(%esp), %eax dec (%eax) ret
ていうか、デクリメントするのを関数にしようとするのが人間国宝的発想だな。
>>274 >
>>272 のやつはよくわかんね
引数に変数のポインタを渡して、その内容を-1してる。
(ポインタサイズを32bitとして)
文法がAT&T形式なんで、Intel形式のsrcとdstを逆に考えればいい。
(その他のアドレッシングの書き方はGoogleさんに聞くのだ)
へぇ〜
すごいすごい で?
278 :
デフォルトの名無しさん :2005/07/16(土) 05:45:05
質問なのですが、MLでは何でINVOKEで前方参照ができないのでしょうか? INVOKE以外の命令ではみなできるみたいなんですが・・・
279 :
デフォルトの名無しさん :2005/07/16(土) 15:46:49
アセンブリ言語の教科書
http://ruffnex.oc.to/kenji/bkasm/ NASM(The Netwide Assembler)やGAS(GNU Assembler)といったアセンブラを利用して、
Windows、Linuxアプリケーションの作成からブートセクタ関連のプログラミング、
そしてネットワークを扱ったアセンブラプログラミングまで幅広い内容を解説。
本書は、C言語など各種のプログラミング経験のある方はもちろん、
プログラミング知識の浅い初心者の方にも対応できるよう、
アセンブラの基礎から具体的な解説をした、純粋なアセンブリ言語の技術解説書である。
間違って
>>214 のクズ本を買う初心者がいそう・・・
初心者の人は役に立たない類似本に注意しましょう。
YASM
ttp://www.tortall.net/projects/yasm/ * AMD64 support
* NASM の文法も使用可能
* DJGPPで使われる COFF オブジェクト生成可能
* ELF32 と ELF64 オブジェクト生成可能
* 以下のプラットフォームに対応
* UNIX and compatibles (FreeBSD and Linux tested, GNU configure based autoconfiguration)
* DOS (using DJGPP)
* Windows (using Visual C++ or CygWin).
「今日は体調が悪いので仕事をYASM」
>>279 hack & krack so on... と書かれてるのが非常に不安
何でアセンブラはクラック系の本が多いんだろうね?
「真面目なアセンブラ」キボンヌ
>>283 目次見てもその発言か?
さすがにクラックばっかの内容じゃないだろ
それとも一行でもクラックのやり方書いてあったらアングラ本なのか
>>284 副題にそういう文字列を入れちゃうセンスが俺の不安をかき立てるんだよ
「これは厨房向けです」と帯に書いてあったら疑って掛かるだろ、普通
それに、Hack と Krack の区別が付いてないのも不安だな 今時こんな人が居るんだね 確かに目次はマトモそうなんで、期待はしてるよ
>>286 意図的なものだと思う。
本来区別できないものだと思うし、
無理に分離しようとするほうが不自然。
というか、単純にその手の単語をちりばめておくと売れるからだろう。 帯などは、著者ではなく出版社でつけているだろうし。
289 :
デフォルトの名無しさん :2005/07/17(日) 12:24:29
>>286 出版社をよくみろよな。それだけですべて説明がつくよ。
それにこの著者の前作のTCP/IPの本も
やたらハックだのクラックだの煽られてた割には
内容がちゃんとしててなかなか良かったぞ。
この本も別の出版社から出してればもっとうまい宣伝文句が使われただろうに。
すまん、ageちまった。sage
本来分離できないものだと「思う」 バカが「思った」ところで意味ない。 バカは黙って引っ込んでろよ。
自分の考えと合わなかったら即全否定というのはよろしくないよ
誰の、何に対して「よろしくない」んだか。
ルサンチマン君がきたぞー
crack だな。
krack とも言うんだよ。ワールドカップの時に korea が corea だったのと同じレベルだが。
俺は Krack = ソフトウェアの解析、リバースエンジニアリングといった行為 Crack = サーバへの侵入、バックドアを仕込む、といった違法な行為 Hack = コンピュータについて深い部分まで習得すること という認識なのだが、ぶっちゃけあんまり知らない。 詳しく教えてエロイ人。
298 :
デフォルトの名無しさん :2005/07/17(日) 17:48:03
K と C はコピープロテクトを破ったり、データを改ざんしたり、セキュリティホールを突いたり、 悪意ある解析・改変・侵入。K はより厨房用語なだけ。
試しにMASMでベクトルを正規化する関数を作ってみたんですけど、 同じようなコードを書いてるにも関わらず、コンパイラが吐き出した関数 の方が10倍以上早いのは何ででしょう・・・。orz というか、FPUを使う命令を一回でも使うと遅くなります。
>>287 >本来区別できないものだと思うし、
明確な区別があるのに?
メモリへのアクセスが一切ない俺のコードより 普通にアクセスしてるコンパイラのコードの方が速い。 なぜら?
スパゲッティ
スパゲッチュー
305 :
300 :2005/07/17(日) 23:26:24
インラインで書くと同じくらいの速度になるんだけど、なんでだろう。
コンパイラが勝手にインライン展開してるだけじゃ
307 :
300 :2005/07/18(月) 00:16:39
やっぱりインラインにしても、速度は変わらなかった・・・orz 納得いかないけど、アセンブラで書くのは諦めるしかないか。
>>301 明確とはとてもいえないように思う。
観念的なレベルでは定義されていても、
現実の事例では判別し難い場面は多い。
昔、ハッカーってのはPCの知識が豊富な奴を指したんだっけか。
ハッカーってのはMITの寮の屋根の上に車あげちゃうような奴のこと。
そんでもって缶のサクマドロップでは一番不人気なんだよな。
それは薄荷。
>>309 他人のウェブサイトを勝手に書き換えるのは Hack (少なくともHackの一種)だと思う。
そのサイトに書かれている違いをどのように捉えるかという点で君は表層しか見ていない。
「ハッカーはものをつくります。クラッカーは壊します。」
サーバーに侵入してデータを破壊するのは確かに破壊行為だろうが、
テクニックを作り出すという点では創作行為だ。
もちろん、単に既存のスクリプトを使うだけといった創作的でない行為はHackじゃないと思うよ。
>>302 コンパイラにアセンブルリスト出力させて読んで自分で調べろ。
多分おまいの5倍くらい頭のいいコードを
コンパイラ様は出力なさっておる。
頭のいいコンパイラ様が出力なさるコードを読むことが
アセンブラ学習の近道じゃないかな。
ははぁ〜コンパイラ様ばんざ〜い!
自分の書いたasmコードがコンパイラの吐き出したコードより遅い香具師へ。 普通そんなもんだよ。そこであきらめるか食い下がるかだ。 はるかに上は存在する。まあガンガレ。
>>302 メモリアクセスよりもとんでもないネックがあるから
>>314 いや、それは君が思ってるだけだよ。ハックはもっと日常的な物だ。
これ以上はスレ違いだし、長くなりそうなので、自分で研鑽を積んで欲しい。
Fuck
「ちょっと弄ったらうまくいくようになっちまったよ。はは」 という程度の謙遜を伴ったのがhack 「どうだい俺様の仕事は。このくらい朝飯前さ」 とか言い出したらハッカーとは言わない
そうですねwwwwwwwwっうぇっwwwwwwwwwww
323 :
デフォルトの名無しさん :2005/07/18(月) 23:36:50
ハッカーとクラッカーの違いは、ちょうど音楽のジャンルにたとえることができる。 ロック と ロックアンドロール メタル と デスメタル 演歌 と J-POP こんなものは、興味のない人からみれば皆一緒だ。 ただギャンギャンエレキギターが鳴っていて、不平不満を叫んでいるだけだったり、 誰も彼も同じような声で、同じコード進行の曲を歌っているようなものだ。
324 :
デフォルトの名無しさん :2005/07/18(月) 23:38:21
だが、興味のある人からすれば 「それらは明確な違いがある」と主張するだろう。 それと同じことだ。
カエルとケロヨンはちがう まで読んだ
>>279 のバナーにあるhack & krack so on...だけで、
ここまで盛り上がれるマ板住人に萌え。もまいら最高〜。
でもスレ違いなので、この辺りで軌道修正してくれ。
カエルとケロヨンの違いをアセンブラで表現してくれ
カエル ret ケロヨン retf
>>300 氏のコードに興味がある。
10倍って、別のところに原因がある気がする。
331 :
デフォルトの名無しさん :2005/07/20(水) 20:49:27
カエル push ケロヨン pop
モグラとモグタンだとどうなる?
モグラ smsw モグタン cpuid
>>272 func:
movl 4(%esp) , %eax
decl (%eax)
ret
じゃだめじゃなかったっけ?
>>334 確かに
>>272 のままではだめだ。
>>334 でもいいが、以下の変更だけでもいい。
dec (%eax) → decl (%eax)
>>330 今日が発売日だ。(都市部の大きな)本屋行ってみれば?
call $
>>336 今日ゲットできたよ。
ここ最近橋本の悪書ばっかりみてきたからかもしれんが、
本当にちゃんとしたアセンブラ本ですげー良かったよ。
>>337 スタック使い切って、あぼーんでつね
こんな反応で桶?
340 :
デフォルトの名無しさん :2005/07/24(日) 17:39:05
VCのインラインアセンブラでmovq xmm0, [esi] って書いたら アセンブルできなかったよ。 qword ptr が必要みたい。
342 :
デフォルトの名無しさん :2005/07/26(火) 17:38:21
LED点灯プログラムの超基本です アセンブラ初心者のボキに教えて下さい。 .cpu 300ha .section prog1,code,locate=h'000000 p1dr .equ h'ffffc2 p1ddr .equ h'ffffc0 .section rom,code,locate=h'000100 mov.l #h'ffff00,er7 mov.b #h'ff,r0l mov.b r0l,@p1ddr mov.b #b'10101100,r0l mov.b r0l,@p1dr loop: jmp @loop .end mov.b #h'ff,r0l これは出力用設定データらしいのですが、 なぜ#h'ffを使うのですか?
>>342 それはアセンブラの問題と言うよりは
CPU内蔵I/O、つまりハードウェアの問題。
電気電子板で聞いたほうがいいよ。
どこで聞こうがハード固有の仕様など答えられん
答えられないなら反応しなくていいです
346 :
デフォルトの名無しさん :2005/07/27(水) 01:10:14
.| | | | | | | | | | || | | .| | | レ | | | | | J || | | ∩___∩ | | | J | | | し || | | | ノ\ ,_ ヽ .| レ | | レ| || J | / ●゛ ● | .J し | | || J | ∪ ( _●_) ミ .| し J| 彡、 |∪| | .J レ / ∩ノ ⊃ ヽ ( \ / _ノ | | \ " / | | \ / ̄ ̄ ̄ /  ̄ ̄ ̄ ̄
>>342 石はH8っぽいね。そうだとすると、P1DDRの初期値(リセット直後の値)は00で、DDRの
bitが0であるDRのbitは入力になる、とハードで決まってるの。(ユーザーズマニュアル参照)
だから初期化後にDDRにFFhを書くことでDRの全bitを出力に設定しているわけ。
そうしないとDRに何か書いてもその値が外に出ていかないから。
ちなみにDRにつながってるLEDは、0の所が光る回路になっていることが多いよ。
頭の、mov h'ffff00,ER7 は、「スタックポインタを初期化する」命令なので、このプログラムに
限って言えば無くても動く。(callとか使ってないから)
351 :
orz :2005/07/28(木) 15:38:37
俺、丁寧に答えてあげようと思っていろいろ資料しらべて、 長文の返事をオフラインで書いていたんだけど、 >答えられないなら反応しなくていいです これ見てせっかくの長文Upする気無くして削除した。 同一人物じゃないかもしれんけどね、 とにかくヤル気なくした。
ヤル気を無くした時は山芋に限るぜ
>>354 消化を助け、身体の抵抗力を高め、気力を増し、筋肉を強めるという働きをします
>>355 アホか。単に消化がいいので、体内で素早くブドウ糖に消化吸収されて
脳の代謝が良くなるってだけの話。
(0w0)ウェーイ
>>356 大根とかに入ってる消化酵素アンナミラーズが含まれてるので
消化がいい というより、消化そのものを助けるのです
あと、これは熱を加えると壊れちゃうので生で食うのが良いです。
大根卸しを山芋に加えて消化酵素2倍、さらに普段より2倍高くジャンプ
さらに3杯おかわりすることにより
アンナミラーズ? ネタナノカマジナノカコピペナノカ…
アンミラーズを最初に思い浮かべた俺を笑え
アミラーゼのことですかね。 アンミラもだいぶ店舗が減って、さびしいもんだ。
あと、血糖値を下げるから糖尿にもけっとう効果あるぞ ↑血糖と結構をかけてるんだ。 山芋だけにな。 うへへ
363 :
353 :2005/07/30(土) 23:54:09
俺の意図が伝わるためには 山芋じゃなくてむしろスッポンとでも書くべきだったのか… まぁ結果オーライって事でひとつ。
364 :
デフォルトの名無しさん :2005/07/31(日) 06:33:23
>>279 の本、読んだ人、感想とかもっと詳しく教えて。
この作者のHP見てると、なにやら所々おかしなことが書いてあって「本当にわかっとんのかコイツ?」という感じなんだけど?
いまさら16ビットやBIOS使用が多いのが気になる。ネタ(知識?)があまりないのでむりやりページを埋めたのか。
アミラーゼのとこはジアスターゼでしょ
>>365 確かに苦沙弥っちはジアスターゼ大好きっ子だったが
今じゃジアスターゼもアミラーゼと呼ぶのだ
お前ら博識だな
368 :
デフォルトの名無しさん :2005/07/31(日) 20:53:49
u○○○は駄目だろ。何を勘違いしたのか完全に思い上がっている。 取り巻き連中相手にのぼせちゃっているしな。 あんな内容のことを自慢げに話してもねぇ。。。。w 所詮はその程度ということを証明している。
unko?
371 :
デフォルトの名無しさん :2005/07/31(日) 21:11:58
>>369 お前誰に話してんの?
言ってることも意味不明だし。
>>371 アンミラーズってアンナミラーズのこと?
x = 100 - x; みたいなコードってどう書くのが速いかな? sub eax, 100; xor eax, 0xffffffff; inc eax; みたいなの考えたけど…
neg eax
neg eax add eax,100
377 :
374 :2005/08/01(月) 16:04:28
そうか、negってそういう風に使うんだ。 ありがとう。
幼稚園児でもできる式の変形なんだが・・・
今の幼稚園児はどれだけレベル高いんだ
いや、アセンブラだから低レベルだ
山田君座布団全部持ってって
山田君今時の幼稚園児連れて来て(;´Д`)ハアハア
あやふやなので、オーバーフローフラグについてまじめな質問します。 例えば、以下のコードがあったとします。 mov al,0 sub al,80 これは、0 - 80(-128)を表しているので 0 - 80 = 0 - (-128) = +128となり alは-128から127までの範囲までしか表せないので結果の+128はオーバーフロー という意味でよいでしょうか? "プログラミングの力を引き出す本"には、引き算は足し算にしてから計算すると書いてあったので -(-128)の部分の2の補数をとると-128(10000000)になります。 つまり 0 - 80 = 0 - (-128) = 0 + (- 128) = -128になりオーバーフローフラグが 立たないことになるんですが。 このへんが意味が分からないです。 後、キャリーフラグは桁が上がったらセットされるって書いてあるけど 0101 + 0100 は1001なのでこれはキャリーフラグがセットされるんでしょうか?
>>384 おいおい、負数の減算は加算だぞ。
> つまり 0 - 80 = 0 - (-128) = 0 + (- 128) = -128になりオーバーフローフラグが
じゃなくて、 ~~~~ ~~~~~
0 - 80H = 0 - (-128) = 0 + 128 = +128
最初の式と一緒だよ。
CFはレジスタの幅を超える桁上がり・桁下がりの発生を意味してるから、
個々bitの桁上がりとは関係ない。
そういえば Z80には half carryフラグがあったな。
>>385 ありがとう。CFについては納得できました。
でも、-1の2の補数(-(-1))とったら1です。
負数の引き算って2の補数をとって足し算ってだめなの?
-128でやると1000 0000から反転して0111 1111
+1して1000 0000になるから結局 -128になってしまう
からなんか変だ。
>>387 それは、2の補数を取ったあとのビット列を、
無理矢理符号付き10進数で見るという間違いを犯してるから。
「2の補数を取る」というのは符号付き数と符号なし数の変換だから、
-128 = 80H の2の補数とったあとは、符号なし数として、つまり80H = 128として計算しないといけない。
(この過程で、実行する演算が減算から加算に変化してることを忘れないように)
10000000Bは2の補数とってもたまたま10000000Bだけど、
ビット列が同じでも値の意味は全く違う。
このへんが符号付き整数の一番ややこしいところではあるけどね。
>>388 > 「2の補数を取る」というのは符号付き数と符号なし数の変換だから、
この表現はちょっとまずいか・・・しかし、いまいちいい説明を思いつかない/思い出せない。
>388 どうもありがとう。 その説明(符号付き整数と符号なし整数の変換)で結構すっきりしました。 フラグの勉強はこれくらいにして、次に進みます。
なんというか、2chで質問者と回答者が共に親切にやりとりを しているのを久しぶりに見て、なぜだか涙が出そうになった
394 :
全米 :2005/08/08(月) 16:51:59
はいはいないたないた
質問男?
>>391 安心汁。
質問はひとつだが
おまいには2ちゃんと蛆TVがついてるぞ。
397 :
364 :2005/08/13(土) 05:49:15
>>368 できれば直接的な意見が聞きたい。
完全匿名でないと本音が出せないと思う。
>具体的に
例えばこれ。
>
ttp://ruffnex.oc.to/kenji/crackme/reverse_engineering.html この中でパックしたプログラムのアンパックを行っているが、これは本当のアンパックではない。
インポートテーブルの再構成をバイナリエディタで行っているが、パッカーが作った(ヘッダで明示された)インポートテーブルは最低限のものだから、オリジナルのインポートテーブルも書き換えないとダメ。
そうでないとWinXPのバージョンやモジュール構成がちょっと変わっただけで動作しなくなる。Win9xの場合はデバッグプロセスでクリエートされるとAPIフックされるのでこの再構成法では全く動作しない。
そもそもUPXがルックアップテーブルを削除してしまうので再構成が必要になるわけで、ルックアップテーブルがあればそんなことをする必要はないわけなのだが、そのことの特殊性についても触れていない。
PEフォーマットがよくわかってないとしか思えない。
PEについてはリンクがあるが、アレなサイトで間違いだらけ。
暗号化の部分も色々変。
>フリーズさせるのはまずいので、あらかじめ復号化されたデータのチェックサムを取っておきます。そしてそのチェックサムと比較して正しければ、99%の確立で正しいパスワードが入力されたと判断して、復号化したプログラムを実行します。
せっかく正解かどうか容易にわからないように作っているのに、チェックサムで判断してしまえば台無し。フリーズさせるのが正解。
>パスワードを探しあてるには、アルゴリズムを再現して、総当りでキーと平文を探すしかありません
総当たりの場合、別にアルゴリズムは再現しなくてもSDKレベルプログラミングの基本ができればOK。
>この方法は、パスワード入力以後のプログラムをデータとしてマシン語で持っておかなければならないので、大きなプログラムだとまず実用的ではありません。
この方法に関しては、フリーズの時点で実用的には問題ありだが、パッカーと同様の技術なので、大きなプログラムであってもそのこと自体に問題はない。nasmとかでincbinとかもできるし。
398 :
デフォルトの名無しさん :2005/08/13(土) 05:52:09
>
ttp://ruffnex.oc.to/kenji/text/api_hook/ >同じIATでも、前回のはPEフォーマットとして構成されたバイナリデータファイルのIATを変更したわけですが、
>今回のは、すでにメモリに読み込まれた状態でのIATのアドレスを取得しているので、同じインポートアドレステーブルであることに変わりはありませんが、微妙に違うかもしれないです。
>いや、インポートアドレステーブルであることに変わりはないですけどね、
>でもメモリに読み込まれた状態とじゃちょっと違う気がしなくもないような...あー、なんかややこしくなってきたので、この辺で止めときます(^^;。
PEがよくわかっていないとしか思えない。
そしてここから取得できるサンプルプログラム
>
ttp://ruffnex.oc.to/kenji/text/api_hook/API_Hook.zip この中の
>API_HOOK.CPP
で、
>// アドレスが一致したので、インポートセクションのアドレスを書き換える
と書いてある辺り。
システムDLLの事を全く考慮していないし、ちょっと変。
VirtualProtect()を使っているが、システムDLLには通用しないのでそれらをよけないと無駄。
逆にもしも通用した場合、あらゆるプロセスが共有しているわけだからフックDLLが入り込んでいないプロセスが死ぬ。少なくともWin98ではライト可能セクションにインポートテーブルを置いているのがあるから確実に死ぬ。
次の行でWriteProcessMemory()を使っているが無意味。ただ代入すべき。というかWriteProcessMemory(GetCurrentProcess())ならそもそもVirtualProtect()は必要ないわけだが。
このソースには他にもPFNMESSAGEBOXWの定義などバグあり。
まだあるけど、もっと書く?
まあ、扱っている内容自体は悪くないんだけどね。
>>398 >API_HOOK.CPP
の該当部分については、別段変なことはしてないというか、
AdvancedWindowsに登場する定番コード。
代入ではなくWriteProcessMemory()を使ってるのは、
WPM()ならPAGE_READONLYが付いてもWPM自信が属性書き換えて
データを書き込むからだそうな(そういう意味ではVirtualProtect()呼ぶのは無意味)。
あと、プロセスメモリ内にある以上はシステムDLLだろうが何だろうが書き換えはできるし、
(そうでなきゃKERNEL32.DLLにブレークポイントしかけられない)
copy on writeでそのプロセス独自のコピーが作られるから、他プロセスには影響しない。
(このへんもAdvancedWindowsに記載あり)
件の本については先週実物みてきたけど、
あの程度の内容でハードカバーって時点でネタ確定、ざっとながめただけで置いてきた。
金もってる初心者なら買ってもいいんじゃない? いい勉強だと思うよ'`,、'`,、('∀`) '`,、'`,、
アセンブリというのは シェーダアセンブリの方か?チマチマした方か?
ドトネトのオブジェクトにきまってるジャマイカ
>>399 要約すると「『いまどきの…』とどっこいどっこい」でFA?
いくら何でもそこまで酷くはないw 399と同じく「金持ってる初心者」にはいいかと。 『いまどき〜』は、アセンブリ初心者は無論、誰にとっても糞
橋本和明のアセンブラ本は内容がひどすぎるからね・・・ パソゲー解析スレでも「買ったら後悔間違いなし」とか言われてるし。
金を持っている初心者だから買ってみた。 ていうかそれほど高くないし、ページ数も思ったより多くない。 プログラミングやるのは初めてだけど、予備知識が少しあれば 普通に読み進めていける平易な内容。 逆に言えばこのスレの人には物足りないかもしれない。 現在、序盤のdebugコマンドを使って命令の動きを見ていくところ
まだ序盤かよ
407 :
デフォルトの名無しさん :2005/08/16(火) 15:40:56
アセンブリ言語はストイックですか?
エロティックです
A センズリ言語って?w
それはイカクサイックです
イカッセル
412 :
デフォルトの名無しさん :2005/08/20(土) 08:02:19
621 名前:ppp1826.va-east.my-users.ne.jp 投稿日:2005/08/20(土) 07:53:27 ID:eLPWq2Y20
お願いします・・・
【板名*】 PC等->プログラム
【スレ名*】 アセンブラ… (´・∀・`)ヘー
【スレのURL*】
http://pc8.2ch.net/test/read.cgi/tech/1101390110/l5 【名前欄】 397,398
【メール欄】
【本文*】↓
>>399 >>代入ではなくWriteProcessMemory()を使ってるのは、WPM()ならPAGE_READONLYが付いてもWPM自信が属性書き換えてデータを書き込むからだそうな(そういう意味ではVirtualProtect()呼ぶのは無意味)。
だからそう書いてるんだが。>>自信
>>あと、プロセスメモリ内にある以上はシステムDLLだろうが何だろうが書き換えはできるし、
本当?そりゃ悪かった。今XPが使えないんで試せないんだが、少なくともWin98ではシステムDLL(のリードオンリー属性変更)にVirtualProtect()は通用しない。
>>そうでなきゃKERNEL32.DLLにブレークポイントしかけられない
だからWin98では仕掛けられないわな。
まあDRxならできるが。
>>copy on writeでそのプロセス独自のコピーが作られるから、他プロセスには影響しない。
本当?そりゃ悪かった。今XPが使えないんで試せないんだが、少なくともWin98では共有されている。
例えばKERNEL32やUSER32は、データやインポートテーブルは共有セクション上に置かれているので、例えプロセスごとにコピーが作られてもデータは共有される。
すなわちcopy on writeはコード(とかリソース等の)部分だけ、というわけだが。
Win98で共有されててWinXPで共有されていないって事は無いと思ったんだが、違うんか?
>XPが使えないんで試せないんだが 試せよw それで全部解決するだろ
>>412 > >>そうでなきゃKERNEL32.DLLにブレークポイントしかけられない
> だからWin98では仕掛けられないわな。
ちょっと資料あさってみたけど、Win98だと0x80000000〜0xBFFFFFFFは全プロセス共有なのか。
とすると、ブレークポイントはしかけたらおかしなことになりそうだな。しらんかった。
ちなみに2000だと0x70000000あたりにロードされて完全にプロセス固有なので、
どうにでもできるし、なにしたって自プロセスにしか影響しない。
> 例えばKERNEL32やUSER32は、データやインポートテーブルは共有セクション上に置かれているので、
> 例えプロセスごとにコピーが作られてもデータは共有される。
データはともかく、IATは(KERNEL32等を)インポートする側が持ってるエリアだから関係なくないか?
あと、上記の通り2000(というかNT系一般)はシステムDLLを共有エリアに置かないので、
システムDLLのデータはプロセス間で共有されない。
Adv(ry
nasmんのアセンブラ環境を集めるがしんどい… とりあえず本体はそろった!サンプル漁ってプログラミングだ! サンプルが無いよ… 挫折しそうです。
なにがしたいのかわからんけど、 勉強したいだけなら、適当なEXE逆アセンブルして眺めてみれば?
Linuxならasmutilsがサンプルに使えるけど、同様のやつがWin32用にないかな…
Windowsならとりあえずインラインアセンブラで一通りのこと覚えて、次に関数丸ごとアセンブラで書く程度で充分じゃないか?
以前このスレで「アセンブラはコンパイラの一種」 と言ったらなんかめっちゃ叩かれたんだけど、 オライリーの何とかって本を立ち読みしたら同じ事が書いてあったぞバカどもが
【アセンブラはコンパイラの一種】の検索 PC等 [プログラム] アセンブラ… (0w0)ウェーイ 421 PC等 [プログラム] 推薦図書/必読書のためのスレッド PART 19 767 おかしいなぁ、このスレは過去スレも全て取得済みのはずなんだが……
正確になんて言ったかまで覚えてない。 とにかくアセンブラはコンパイラだという意味のことを言った。
>>423 なんだ、暇だから祭りを誘発したかったんじゃないのか。
2chで学問上の分類なんて議論しても意味ないから
いいネタ振りだと思ったけど。
ヘルメットが帽子かどうかみたいなもんだな
コンパイラってのは "C++ Compiler" とかってかかれんだよな。
C++に限らず星の数ほどある言語でも "LANG Compiler" だ。
でもアセンブラだけは "x86 Assembler" であって、"x86 Compiler"とは呼ばない。
オライリーの件も、「ある側面からみればアセンブラもコンパイラの一種といえなくもない」のような文が
脳内で"変換"されてできた例だろう。ふむ、そこまで高度な変換はコンパイルと言えなくもないね。
コンパイラとアセンブラには学問的な違いがあり、
世間的にも違いがあると認知されているから区別されるわけだが、
>>423 はそれを覆そうという。いやはや、まったく正気の沙汰とは思えない。
両方まとめてトランスレータだから似たようなもんだ
>>416 漏れもつい最近nasm使い始めたばっかりだけど、
アセンブラ環境なんてnasmとgcc (MinGW)を用意するだけじゃん。
gmakeもあったほうがいいかな。
nasmのサンプルだったら午後のこ〜だあたりはどうだろう。
Windows用のMakefileとnasm.cfgを流用させて貰ったから、
書き始めが凄く楽だったよ。
ほんとにまだ何も分からないレベルなら、最初はコンパイラの
アセンブリ出力を眺めることから始めたら?
gccなら -S -masm=intel で出せるよ。
ナイフはチェーンソーであるとの主張?
最近のコンパイラはムチャクチャな最適化をしかけてくるので予備知識なしにアセンブラ出力なんか読んだら余計混乱するぞ。
最適化しなきゃいーじゃん。
431 :
デフォルトの名無しさん :2005/08/26(金) 16:43:53
>>423 単にアセンブラは"アセンブラ"であって、"コンパイラ"じゃないってことじゃないの?
「俺はパナの"Walkman"使ってる」っつたら叩かれたのと一緒で。
どっちかと言うと、「漏れは布製の筆箱を使っている」と言うような違和感かと。
アセンブリ アセンブル アセンブラ 英語の比較級みたいだ
いや、全部英語だし。活用じゃなくて接尾辞だが。
>>432 パナのウォークマンはないけど、アセンブラはコンパイラの一種。
パナのポータブルプレーヤをウォークマンと言うことはあるけど、
アセンブラをコンパイラと言うことはほとんどない。
どこが一緒なの? まったく逆じゃん。
アセンブラとコンパイラは、人間が読みやすい言語を機械語に変換するという意味では大差ないが、 技術的な本質が全く異なるので、漠然とした違和感を覚える面々が多いのは全く当然。 「コンパイラの一種」ではなく、「トランスレータの一種」なら誰も文句言わないだろうけどね。 アセンブラのニーモニックは、基本的には1:1で機械語に対応していて、アセンブル行程も ニーモニックに相当する機械語を単純に組み立てるだけ。ニーモニックで記述されている内容を アセンブラが勝手に変更したりすることはありえない。 (原則として、だけど。実際にはアライメント調整や遅延分岐にpad入れたりすることはある) コンパイラは、コンパイラ言語で書かれた内容を機械語(または中間形式)に変更するが、 機械語での実現方法は1つではないので、アセンブラとは違ってさまざまな結果になりうる。 むしろ、いかに良質な機械語のコードを出力するかが歴史的に競われている(最適化と言う)。 この、入力に対して処理系が意味的な変更を加えて出力するか否か、という違いが、 アセンブル(組み立て)と、コンパイル(編集)の本質的な違い。 アセンブラの出力には創意工夫というのはありえないけど、 コンパイラのそれは芸術と言っても過言ではない。
マクロアセンブラはコンパイラだ。
コンパイラはアセンブラだ。
世の中には最適化アセンブラとか最適化リンカってのもあるからなー
その手の「最適化」はアセンブラ/コンパイラとは別の話だろ? 実行バイナリに対して行ってもいいわけで、ツールに属すると思うが。
>>437 ドラゴンブックの1.1の最初に
「コンパイラは、簡単にいうと、ある言語で書かれたプログラムを読み込んで、
それを等価な別の言語のプログラムに翻訳するプログラムである.」
とある。
アセンブラは、アセンブリ言語から機械語に翻訳するプログラムなので
コンパイラの一種である。
まぁ、そのあとでは
「コンパイラは、Fortranのような原始言語を、特定の計算機の機械語あるいは
アセンブリ言語へ翻訳するプログラムである、と一般に考えられている.」
とあるので、アセンブラをコンパイラと呼べば混乱するかも。
>>442 アセンブラは基本的に翻訳をしない。ただ表記を変えるだけ。
アセンブリ→2進数は立派な翻訳だろ・・
アセンブラはコンパイラだという結論が最初に出てるのに、 なにをゴタゴタしているのかね。
アセンブリ アセンブル アセンブラ この違いを分かっていない低学歴がいるぽw しかも、そんな香具師が本を出しちゃっているのが痛い
>>427 >gccなら -S -masm=intel で出せるよ。
nasmは受け付けない罠
>>436 ウォークマンはSONY製ヘッドホンステレオの商標である。
従って、パナのヘッドホンステレオはウォークマンではないし、そうとは呼ばない。
アセンブラはアセンブリ言語の翻訳系であって、コンパイラ言語の翻訳系であるコンパ
イラとは別物である。故に、アセンブラはコンパイラの一種ではない。
ひょっとして釣りか?
実際のコンパイラがそのような動作をするかどうかはさておき、
高級言語→(コンパイル)→アセンブリ言語→(アセンブル)→機械語
という流れが基本。
ハンドアセンブルとかハンドコンパイルをやった事のある香具師なら分かりそうだが。
アセンブリ言語と機械語は1:1で相互変換できる。 コンパイラ言語と機械語は1:1で相互変換できない。 実際の処理系は、実行ファイル作るための書式をやマクロを持ってるから 無条件に成立するわけではないけど、本質的な部分で全く違う。 ま、素人にはどうでもいい違いなのは確かだが。
本にコンパイラだって書いてあるんだからコンパイラだよ。 素人が知ったかぶったってもダメダメ。
> ウォークマンはSONY製ヘッドホンステレオの商標である。 > 従って、パナのヘッドホンステレオはウォークマンではないし、そうとは呼ばない。 ウォークマンではないが、そう呼ぶこともある。 それぐらいわかれよ世間知らず。ひょっとしてアホなの?
たとえ話で人を説得しようとするのは愚か者の所行である。 なぜなら、些細などうでもいい不適合部分を突っ込まれて、 議論がどうでもいい方向へ向かうから。
>>452 激しく同意。悪いのは
>>432 。
「些細などうでもいい不適合部分」ではなく
重要な不適合部分を突っ込んだ場合も、
例え話合戦に発展して議論が迷走していく。
>>449 SPARCとかのアセンブラには命令スケジューリングをするものがある。
だから、アセンブラだから一対一の相互変換が可能とは限らない。
らしいYO
455 :
デフォルトの名無しさん :2005/08/27(土) 01:58:44
○ 譬え話 △ 喩え話 × 例え話
>>454 ニーモニックレベルでは基本的に対応してるでしょ、そういう話。
実際の処理系・実装系の話をするなら、MIPSあたりも遅延スロットにNOPいれたりとかするし、
x86は違うニーモニックが同じ機械語だったりする(シノニム。左シフトSHL/SALとかね)。
言葉遊びがしたいのならそれでもいいけど、
物事の本質と実例の例外は区別しておかないと、実際のところ使い物にならないよ。
457 :
デフォルトの名無しさん :2005/08/27(土) 02:33:40
プロって単純なルーチンを書く時ってコンパイラなんかに任せておけんとばかりにアセンブリ言語で書いてしまうのですか?
そういうことをやるのは、暇な素人と、偏執狂と、OS書いてる人だけ。
459 :
デフォルトの名無しさん :2005/08/27(土) 02:51:48
変態だけですか。なるほど。
偏執狂は解るが、暇な素人と、OS書いてる人まで変態の範疇に入れるのはどうかと・・・
461 :
412 :2005/08/27(土) 06:29:09
>>399 XPで確認したよ。確かにアンタの言う通りだった。NT系はシステムDLLエリアが存在しないのね・・・
オレの知識が古かったようだ・・・ちゃんと確認しなかったオレの誤り。
ゴメン。そのあたり訂正させてくれ。
すなわち、API_HOOK.CPPのシステムDLLうんぬんに関しては、オレの書いたのは9xの場合に限る、ということで・・・
だから作者に責任はないわな。
ただ、他のところは間違ってないと思う。
>>414 >データはともかく、IATは(KERNEL32等を)インポートする側が持ってるエリアだから関係なくないか?
なぜか(PEヘッダ上)共有フラグがついている。どうも共有DLLとしてロードできるにはいくつか条件があるようで、例えば書き込み可能フラグがついているセクションは共有フラグも一緒につけないとロード失敗するみたい。
いいからAdvancedWindows嫁
ないないw
466 :
デフォルトの名無しさん :2005/08/27(土) 14:30:46
パンチに自分で穴あけたほうが速(ry
アセンブラ技術者は コンピュータ界を担う重要な人材であるのに このスレで見るレベルの低さは何事か? 技術立国日本は終わった。
「このスレで見る」からだよ
2ちゃんで業界のレベルを計ろうとするなよw
DAONE-
コンピュータ技術の中でも特に高度な専門知識が必要とされるアセンブラ に素人の初心者が興味を持ち書き込みをしている、このスレを見れば 技術立国日本の将来は明るいな。
ゲームのクラックには必須の知識だしな
プログラミングの本だと思って読んだらゲーム改造本でガッカリすることが多い。
箱入りの5000円ぐらいの本あったけどあれどうなの? 立ち読みできなくて買いあぐねてるんだけど
アセンブリ言語の教科書か あれは、
何だよ!
>>475 16bitプログラミングに異様にページ使ってるのが萎える
ま、かなりいい内容でつ
迷ってる奴多いみたいだし、ちょっと本気で立ち読みしてくるか。
>475 インラインアセンブラで最適化くらいしかしない漏れ的にはゴミだった。
そりゃ良かったな
インラインアセンブラは逆に最適化の妨げになるというのに…・・・ おまいレベルの最適化よりコンパイラに任せた方がずっと早いよw
まだこんなやついるんだw
コンパイラがあるからアセンブリプログラマはいらないと思う。
Cellのようにvector型が出来たら マジでインラインアセンブラいらねよな
インラインアセンブリの内容も込みで最適化してくれないの?
>>488 無理。インラインアセンブリのブロックで最適化がぶった切られる。
でもコンパイラの最適化より自分でやった方が速いなら使うべきだ。
>>482 は最適化の才能がないからあんなこと言ってるだけだし。
むしろインラインは、最適化をぶった切る為にあるんだろ? ハードウェアのタイミング取ったり、書き込み保障のウェイト取ったりな。
インラインアセンブリ記述を最適化するとかしないとか、喪前ら大丈夫か?
>>490 コンパイラが使ってくれない命令(SIMD系とか)を使うケースもあるな。
最近ではSIMD命令なんかでもIntrinsicsで扱えるコンパイラのほうが多い気がするけどな。 CELLもそんな感じらしいし。
はじめまして。今「アセンブリ言語の教科書」を読みながら アセンブリ言語の勉強をしている初心者なんですが、 アセンブラって自作が可能なんでしょうか?
自作可能じゃなきゃ、この世に存在せんだろ。
よーく考えよー
496 :
493 :2005/08/28(日) 22:11:02
レスありがとうございます。 コンパイラを作るときのように、字句解析などを行ったりするんでしょうか? それとも一行ずつ機械語に変換していくだけなんでしょうか? もし変なことを言ってたらすいません。
初心者杉
498 :
493 :2005/08/28(日) 22:56:41
ごめんなさい。 もう少し勉強してきます。
499 :
493 :2005/08/28(日) 23:30:13
「アセンブリ言語の教科書」にアセンブリ言語とマシン語の関係について書いていました。 何も調べずに質問して申し訳ありませんでした。 「アセンブリ言語の教科書を」を参考にもっと勉強しようと思います。 ご迷惑をおかけしました。
>>492 確かに最適なコードを吐いてくれはするだろうが、
それが期待するコードである保証は全く無い。
精度落としても高速化したい場合とかね。
>>500 いや、Intrinsicsって基本的に基本的に機械語命令と一対一で対応してるんだが。表記がCの関数になってるだけで。
そらびっくり
UCCのコーヒーは、もう少し糖分を最適化すべきだな。
くっそー505より面白い事を考えようとしたが無理だった
>>505 ふっ、価格優先パラメータ付けて最適化してるだろ。
509 :
デフォルトの名無しさん :2005/08/30(火) 21:49:00
アセンブラの勉強を趣味で始めてみたけどさっぱりわかんね これを使いこなせる人ってすごい変態だと思った
>>510 試してみれば?
GCCのインラインアセンブラは最適化の対象に成ってしまうが故に、
複雑な指定が必要。ウザい。
>>509 そう思うのは君がアセンブラを必要とする
状況になっていないから。
アセンブラはCより1000倍簡単な言語。
俺もレジスタの扱いが分からないよー Cとの一番の相違点というか どれ使うかは結構適当で良いのかな 中身は必ず戻さなきゃなのかな
516 :
509 :2005/08/31(水) 18:54:26
>>513 同じ初心者さん?なんか仲間がいると安心するわ。
俺は今「プログラミングの力を生み出す本」で勉強してるけども
gasそのものよりgdbが何言ってるのか全然わからなくて混乱してる
>>513 たとえばCALL命令で呼ばれたルーチンであれば、
RET命令で戻る時に元に(CALLで呼ばれた時点の状態に)戻しさえすれば、
どう使っても基本的には問題ない。
>>515 >>517 ありがとうございます
と言うことはサブルーチン最初に、そのサブルーチンで使うレジスタの値を全てpush(M+)し、
サブルーチン最後に全てpop(MR MC)しなおすわけですか、結構大変ですねぇ
>>516 ちょっ、おまっ!同じ本じゃないですか「インテルCPUのGNUユーザへ」って奴だよね
実際はVC使っているのだけど、本の環境と違って複雑なアセンブラを吐いてくれるので参ってるよ…
それと「はじめての8086」で勉強してるっす
>>518 よほどの心配性ならともかく、普通は全てのレジスタの値をCALLされる前の状態に戻す必要はない。
関数の前後で変えちゃまずいのってebx, esi, edi, ebp, espだっけ?
far jmpってどういう風に書くんだっけ? jmp far 0x3000:0x0 ってかんじ?
524 :
デフォルトの名無しさん :2005/09/02(金) 21:31:04
>>397-398 の人、まだいますか?
できればリバースエンジニアリングやAPIフックだけじゃなく
そのHPの他の内容についてももっといろいろと突っ込んで欲しいのですが。
かなり勉強になるので。
あ、専ブラ
526 :
デフォルトの名無しさん :2005/09/03(土) 04:20:06
レジスタないプロセッサもあるよ
527 :
461 :2005/09/03(土) 05:45:30
>>414 >データはともかく、IATは(KERNEL32等を)インポートする側が持ってるエリアだから関係なくないか?
あっ、IATはDLL上のやつだから。
例えばUSER32上でKERNEL32からのインポートとか、NT系の場合KERNEL32上でNTDLLからのそれとか。
それと
>WriteProcessMemory(GetCurrentProcess())ならそもそもVirtualProtect()は必要ない
と書いてしまったが、これも9x系のみの話だった。
NT系はやはりVirtualProtect()が必要。不覚・・・
というか、代入を推奨。(負け惜しみ)
>>461 おまえうざすぎ ノイズバラ撒いてないでAdvancedWindows熟読しとけ
だれかLoadLibraryを自前でかける人いませんか? サンプルか資料のありかキボン DLLを圧縮するタイプのツールは自己展開したあとで 似たようなことやってると思うんだが、どうやんのかワカンネ
>>529 LoadLibraryを自分で書くなんて面倒なことは普通やらないよ。
普通GetModuleHandleからkernel32.dll指定でGetProcAddressして、
LoadLibrary自身を持ってくるハズ。
自分でLoadLibrary相当の事をやる場合はPEフォーマットとかの知識が必要。
UPXのソースを読むのが早いかも。
UPXってLoadLibraryAとGetProcAddressはインポートしね?
>>530 返事thx
メモリ上のイメージをDLLとして機能するようにしたいのです。
>>531 自己展開したイメージはメモリのどこかにあるでしょ。
LoadLibrary使うためにはいったんファイルに書き出さないといけないけど、
UPXで圧縮したDLLはそういうことやっていないと思う。
メモリ上のイメージのアドレス解決をLoadLibraryで出来るなら
話は早いのだが…
>>532 CreateFileにFILE_FLAG_DELETE_ON_CLOSE付けてDLLを一時ファイルとして
作成する方法もある。
FILE_FLAG_DELETE_ON_CLOSEにGENERIC_READ, SHARE_READで
開いとけば一時ファイルをLoadLibraryできる。
一時ファイルをFreeLibraryした後にCloseHandleで閉じると勝手に削除される。
FILE_ATTRIBUTE_TEMPORARYもいいんじゃないか?
>>527 ああ、システムDLLがシステムDLLインポートする方の奴か。
(ユーザーモジュールがインポートする方かと思った)
まあAdvancedWindowsはほんとに良著なので、NT系でやるなら一読をお勧め。
高いけど値段なりの価値はある。
>>531 それは圧縮されてない外部のモジュールのインポート用かと。
>>532 LoadLibrary()はロードしたPEモジュールのハンドル(≒先頭アドレス)を返してるだけだから、
(実際は参照カウントの管理もやってるようなので厳密ではない)
きちんとPEの展開さえできるのなら、別段迷うようなことはないと思うけど。
PEの展開・構築法が分からないというのであれば、勉強しろとしか言えない。
遅レスだけど、「アセンブリ言語の教科書」眺めてきた。
デバッガで「本物の機械語」を実行させるってのはいい実例ではあるし、
記述も丁寧ではあるけど、時々おかしな日本語があったり、校正はいまいちかも。
何ぞのような悪書ではないけど、やっぱり金持ちにだけお勧めって感じ。
>>535 >PEの展開・構築法が分からないというのであれば、勉強しろ
UPXのソース眺めてみます。どうもでした。
537 :
デフォルトの名無しさん :2005/09/03(土) 22:24:48
あのーちょっと質問なんですが、 gdbってもしかして16bitや8bitのレジスタ(axとかal,ah)は見れないんでしょうか?
539 :
537 :2005/09/03(土) 22:59:36
やっぱりeaxしか見れないんですね。 ありがとうございました。
eaxが見えてればax, al, ahも見えてると言えるわけだが…
おまえはメモリダンプが見えればクラスのメンバ変数値がわかるのかと
レジスタに最適化された変数は、厄介。
>>534 FILE_ATTRIBUTE_TEMPORARYでもいいけど自動削除されない。
あと、どっちもTerminateThreadとかの強制終了ではファイル残っちゃうから、
完全性を求めるなら自分でメモリからロードするしかないかと。
>>541 パディングが入る可能性がある構造体と、レジスタを一緒くたにすんなよ。
eax と ax,al,ah の関係も知らないなんてど素人以下。
>>541 メモリダンプだけじゃ厳しいけど、アセンブルリストがあればクラスのメンバ変数も分かるよ。
ただ、ここでメンバ変数が話題に出てくる脈略は分からない。
そんなこともあろうかと思って漏れのPDAにはバイナリ値をdouble値に変換するプログラムを載せてあるぜ。 #勿論その逆もできるが。
541のボケっぷりと総ツッコミにワロタ >547 関数電卓に hex <-> float/double の変換機能があればいいのに。
>461や>541が自分の無能ぶりを公表するスレはここでつか
>>544 FILE_ATTRIBUTE_TEMPORARYとFILE_FLAG_DELETE_ON_CLOSEは組み合わせられるだろ。
強制終了の解決ではないが。
アセンブラを勉強しなくてはならなくなりました。 お勧めの本や勉強方法があったら教えていただけませんか?
>>552 ワンボードマイコンとクロス開発環境。
コレ最強。
アスキーからEX-80だかのワンボードマイコンのエミュレータがCDでついた書籍が出てなかったっけ?
「はじめての8086」が一番
アセンブラだけは、体で覚えないと身に付かない。
アセンブリやりすぎてCとかがわからなくなってきたおw
>>551 組み合わせてどうするの?
この方法はどのみち一度ファイルに吐くんだし。
559 :
:2005/09/06(火) 15:02:53
アセンブラとbrainfuckってどっちが難しい?
brainfuckは難しいんじゃなくてマンドクサイだけ。
アセンブラの方が簡単だよ
アセンブラの方が楽に一票。
つーか比べるなw
書き/読みにくさトーナメントでもやるか。 出場はアセンブラ、BrainF**k、Unlambda、WhiteSpace、他に何かある?
読みにくさと言ったら括弧だらけのLISP・・・と言ったら一部で怒られるな。 FORTHはその上を行くかな。
>>564 アセンブラとかBrainF*ckなんぞ普通の言語じゃん
WhiteSpaceはさすがにネタ言語だけどな
俺としては全力でprologを推すね。
C++のtemplate・・・
LISP の括弧はそれ程障壁にはならなかった むしろマクロが…
Z80を積んだシャープかカシオのポケコンで勉強が一番 入門には簡単で良いかな?
HQ9+を挫折した俺が最強だと思う。
MSNじゃない、MFS。ん?MFCだったっけ・・・あれ。
BrainF*ckスレできくべき擦れ違いですまんこだけど 手軽に遊べるBrainF*ck実装系紹介きぼん BrainF*ckが気軽とは思えないけど、、、
いい加減うざい
>>572 自分でインタプリタ書くのが一番手軽。
十数行で書けるから。
ttp://yosirin9.hp.infoseek.co.jp/tips/no2/tips_no2.htm これ見てCPUクロック計測ツール書いてみた。unix+gcc専用。
Boost使ってるけど、無ければ stdint.h で代替できるかも。
begin-base64 644 cpuclock.cc.gz
H4sICK7OHkMAA2NwdWNsb2NrLmNjAG1TS2/TQBC++1eMXEVKmpBHCxzIQ0Jp
DjnwUJNIHCpZznqTWPglex1SKn5Mw/qCKlFxKZWQEByoUKFckDhzLL0VcWfW
3jycZA/e2W+++WZ3ZrxlOsQKDQo10w2YT3W7oWzNMRIwwzL7y1DfRV5JOEyH
FUee11CWvKFjoqc4QjAMTGcIjm7TwNMJBcSra2CsVlWUOXKkAC7iOgEDTADt
bmv/YbelNZ/0HnehDveQLBjs0KMGHUCIpPt3NQZNyyXPNSbd8gRDyjQS2+SQ
WDSbi71JErFE+O4OEhPSyByOCtK23BdSTCxN0wNb02DsWjozUWnuEUslXmga
cOAcMBVKJdjf63aa8OHz+c9Pp/wyOov+RNPoOuLR++hvdPrt49Vvfiu8/Ix/
4W/4268n33/xEz7lN8dTfo0oT8v7BgtIIq+kPbY7hkyG6pMCZCqSsYlgCEJ5
A+EBqHVfheyiALlCCsI65NIRq/EivVoQez/eKZFHYxJXo/m0194D/gPiayIJ
P0R8jAnw24vLd//4Ob/hV/zi+PVcO7dUfJ+y0HcWfYE8ZAOGfSAa0QNWk91u
LD8CajXY3UEVIfAqPRU21YPQp8lkrM3EjNWnA9enOHNrQ1SdcwOLUi9bWUJm
0fqAUX9z8Oq7EuodmXB2Y7yz+AFs3XSywtD9IcHZHOn+9rY4jHPKUepVcRbM
WE4UUCuOM2MIt1r6Z6pCPm8uOptE5+urxUnEEm+pviKRPMVww75FZXsejV5i
QsmHSjleRXkn4oZMNGZBxYMKaKjCoo5hSU1Zmtazdlfr9JrNVqdTxZL8B/K0
MJevBAAA
====
アセンブラ初めてなので変なとこあるかも。
ってか gcc/gas って文法が変態チックで困る。
そもそも、>552は何の石で開発することになったんだ? 基本は変わらないつっても結構クセの強い石もあるし。
うちの大学の先生、SH2かSH4の設計に関わったそうだ
age
579 :
デフォルトの名無しさん :2005/09/10(土) 00:10:24
MISSったょorz まぁ、ageとくわ
>>577 なんでゼロ拡張loadを基本命令にしなかったんだよこのアホ!
とお伝えください。
SH4は44マトリクス×4ベクトル演算が1命令で出来たなあ 懐かしい
なんで4bitシフトがないんだろうな。
シフトはライブラリ呼んでたなあ
質問です。 Can the effective address 61496h be accessed from the segment address 1884h? why or why not? で、答えはNOなんですが、どうしてアクセスできないのかわかりやすく教えてください!
586 :
584 :2005/09/16(金) 15:36:07
書くの忘れてました。。 intel (80x86) のアセンブリです。
>>586 うーん、8086でいいのかな。
それなら説明は簡単なんだが。
即ち、8086ではメモリアドレスは単純に次の式で表される。
(セグメントアドレス)*10h+(オフセットアドレス)
したがって、セグメントアドレスが1884hであれば次の範囲にアクセスできる。
1884h*10h+0h〜1884h*10h+ffffh
これを計算すれば、
18840h〜2883fh
となる。
問題のアドレスは61496hだから、当然アクセスできないことになる。
80286のプロテクトモード、80386以降の場合はこれに該当しないので
その問題の前提条件がない限り説明できない。
588 :
584 :2005/09/16(金) 16:06:03
>>587 わかりやすい説明ありがとうございました。
明日のテスト、なんとかなりそうです。
589 :
デフォルトの名無しさん :2005/09/16(金) 17:23:28
テスト(プ
余計なこと書かなきゃいいのに。
591 :
461 :2005/09/17(土) 05:49:32
>>529 の考えてることはおそらく、CreateRemoteThread(LoadLibrary())みたいなもので起動済みプロセスに何かのDLLをこっそり注入すること。だがLoadLibrary()すると簡単にモジュール列挙されてしまうので、別の方法をとりたい。
もしそうなら・・・
リンカで設定して、DLLの側をうまく作っておきさえすれば、手抜きのPEローダーで構わない。
1. セクションのファイルアラインとメモリアラインを一致させること。ヘッダのサイズが1000hにできれば完璧。
2. 固定アドレスロードにする。
3. バウンドインポートにする。
まあ、3は大いに問題ありなので、インポートテーブルだけは解決するように作ればよい。後はDLLプロセスアタッチをシミュレートする。
逆に言えば、ちゃんとしたローダーを作るには1/2/3を解決すればよい。完全なのはもう少し処理が必要だが。
作りたかったらwinnt.hに載っている構造体とdbghelp.hに載っている関数をよく調べること。
それから、DLLは作らずに、VirtualAllocEx()で確保した領域に、EXEが自らのコードを部分的にコピーして動作させる、という方法もある。
そっちの方法は「アセンブリ言語の教科書」の著者のページに書いてあり、ソースコードも置いてある。多分Advanced Windowsにも載っているのだと思われるが。
592 :
デフォルトの名無しさん :2005/09/18(日) 19:36:15
今こそアセンブラの時代だと思いませんか。 いい意味にしろ悪い意味にしろハッキングにはアセンブラが重要で自由自在だし アセンブラができれば女にもモテるのでファッキングも自由自在ではないでしょうか。
____ / ./ /| ! _|  ̄ ̄ ̄ ̄.| |___ ∧∧ / |_____.|/ / (・ω・ ) 誰だ!!  ̄ ̄~ |し |  ̄ ̄ _| ⊃/(__ し⌒ J / └-(____/ ____ / ./ /| ? _|  ̄ ̄ ̄ ̄.| |___ ∧∧ / |_____.|/ / ( ) 気のせいか・・・  ̄ ̄~ |し |  ̄ ̄ _| /(__ し⌒ J / └-(____/ ____ / ./ /| こちらスネーク _|  ̄ ̄ ̄ ̄.| |___ 糞スレへの侵入に成功した / |_____.|/ /  ̄ ̄~ |し |  ̄ ̄ し⌒ J
さぁ!!アセンブラで君もフリーファッキングライフ!!
どうも「アセンブラ」の意味をはき違えている人がまだいるようです・・・
5分もあれば誰でもアセンブラ使いにはなれるからな。 アセンブリ言語ソース書けるかどうかは知らんけど。
ようし基礎的な事は把握した! 実地で試してみるぜ!とりあえずVCのコンパイラが吐いたのを読んでみるか これで俺も「アセンブラ理解してると違うよ」とか言っちゃう身分だぜウフフ ……なんだこりゃ知らねー命令セット大杉 orz
>597 そうか? VCの吐く命令って割と限られてるっぽいけど。 最適化も人間がやるみたいにキチガイ地味てるって程でもないし。 昔GCCの吐いたコード逆汗ったら凄まじく汚かった記憶がある・・・
それってたぶんGCCの中の人のハードコーティング部分じゃないかと。 コンパイラが吐く命令列はシンプルと相場が決まっている。
ところで600げと
クラッキング・バイブル セブンアンドワイで予約したら 流通の関係でセブンだけ1週遅れて販売て キャンセルして書店回ったろうか お願いです。もう待ちきれません(´・ω・`)
603 :
デフォルトの名無しさん :2005/09/21(水) 00:28:21
Pentium Mでは値を3倍するとき、 imul EAX, 3 と mov ecx, eax shl eax, 1 add eax, ecx ではどっちが速いでしょうか。 というか、クロック表ってWeb上に転がってないですか?
>>603 メモリ・レジスタ間オペレーションのスループットが上がってSSE2が追加されてる以外は
Pentium 3とほぼ同じだよ。
結論から言うと後者のほうかな。
lea eax, eax[2*eax] の方が速い気がする。
eax懐かしい なにげにデコーダネックになりそうな気もするがどうだろう
っていうか386以降のx86で3倍、5倍、9倍、及びそれらの2^n倍するときは
>>605 が定石。
リアルモードでも使えるよ。
IA-32 Intel(R) Architecture Optimization Reference Manual(英語)
ttp://www.intel.com/design/pentium4/manuals/248966.htm Prescott/その他のNetburst/PentiumM のレイテンシ/スループットがのっている
ただPentiumMはあまりのっていない
インテル アーキテクチャ最適化リファレンス・マニュアル
ftp://download.intel.co.jp/jp/developer/jpdoc/iaopt_j.pdf
デコーダ向け命令の仕様が役に立つと思われ
leaに一票
leaってアドレス生成ユニット使うんだっけ? RISCから入った俺的にはにわかに信じがたい。 本当に数をこなしたいときはMMX/SSE2使うのがいい希ガス
leaはシフトと加算に分解されるだけだと思うんだが… 似たようなのがARMにあった希ガス
611 :
デフォルトの名無しさん :2005/09/21(水) 01:57:46
奥が深そうですね ありがとうございました
>>610 いや、普通はアドレス生成ユニットが処理する。
P4だけは違ったかも。
613 :
怒シロート :2005/09/21(水) 03:14:18
アセンブラの勉強をして、どんな事に役に立って、どんなことができますか? また、完全にマスターするまでには一般的にどのくらいの勉強時間が必要ですか? もしかしたら、仕事の関係上勉強しないといけないかもしれないので、教えて君スマソですm(__)m
基本的に、バイナリを吐ける高級言語(C, C++ など)をどれか一つでもマスターしていることが条件 全体を生産性の高い言語で記述して、速度を稼ぎたい部分にのみ使う。 移植性や可読性を犠牲にするから、本当に必要なところでだけ使うのがセオリー。 また、指数オーダーの時間がかかってる部分を倍数オーダーにするとか、 アルゴリズムの見直しは大前提。 高速化以外では、ハードに近い部分の処理をするときとか、 本当の熟練者にしか縁の無い話だが、コードの解析を困難にするためとか。
>>613 どの程度の時間がかかるかは人にもよると思う。
私は、あなたのスキルをレベルを知らない。
基本情報技術者のCOMET-2/CASL-2あたりからはじめてみたらどうですか?
シミュレータなんかも出回ってるし、アレが近道だと思われ。
いまどき書ける必要のある業界って 先端のゲーム屋、超タイトな組み込み系、 コンパイラ屋、それに組み込みとOS屋の一部、ぐらいじゃないか? それでも最低限のことぐらい知っておかないと、 コンパイラ一つろくに扱えんと思うけど。 デバッグの時に役に立つこともあるかな。 完全にマスターするには、何をもってマスターとするかによるな。 アセンブリをなんとなく書くだけなら1日でできる。 プロセッサというものについての基本的理解、 というなら数ヶ月単位か。 まあ高級言語からアセンブリソース吐かせて 解説見ながらステップ実行でもさせれば多少は理解も進むんじゃないのかねぇ。
618 :
怒シロート :2005/09/21(水) 16:50:07
まったくの無知識なので、あまり理解できませんが、完全マスターは凡人にはムリポってことですかねorz
> 仕事の関係上勉強しないといけないかもしれないので、 なんの仕事?
どんな言語でも(完全マスターは)難しい
まぁ漏れは日本語に完全マスターたけどな
でけれねに?
仕事上必用な石のマニュアルを見て「命令セット」を理解できること、だね。 それがASMを理解できるかどうかということ。「マスター」なんかしないでいい。 チップが出る度に命令セットを覚え直す必用がありそうに思えるが、たいてい 殆ど同じだから。-->メモリ<-->レジスタ間の移動、加減算、シフト・・・これがほとんど。 チョット高級チップなら乗算・除算がハード命令になっているけど、精度が足りるかビミョーだし。
>>618 凡人が完全にマスターしたらもう凡人ではなくなっている。
アセンブラを完全マスターすることなど 一生ありえない
>>627 別に「完全マスター」しなくとも、飯が食えればそれでいいさ・・・・・
629 :
デフォルトの名無しさん :2005/09/27(火) 01:25:05
630 :
デフォルトの名無しさん :2005/09/27(火) 01:31:16
簡易電卓なんてつくれねーよ‥‥
632 :
デフォルトの名無しさん :2005/09/29(木) 15:22:36
add esp, 8 pop eax; pop eax pop eax; pop edx lea esp, [esp + 8] pentium系でどれが速い?
inc esp inc esp inc esp inc esp inc esp inc esp inc esp inc esp
クロックステート調べろ タコ
アセンブラを授業科目に追加され、この超基本計算結果が全くわからない俺です 1: MOV #100, R1 2: CLR -(R1) 3: CLR -(R1) CLRはクリアだと習ったのに、答えは0では無いといわれてパニック・・・ 教科書見ても具体的な方法が載っておらず・・・叩かれる気分で言います。教えてください。
>>635 レジスタをカッコで囲むと何を意味するか述べよ
637 :
635 :2005/09/29(木) 20:51:45
処理する前にレジスタの内容を減らす?で合ってますかね・・・かなり低レベルですいません。 ()に意味が有るというのも今知ったので・・・
>>637 授業ならテキストがあるだろ。
カッコは基本だから書いてあるはずだ。
まずテキストを熟読しろ。
>>638 それが載っているはずだと思ってずっと熟読しているのですが、配布された資料に括弧の式はいくつか出ていて、括弧の意味も載っておらず、
答えすら載っていない状況で、独学しようにも答えがあっているかどうかすらわからない状況です。
教科書にも括弧の式はかなり使われているけど意味は載っておらず、これもまた答えが載っていないので結果がわかりませんでした。
数学のように1つでも回答例が有れば良かったのですが・・・
>>639 >独学しようにも答えがあっているかどうかすらわからない状況です。
ここで聞く前にまず担当教官に質問しに行きなさい。
あ、肝心なこと忘れてました。行ってきます。
MIPS系? x86とPPC以外は全然解らん。 Itaniumなんかは神レベルの人間じゃないと直に叩けそうにない
VAXだろ? RISCじゃCLRはまず使わん。 しかし、しょぼい問題だな。
m68kくさい
645 :
641 :2005/09/30(金) 13:39:05
友人7人ぐらいで担当教員に聞きに行きました
「さぁ〜、載ってないがそれぐらいは分かるでしょ。考えなさい」
といわれて帰ってきました。
>>642-643 良くわからないですがPDP-11?と言う言葉が教科書に頻出しています。
またえらく化石な物が出てきましたな。 m68kあたりが読めればなんとかなるか。
>>645 「アドレッシングモード」でググってみな。
>>645 どこの学校か知らんが、担当教官の質を疑ったほうがよさそうな予感。
>>632 Pentium系って何よ。互換品を含まないPentiumシリーズだとして、一般的には
pop eax/pop eaxとpop eax/pop edxは同じ。
addはその後でpush/popしないならpop/popより高速。
leaはそれに加えて、前でespにアクセスしないならadd以上。
ただしPenMだとpop/popの方がよかったような気もする。
1: MOV #100, R1 2: CLR -(R1) 3: CLR -(R1) まずレジスタの値を2減らし、その値を対象番地とする、と書いてあったね。 だから、2.で98番地をクリヤ、3.で96番地をクリヤ、その後R1は96になっているでしょう。
652 :
461 = 397 = 398 :2005/10/01(土) 10:46:57
>>601 で、結局、どれがあなたのレスだったの?
>>524 がそうかな、と思ったんだが。
HP、期待してます。とりあえずデバドラのを・・・
>>613 Webに初心者向けのアセンブラの学習ページがいくつもあるから。それですぐに覚えられる。日本語のもいくつかある。
>>614 の言うようにバイナリを吐ける高級言語をマスターしている必要は必ずしもないと思う。オレは一番最初はBASICインタープリタで次にマシン語だったし。
まあその頃に比べたらアセンブラもまるで高級言語みたいになったので、他をあまりよく知らずにアセンブラを始めてもいいんじゃないか? 実際オレはCより先にアセンブラをマスター(?)したし。
と言うかむしろ逆。バイナリを生成する言語を扱うプログラマは、アセンブラを読み書きできることは必須。そうでなければまともなプログラムは書けないし、第一デバッグができない。
マシン語やアセンブラを覚えれば何ができるか?
ヤバイ発言を期待してるんだろうけど、まあ言える範囲で言うと・・・
およそどんなバグでもつきとめて潰せるようになる。他人のつくったソフトのバグまで(^^;)
>>615 の言うような試験のみで使われる言語を覚えても何もできない。x86で覚えるべき。
>>618 昔のパソコンでは素人がBASICで組んだやつでも何かしらマシン語が使ってあったりした。
高級言語の補助的な使い方なら誰でも組めると思うし、そうするのが利口な使い方。
オレはフルアセンブラで組む時もあるが・・・(^^;)
653 :
デフォルトの名無しさん :2005/10/01(土) 10:50:04
うざい→(^^;)
同意。 つーかキモイな。
>(^^;) 気持ち悪い
そもそも高級言語はコンピュータの仕組みをよく知らない人でも プログラムを作成できるように作られたものなのだが。
(^^;) ←氏ね
>>656 そりゃ違うんじゃないか?
主に生産性の向上だと思うんだが。
660 :
645 :2005/10/01(土) 15:46:00
アセンブリわかってたら高級言語も理解しやすいよね Cのポインタとかとくにそう思う
662 :
デフォルトの名無しさん :2005/10/01(土) 16:02:49
スレ違いかもしれませんが、失礼します。 『PC-9801プログラマーズBible』を片手に当時のゲームの アセンブラソースを読んでいるんですが、 movah,004h int07Fh という「INT 07Fh」の意味が載っていなくて困っています。 どなたかご存知の方、または情報の在りかでもよいので 教えていただけないでしょうか。 書籍関係は絶版ばかりで入手も困難でした…。
>>662 ソフトウェア割り込み。
0番地から始まるベクターアドレステーブルからの間接参照割り込みさ。
664 :
662 :2005/10/01(土) 16:27:23
>>663 ありがとうございます。
書き方が曖昧ですみません。INTが割り込み命令であることは
理解していたのですが、「07Fh(AH=04h)」で何が行われるのかが
分かりませんでした。
『PC-9801プログラマーズBible』に載っているのは、
INT 018h, 01Bh, 021h, 033h, 067hあたりで07Fhに該当する情報が
ありませんでした。
>>664 そりゃ、未公開ファンクションだからじゃねえの?
668 :
662 :2005/10/01(土) 17:08:28
>>665-667 皆様、ありがとうございます。
ご紹介いただいたURLなどを参考にしたところ、おそらく
常駐ソフトなどが割り込み処理を仕込んでいるのが07Fhの
割り込みベクタということのようでした。
調べてみたところ、確かに040h〜07Fhのベクタ番号は
ユーザ用となっていました。また、解析中のソフトも別に
サウンドドライバを常駐させて使用するものでした。
実際に何が行われるのかは常駐ソフトのほうも合わせて
解析していこうと思います。回答いただいた方々、本当に
ありがとうございました。
669 :
614 :2005/10/01(土) 19:04:38
>>652 俺的にはPowerPCもx86も叩くので、あんまりハード依存のコード書くのはお勧めできない。
WinとMacじゃただでさえプリミティブな部分で互換性がないんだから極力共通化したいわけよ。
パフォーマンスの必要なところで、MMX/SSEとかAltiVecとか使いたいときだけ使ってる。
それでも自作のIntrinsicsのラッパー使って共通化できる部分は共通化し、極力
アセンブラを使わないように努力はするけどね。
たとえばIntel謹製コンパイラ+Intrinsicの組み合わせならx86でもx64でもそのまんま使えて
ハイパフォーマンスなコード書けるし、それですむならそうやったほうがスマート。
つか、レジスタの中身って全部見る必要ある?
普通にデバッグ用にマクロ切ってprintfとかで変数追っかければいいんちゃうの?
俺も趣味で書いてるプログラムでSIMDを使った高速化を多用するほうだが、
アセンブラで全部記述できるほど小規模なコードは書かない。
ただでさえSTLやBoost、自作テンプレート使いまくりで数千行あるようなコードだ。
あと、アセンブラから入った人って、構造化やOOがわかってないっていうか、
どうでもいいようなところで無根拠な「パフォーマンス」に拘って可読性を犠牲にするような
コーディングやる奴がいるから手に負えない。
コンパイラの最適化より自分が正しい、みたいな。
おまいのオナニーのせいであとで読む奴が困るんだよと。
いずれにせよCやC++は基本だから最初にやっとくべきかと。
あと、組み込みならRenesasとかNECのワンチップマイコンのほうが一般的だから
x86アセンブラが役に立つとも思えないけどなw
>(^^;) 気持ち悪い
神→(0w0)ウェーイ
>>659 アセンブラ屋が自分で使うために言語を開発したってのと、
人に使わせるために言語を開発したってのは違うんジャマイカ?
>>669 役に立つ、立たないじゃなく、学ぶための方策だろ。
そりゃARMでもやっといた方が役に立つのは間違いないが、
実機も環境も無かろうに。
開発環境の入手性も含めるとPalmとかPocketPCのほうがよくね?
ゲームボーイアドバンスだろw ちなみに、ミクロじゃケーブルが使えない
GBA開発はケーブルと1CD Linux付きで本まで出てるしな。 LinuxザウルスもXScaleだからいちおうARM互換ではある。
GBA開発の解説してるところはどこもお粗末だがな・・・ あの本も例に漏れず
そりゃ、任天堂に睨まれないように、当たり障りのない事しか書けないだろうさ。
そーゆーレベルじゃなくてな・・・ まぁスレ違いだから止めとく
とうとうここにも湧いたかとオモタヨ、、、
そういえば最近見掛けないな。 いいことだが。
683 :
デフォルトの名無しさん :2005/10/04(火) 21:25:56
アセンブラって潔癖には合わない?
はいはいわろすわろす
>(^^;) 気持ち悪い
そうですか(^^;)
次スレのタイトルには是非 (^^;) を
688 :
デフォルトの名無しさん :2005/10/07(金) 12:28:05
pico16ってなんですか?
たぶん食べ物です。
アセンブラ… (^^;)気持ち悪い
691 :
デフォルトの名無しさん :2005/10/07(金) 20:15:49
アセンブラ… (^ω^;) これでいいんじゃね?
692 :
デフォルトの名無しさん :2005/10/07(金) 20:46:30
(^ω^;) ←この顔むかつくからやめろ
オナヌーしていて聞き逃した('A`)
ゴバクシマシタ('A`)
アセンブラ… (^盆^;)
(`ω´)
馬鹿じゃねーの
おお、やねうらお先生だ
cmp ebx, ecx の結果によりjmp命令を使わずに ebx > ecx なら正を ebx < ecx なら負を ebx == ecx なら0を eaxレジスタに格納したいのですが、いい方法はありませんか?
ebx, ecx共にunsignedな数として扱いたいです。 eaxはsignedな数です。
>>703 x86の符号付整数は2の補数表現なんで、そのまま使えるよ。
たとえば 1 - 2 は0xFFFFFFFFになるが、そのまま-1の意味になる。
>701さんそれだと mov ebx, 0ffffffffh mov ecx, 0 で比較したときにeaxに0ffffffffhが入るので eax < 0となってしまいます。
ソフトのキャプションを変更したいのですが、バイナリエディッタで見てみると キャプション名と同じ名前の部分が100近くあって、全て変えると不正終了します C言語のソースからならわかるのですが、exeファイルをバイナリエディッタや逆アセンブラ上などから ここがキャプション、という部分を判別する方法はありませんか? 初歩的な質問ですが教えていただけると助かります、よろしくお願いします
>>706 板違い
resource hacker使え
もう二度と来るな
>>700 sub ebx, ecx
edx = (0 - c) * 2 + 1
add ebx, -1
eax = (0 - c) & edx
ってとこか?
>>708 そんな糞面倒な事しないで、算術シフトで一発だって。
>>709 すまん。一発で済ませる方法がわからん。
>>700 sub ebx, ecx
sbb eax, eax
add ebx, 0ffffffffh
adc eax, eax
b > c で a = 1
b = c で a = 0
b < c で a = -1
ebx を破壊するけど最近のCPUなら 3clock 以下かな?
今考えついたものだけど、なんか見覚えがあるような。
これ以上いい方法は思いつかなかった。
算術シフト1発ってどうやるのん?
>>711 それだと、
eax = 0;
if (ebx < ecx) eax--;
if (ebx != ecx) eax++;
なので、
ebx < ecx : 0
ebx == ecx : 0
ebx > ecx : 1
になんないか?
cmp ebx, ecx
sbb eax, eax
cmp ecx,ebx
adc eax, eax
でいいんじゃね?
714 :
712 :2005/10/10(月) 08:47:45
ホントだ。 adcの解釈間違えてる。 テラハズカシスwww
715 :
711 :2005/10/10(月) 09:07:27
>>712 うっ、単純にcmp2回で済むとは……
変に難しく考えすぎたかな。
EBX非破壊だし、そっちのがいいですね。
あと、
>>711 の後ろの方は、
>>710 のいうとおり
if (ebx != ecx) eax = eax + eax + CF;
なんで、 EBX < ECX のとき、 -1 + -1 + 1 = -1 です。
しまった。 上の、 CF のところは 1 ですね。 その条件式が真のときは必ずCF=1なんで。
おまいら、if使っちゃjmp使ってるのと同じだろうが。 ったくもう、これだからアセンブラ知らない奴らは困るよ。
MMレジスタに転送してpcmp*使えばいいじゃん
719 :
700 :2005/10/10(月) 17:18:25
で、 cmp ebx, ecx sbb eax, eax cmp ecx,ebx add eax, eax adc eax, eax でいいのけ?
>719 ウルセーバカ、テストくらいテメーでしろハゲ!
721 :
デフォルトの名無しさん :2005/10/10(月) 18:38:04
cmp ebx, ecx lahf rcr eax, 1 and eax, 0x80002000 xor eax, 0x00002000 >709 シフト系は無理じゃね? >719 ウルセーバカ、テストくらいテメーでしろハゲ!
jmpを使わずに、ってところが なんかの課題っぽいよな
723 :
700 :2005/10/10(月) 19:38:41
テストは望むところだけどね。
>>722 コンパイラ作ってます。
>>723 >>711-712 なんか比較と加減算の3命令しか使って無くて、
算数レベルの明快な論理で書かれているのに……
検証するにしたって、漏れは711を投稿する前に総当たりのテストを
rubyで書いたけど、たったの10行程度で済むよ?
さっぱりやる気が感じられないんだけど。
>>724 rubyそこまで使いこなせない。弟子にして・・・
>ウルセーバカ、テストくらいテメーでしろハゲ!
なんかワロタ
>>724 2の64乗通り、全部通したってわけじゃないと思うけど、
ebx=[0x00000000, 0x00000001, 0x7fffffff, 0x80000000, 0x80000001, 0xffffffff]
ecx=[0x00000000, 0x00000001, 0x7fffffff, 0x80000000, 0x80000001, 0xffffffff]
この辺りの組合せ?
727 :
700 :2005/10/10(月) 20:50:04
つーかset??あるからこれ使い道ありませんでしたw ごめんよ
全ての算術に応用出来る奥の手をお教えしよう。 ebxとecxをアドレスにしたマトリックステーブルを作る! すげえな俺。どんな計算も数ステップでこなしちゃうんだぜ。
>>728 Pentium!!!(Coppermine)あたりでは有効な手だったけど
最近のCPUではレイテンシが増えてるからあんま使えない。
>>725-726 2の64乗はやってられないので、ワードサイズを8bitとして2^16通り計算した。
rubyはスレ違いで申し訳ないけど、折角なので書いておこう。
def cmp711(b, c)
b -= c # sub bl, cl; b -= c
a = -(b[8]) # sbb al, al; a = 0 - CF
b &= 0xff
b += 0xff # add bl, 0ffh; b += 0xff
a += a + b[8] # adc al, al; a += a + CF
end
(1<<8).times do |i|
(1<<8).times do |j|
r = cmp711(i, j)
p(['NG', i, j, r]) if (r != (i <=> j))
end
end
空行除いて12行なので、10行程度といって差し支えないでしょう。
実際はもっと読みにくい書き方してたからさらに短かったし。
今気づいたが add ebx, ffffffffh は、 sub ebx, 1 でもいいのか。
どのみち
>>712 には敵わないけど。
あと最後に、
(ノ`д´)ノ ┫:・’
>>727
>727 氏ね。
732 :
:2005/10/11(火) 02:43:57
サブルーチンから返るまえにリターンアドレスをポップして 一気に2つ上層のサブルーチンに返る技ってなんていうの もし名前あったら教えて 素人ですまそ
>>732 フレーム・ポインタがあった時も考慮するの?
>>732 中間のサブルーチンでコールせずジャンプしたい気もするけど。
何にしろ名前なんてあるんかねぇ。
735 :
732 :2005/10/11(火) 05:48:18
>>734 ある条件では1つ返って、ある条件では2つ返るという場合にです
>>733 フレーム・ポインタは考慮してません
たぶんunwindという技 C++例外処理やLISPなんかで使うよ
737 :
デフォルトの名無しさん :2005/10/11(火) 08:14:02
x86上で動いているWindows2000のユーザーモードで、 割り込みを使ったプログラムを何か書いてみたいと思うのですが、 どんなものが可能でしょうか? 役に立たなくてもいいので、高級言語では実現しづらいことが出来るような Windows特有のサンプルプログラムを作りたいと思っています。CD21などは使わない方向で。
738 :
737 :2005/10/11(火) 08:22:47
どんなものが可能でしょうか、というのはあまりに漠然としていたので 補足させてください。 PC-9801、MSDOS時代のアセンブラしか知らないので、 今復習を兼ねて色々とアセンブラでプログラムを作っていますが、 コンパイラは優秀で速度的に問題はないし、 Windows APIなどもC言語で呼ばれることを前提とされているので アセンブラで書くメリットがある分野が昔に比べてとても狭くなっている気がしました。 そこで、最終的には何かデバイスドライバを作ることを勉強しようと 思っているのですが、その前段階として、Windowsからハードウェアに触ることの出来る部分を まずは作ってみようと考えたのですが、知識不足からアイデアが思いつかず、737の質問をさせてもらいました。 割り込みに限らず、WindowsからハードウェアにWindows APIを介さずにアクセスする方法って無いですか? VRAMでも何でも結構です。よろしくお願いします
>>738 NT系ではWindowsからハードウェアにWindows APIを介さずに
アクセスする方法は無いんじゃないかしら。
おっしゃるようにデバドラ書くしかないと思いますよ。
CD21って何かと思ったらDOSのint 21か…? NTのユーザモードからI/Oを直接叩くのはムリ。 できるようにしてくれるソフトウェアはあったと思うけど。 CPUID/RDTSCぐらいしかないんじゃないかな。RDMSRも特権命令扱いらしいし。 9x系使うかDDK使うかした方がいいんジャマイカ?
PCIバスとそのOSでの扱いについて を知らんとどうにもならんと思う
>>738 VRAMならDirect3DのAPIからアドレスを得て直接アクセスすることができるよ。
in/out命令をユーザモードで使いたいなら、GIVEIOをググってみる。
719, 723, 727 は私ではありません。 いままでアク禁をくらっていてレスできませんでした。 >711さん、>712さん、>721さん、>724さん、>730さん、 皆さん本当にありがとうございます。 私は>712さんの書かれた方法を使わせていただきたいと思います。 失礼いたします。
今まで悪かったな
酷い自演を見た
。゚(゚´Д`゚)゜。ウァァァン
(0w0)ウェーイ
一気に脱力
普通にインライン使った方が簡単じゃないのか。
751 :
645 :2005/10/12(水) 18:47:30
お久しぶりです
>>648 さんの言うようにちょぃこの担当疑問な点が出てきました。
今日提出だった課題ですが、生徒はほぼ全員一発合格したにもかかわらず、先生が黒板で模範解答を行ったところ、答えと違った答えになり
「あれ?これでまちがっとるんか?そんなはず無いぞ」
と愚痴りながら5分後、ようやく間違いに気づき、「多分5億ぐらいになる」と一言残し、模範解答が謎なまま授業が再開されました。
ってことだけ報告して消えます。ではでは。
糞講師だな
MASMってフリーウェアなのか…?
その糞講師の名前晒してみろ 俺の弟子かもしれん
本家のMASMならSDKの中に入っているジャン
757 :
デフォルトの名無しさん :2005/10/18(火) 23:16:59
アセンブリ言語の教科書という書籍で学習しているのですが、 誤植が多すぎる気がするのですが、 p.119のPROGRAM_ENDラベルはPRINTラベルに行った時点で メモリ開放のシステムコールが呼ばれているので絶対に呼ばれないと思うのですが なぜですか?
>>757 そんな事言っても、絶対にその本は買わないからな。
よってその質問には答えられないw
漏れのほんのp.119には キーの寿命と削除 オリジナルファイルやその完全なキャッシュファイルを持っている ノードが全てオフラインになると、そのファイルはダウンロードできな くなるので、〜〜〜 って書かれてるけど? >757の本おかしくね?
>>757 想像でレス。
それは人間向けのラベルだろ。
コメントと同じ。
>>758 アセンブリ言語の教科書興味あったんだけど
買わん方がいいんか?
アセンブラに本なんているか? 命令セットわかればいいだけだろ?
「独習アセンブラ」 なんつーか、意表をつかれた感じw
765 :
デフォルトの名無しさん :2005/10/19(水) 02:07:02
アセンブラで、どんな事ができますか?
>>763 より効率的なコーヂングを学ぶ、とか・・・
>>762 バリバリのプログラマがC言語入門なんて本買わないだろ。
アセンブラ使いなんてそれだけですでにプログラミング初心者じゃないんだから、
そもそも本なんて買う必要なし。
初心者なら独習アセンブラとアセンブリ言語の教科書両方かって勉強しる。
Kenji Aikoたんの本だろそれ。 俺も持ってるけどMMX/SSE使うときくらいしか使わないし、それですら VC++のx64用コンパイラ対応のためにIntrinsicsに置き換え進めてるけどな。 あの本は学習用じゃないよ。彼の酔狂ぶりを見て楽しむもの。
誤植が修正されて、あの無駄な外装がなく、 索引とレジスタ一覧がついていれば広く浅く学ぶには最適だと思うんだけどな。 それが直れば文句なし、かも。
>>757 多分誤植です。
今から調べてサポートページ更新しときますです。
ホント誤植多いですよね、申し訳ないです。
さ、作者さんですか? お疲れ様です。
愛甲健二本人キタ━━━━━━(゚∀゚)━━━━━━ !!
TCP/IPの教科書も持ってるよ。
775 :
771 :2005/10/20(木) 00:16:19
>>757 指摘ありがとうございました。
サポートページの正誤表に追加しました。
>>772 このスレ勉強になるのでたまにのぞかせてもらってます。
アセ本の批判にヘコみながら(笑)。
でも批判も今後の参考になります。
>>774 おお、ありがとうございますです。
でもその本信じられないくらい売れなかったっぽいです。
頑張って書いたんですが…残念。
なんかスレ違いになりそうなんでこの辺で。
生粋のネラーだw
E・∇・ヨノシ <777ゲット♫
>>775 本買いましたよ。
素敵な本をありがとう。
俺もその本を買ってみるか。どんな本なの?作者以外の誰か、忌憚ない意見plz
立ち読みすればよかろう
まさか著者が降臨するとはおもわなんだ。 買ってみたくなるな。
>俺もその本を買ってみるか。どんな本なの? 誤植が多い、外装が無駄 、金持ちの初心者なら買え という意見が大多数。 あとは立ち読みで判断しる。
>>779 多少の難はあるけど、入門書としてならかなりマシな部類だと思うよ。
ただ、既にアセンブリでプログラミングしてる人が改めて購入するようなものではないかと。
784 :
デフォルトの名無しさん :2005/10/20(木) 23:11:42
すいません、超初心者な質問で申し訳ないのですが、 キャリーというものが良く分かりません。 4ビットの演算の場合、 最上位ビットが溢れ出ることを指し示していると 思うのですけど、 この場合はつまり、オーバーフローが起きるわけですよね? ということは、CFとOFが同時に、1になるということで宜しいのでしょうか?
さてAikoタン儲の俺様が来ましたよ。
立ち読みすると店員に激しく睨まれる罠。
カバーはずす必要あるし、中からボール紙とか出てくるし。
まぁ貴様らとりあえずこれ嫁。
http://ruffnex.oc.to/kenji/bkasm/?link=_talk どっかで見たような語尾だな。
ま、それはさておき、逆に外装が凝ってる割には安いんでないの?
あれくらいの分量で紙もあんま良くないのに4000とか結構ザラだしね。
あと、雑誌より薄いようなA4で5000円の本とか当たり前だし(まあ大学の教科書だけどw)、
広く浅く覚えるには良いと思う。
あと、「ネットワークの教科書」について。
たしかにあんまり役に立つことは載ってない。
余談だけど、俺ちゃんがネットワーク関連プログラミングの本でかなり実践的だと思ったのが
「TCP/IP解析とソケットプログラミング」でつね。高いけど。
「マスタリングTCP/IP」みたいに漠然と理論だけダラダラ書かれてるのよりは断然良いね。
きわめつけは巻末にIBMのメインフレーム用のアセンブリコードがギッシリw
「ハッカーの教科書 完全版」についてはまだ読んでない。
>>784 キャリーが立たなくてもオーバーフローが立つことはある。
787 :
784 :2005/10/20(木) 23:22:26
>>784 そうなのですか?
正直、さっきからずっと悩んでいたのです。
CFが起きればOFが発生するのなら、二つにわける必要が無いのではないかと。
もし宜しければ、キャリーが立たなくてもオーバーフローが立つことはある
という状況を教えていただけ無いでしょうか?
788 :
784 :2005/10/20(木) 23:23:06
すいません、アンカーミスです。
>>786 さんでした。
>>787 たとえば4ビットレジスタREG1とREG2での演算の場合、
CF = (REG1 + REG2) >> 4
OF = ((REG1 & 7) + (REG2 & 7)) >> 3
アセンブリの本ならヘネパタかパタヘネでも買っておけばいいんでないか?
C言語のK&Rに相当するかと。
>>784 オーバフローフラグの概念を間違って理解している気がする。
ざっとおさらいしておくとこうなる。
・キャリーフラグ
加算による桁上がり(キャリー)、減算による桁下がり(ボロー)を表す。
・ゼロフラグ
演算結果がゼロに等しいことを表す。
・サインフラグ
演算結果を符号付としたときに負であることを表す。
・オーバーフローフラグ
加算、減算の結果が符号付数値の範囲を超えたことを表す。
4ビットレジスタを考えたとき、そのレジスタをデクリメント(-1)したときの振る舞いはこうなる。
レジスタ値→結果(キャリー:ゼロ:サイン:オーバーフロー)
1111→1110(0:0:1:0)
1110→1101(0:0:1:0)
1101→1100(0:0:1:0)
1100→1011(0:0:1:0)
1011→1010(0:0:1:0)
1010→1001(0:0:1:0)
1001→1000(0:0:1:0)
1000→0111(0:0:0:1)
0111→0110(0:0:0:0)
0110→0101(0:0:0:0)
0101→0100(0:0:0:0)
0100→0011(0:0:0:0)
0011→0010(0:0:0:0)
0010→0001(0:0:0:0)
0001→0000(0:1:0:0)
0000→1111(1:0:1:0)
791 :
790 :2005/10/21(金) 02:22:31
さてと、デクリメントとは-1である。即ち、レジスタちと1との数値比較となる。 前スレの振る舞いを元に比較結果をまとめてみよう。 レジスタ値→符号なしで1と比較:符号つきで1と比較 1111→>:< 1110→>:< 1101→>:< 1100→>:< 1011→>:< 1010→>:< 1001→>:< 1000→>:< 0111→>:> 0110→>:> 0101→>:> 0100→>:> 0011→>:> 0010→>:> 0001→=:= 0000→<:< このように符号なしの場合はキャリーフラグとゼロフラグで比較できるが、 符号つきの場合はサインフラグとオーバーフローフラグも見る必要がある。
アニメだなんて、なんて非生産的なものに興味を持つかな。 まあ、音楽鑑賞やテレビ鑑賞、化粧だって非生産的なのは事実だが。
793 :
792 :2005/10/21(金) 22:23:02
激しく誤爆スマソ.......
馬鹿、ここの住人は 0と1を見てるだけで、アニメが楽しめるんだぞ! >792
もはやマトリックス
796 :
790 :2005/10/21(金) 22:47:18
自分で書いてて言うのもあれだが、>791が一瞬AAかなにかに見えた。
(><)わかんないです!
798 :
784 :2005/10/21(金) 23:31:18
皆さん、返信有り難うございます。 オーバーフローとは、キャリーが生じて 桁が溢れることだと思っていたのですが。 例:4ビットの場合 (1010)2 + (0111)2 → (10001)2 オーバーフローフラグは、 加算、減算の結果が符号付数値の範囲を 超えたことを表す。 つまり、4ビットならば、加算、減算によってMSBに影響を与えてしまったら ということですよね? というかは、もしかしてオーバーフローが発生したら オーバーフローフラグに1がセットされる、というのは 間違いということで、良いのでしょうか?
アセンブラ… (><)ワカンナイデス
800
>>794 PCソフトなんかのCDを再生した音で
何のCDがわかるやつがいるとか。
昔は1200bps程度の転送速度でカセットテープに記録していたから、ビット密度での音程の変化を聞き取れた。 例えば、プログラムとデータはちょっと聞いただけですぐ区別がついたし、同じデータでもオール0のデータと 適当に数値の入ったデータも慣れれば聞き分けできた。
プログラムの頭出しは自分の耳でやってましたが何か? 別名人間シークヘッド。
紙に穴空けてました
俺も演歌とポップスを聞き分けられる
>>805 sugeeeeeeeeeeeeeeee!!
作者自身が向学心が在る本のほうが良いかなと思ったけど。 解りやすいかどうかは、じっさいに読んでみないとわからないな。 イラストとかサンプルとかが一杯入っていて、下手に文字数が多くなくて、 行間に書き込みができる本がほしいかも。 意外とWebでの断片的な情報って、頭に入りづらいんだよな。 なんでだろ? 本だと、一貫性があるせいなのか、すらすら頭に入りやすい事が多い。 でも、スキャナにかけて、どんどん捨てていかないと部屋が狭くなるし‥
独習アセンブラとかPentium マシン語入門編あたりで。
>>807 しっかりとした書式をとったWebサイトでないとネットなだけに話半分に無意識のうちに見てしまうのと、
なんだか、ダイヤルアップしていた時代の名残で、どうにも早く読んでしまう癖があるからですかね.....少なくとも僕はそんな感じです。
あぁ、「アセンブリ言語の教科書」やっと、GNUアセンブラにいけそうです。ようやくWindowsから離れられる.....。
Linuxには入ったばかりですけど..。
GNUコンパイラでIntel/MS形式のアセンブリコードは使えるが逆は無理。 GNU→Intel形式の変換スクリプト知らない? 手動変換して検証するのも結構骨が折れるんだけど。
>>807 手書きでメモを取る人は、Webの場合も適当なエディタでメモを取りながら読み進めるといいかもしれない。
確かに本とWebはなんか違うね。
目が疲れるってのがあると思う。
本は編集が入るから良くも悪くもワンパターン
そこにモノがあって、3次元で、目が疲れず、簡単に操作できるからじゃね?
書籍はモニタとは独立して読むことができる つまりデュアルモニタなんだ
でもなんかウェブより書籍のほうが理解できるね
本は編集されるから誤植が少ないけど、ずっと直せない Webはすぐ直せるけど、間違いも多い気がする
俺は本読んでも理解は出来るが頭に残らん 重複しながら小分けに情報が入ってくるほうがよく分かったりする もちろん間違いや抜けがなければの話だが
人間は古来より書物から情報を得ていたわけだから 自然淘汰で書物から情報を得にくい人間は死んでいったんでしょう (昔はPCないじゃんという突っ込みはなし) んでもって、その子孫たちは書物から情報を得やすいように適応していると。 何世代か後にはwebと書籍を比べるとwebのほうが理解しやすいって 人間が大勢いることでしょう。
俺的に まず語句の意味をあえて理解せず、本を見てサンプルを入力 実行結果を確認し、ステップ実行で、各行での実行結果を自分で解析してその語句の意味を理解する 理解できたら書籍に載ってある意味と理解した内容が同じかどうか見てみる 間違っていたらもう一度チェックする 繰り返し(ただこれは他言語での話し...)
bigfile冗長......
>821 あ、うん、こ これからはコンピュータから情報を得ることが多くなるんじゃないかな って思ったの。 生存環境というか情報環境が書籍からwebに変わると思うんですけどね。
進化論は、淘汰されるべき種は新しい環境で生きていけない種であることが前提。 コンピュータで情報を得ることが精子に直結するとは思えない。 どうみても精子です。ありがとうございました。
「アセ教書」のp.208に出ている $ ld -oformat binary -o a.img charput を打ったらbinaryなんてファイルはないと怒られました。 どうしてですか......Linux、Winからきた僕がそんなに嫌いなの........。 あぁ、やっぱりシェルコマンドから覚えなきゃ駄目なのかな.....鬱。
>>827 ハイフン足りない。
--oformat binary
ところで独習アセンブラってどんな感じの内容?
凡庸だが「いまどき」のようなカスではない。 他の独習シリーズ(XMLとかSQLとか)と同じレベルでアセンブラを語るのは異論があるだろうけど・・・ ま、箱に入ったりしてないから実際に立ち読みしてみれ。
どんな本でも「いまどき〜」なんかと比べないであげて下さいw
最近妙にアセンブラが注目されてるけど何か原因だ?
シェーダとかじゃないのか
>>828 あ、ありがとうです....。'-'が抜けていただなんて、うっかりしてました。
早くLinuxになれなきゃ。
( '-')っ (0w0)ウェーイ
シェーダーはアセンブラほど複雑じゃないからな。
838 :
デフォルトの名無しさん :2005/10/23(日) 18:00:50
昔のCPUは、減算器が無かったので、 2の補数を加算することで補っていたのですよね? 今のCPUは、どうなんでしょう。
むしろ違いが分らない
>>835 Windowsでもldの仕様は同じはずだと思うけどなぁ。
リンカだろ?
アセンブラってあれか? 0と1のみで書くあれのことか? きもいでつねー
でつとか言っちゃってw
スヌーピーをいじめるなよ。
なんだこのネタくさい進行は
CALL/RETはCで言うと関数にあたると聞いたのですが レジスタの値は全てのCALL/RET間でデフォルトで共有されるのですか? Cで言う引数をとるような命令があるのでしょうか? ネ タ に 見 え る か も し れ ま せ ん が マ ジ レ ス で す
>>849 最後の行でネタに思えるんだが…
Cで作った関数や関数呼び出しのコードをCコンパイラでアセンブリ出力
して見てみれば?
853 :
デフォルトの名無しさん :2005/10/25(火) 11:40:47
MODEが24,24で作成されていたアセンブラを31,ANYで再アセンブラし たのですが出来上がったロードモジュールは相変わらず24,24のまま でした。アセンブルは正常終了しているのに何故31,ANYにならない のでしょうか?
Cからアセンブラで作成した関数を呼び出す方法のドキュメントとかがコンパイラについているものだが。 最近は無いのか?
その手合いは、マニュアル漁るよりぐぐった方が早いこともしばしば。 キーワード: ABI
856 :
デフォルトの名無しさん :2005/10/27(木) 22:45:42
GNUアセンブラの入門のほうで こんなコードがありました pushl %ebp ;; (*) movl %esp, %ebp ;; (**) pushl $hello call printf leave ;; (***) ret *,**,***で行っていることがいまいちよくわかりません...。 なぜ、わざわざebpレジスタにespレジスタの値を入れたりせず、 eax, ebxなど他のレジスタを使ったりしないのはなぜなのでしょうか? call printfとなにか関係があるのでしょうか...。
>>856 自動変数の格納場所の確保だよん
スタックエリアに作るんだよねぇん
859 :
856 :2005/10/28(金) 10:21:01
>>857 ,
>>858 どうもありがとうございました。
「標準スタックフレーム」でぐぐったら見事に十件ヒットして
ひとつ面白そうな文献を見付けることができました。
大学から帰ったら読んでみます。
>>856 printfはcdeclだから本来callの後に引数として積み上げた$helloの分の
add esp, 4でもしないといけない。
でも直後のleaveによってmov esp, ebp; pop ebpされるから省略されたと考えられる。
というわけだから一応
>call printfとなにか関係があるのでしょうか...。
この答えとしては関係ある、ということになる。他のレジスタ使ってもいいが
leaveの動作見ても判るようにebpはそういうことする専用レジスタだから。
861 :
デフォルトの名無しさん :2005/10/28(金) 10:35:17
フラグレジスタってなぜ必要ですか
>>861 必要というわけではなく設計でフラグレジスタを採用しただけ。
たとえばたいていのRISCアーキテクチャではフラグを採用せず
条件分岐は「レジスタが0か否か」程度になってることが多い。
…ってなことよりも根本的な質問をされてるような気もするが。
>>861 フラグレジスタにはどんな種類があるか調べろ。その過程で自ずと必要性の有無がわかる。
864 :
デフォルトの名無しさん :2005/10/28(金) 22:30:03
865 :
デフォルトの名無しさん :2005/10/29(土) 15:58:04
初歩的な質問ですいません。 学校で8085アセンブラの勉強をしているんですが、これは 8086の本を買っても対応できますか?
やめとけ
やめといたほうがいいですか・・・。 私の大学のアセンブラの講義が、教科書を使わずに自分でwebに上がっているテキストを印刷して持ってくるという スタイルでやっているんです。 しかしそのテキストに書いてある内容があまり良くなく、困っています。 (講義も、分かる人にしか分からない感じで進められる・・・0 そのためamazonで8085関係の書籍を買おうと思っったのですが、「現在取り扱いしていません」となっていて 廃盤になっているようです。 何かお勧めの本や、これやっときゃ8085もわかるよ的なものがありましたら 教えていただけないでしょうか?お願いします。
分かる人がいるんだったら教えてもらえばいいんジャマイカ
>>865 8085は、8080の後に出てきたCPUで8080とニモニックに互換性がある。
しかし、それ故に8085アセンブラの本は皆無に等しい。
因みに8bitCPUには余りにも有名なZ80があるが、これも8080の上位互換命令セットを持っている。
但し、こちらはニモニックがインテル形式ではなくザイログ形式となるため、見た目の互換性はない。
従って、8085アセンブラの講義に使えるのは8080の書籍くらいしかないと思われる。
#私自身は8085もザイログ形式で書いてたけどね。
>>869 丁寧な説明ありがとうございます。
講義では「intelのすっげー昔のCPUだよ」くらいの説明しかされなかったので
大変助かりました。
とりあえず8080の書籍を探してみます。
どうせ机上の空論でああだこうだやるだけなんだから そんな事なら、インストラクションセットだけあれば十分だろ?
そこでCASLですよ COMETですよ
>>865 8085は命令的には8080をちょっと改良したもの。
8086は16bitアーキテクチャで8085との命令の互換性はない。
Z80は8080とバイナリレベルでほぼ上位互換。
まだZ80の本は見かけるからそれを見ればそれなりにわかるはず。
ただし、Z80はニーモニックが違うことと命令が大幅に拡張されているから
注意しないといけない。
できれば8080の本を見たほうが良い。
それとあわせて8085の拡張命令がわかればそれですむはず。
8086の本を見ても8085の事はほとんどわからない。
ハードウェアを弄るならそれなりに参考にはなるが。
しかし今ごろ8085をやってなんの意味があるんだ。
まだZ80をやるほうが色々と便利だと思うが。
8085で追加されたのって、ハードがらみの2命令だけだった希ガス。 その二つをマクロで作ればザイログ表記でも使えるというのが味噌。 #勿論それらのCPUの違いを承知の上でならば。
RIM(Read Interrupt Mask) と SIM(Set Interrupt Mask) ですね。 非対応なアセンブラを使う時は、DB 20H とか DB 30H でコーディングしたりします。
皆さん、アセンブラは何使っていますか?
こないだまではMASM使ってた。 最近はアセンブリ書くの面倒だからもっぱらIntrinsics使ってる。
アセンブラってニーモニック参照しながら組むのが基本だよな。 勉強ならプロセッサにこだわることもないんじゃね? 俺もここ最近勉強始めたけど、z80とか6502(学校の図書館に分かり易い本があった) とかで勉強してるし。つか、昔のプロセッサの方がシンプルで良いな。 RISCとかCISCとか、プロセッサ独自の細かい違いはまた別だろうけどね。
>>878 あおりではなく、純粋な興味なんだけれど、
アセンブラの勉強ってどんな勉強をしているのか教えてもらえませんか?
>>878 勉強でやるなら、
・資料が入手しやすい→独学しやすい
・ユーザーが多い(多かった)→人に質問しやすい
・現役で活躍中(エミュレータ含めて)→実際に動かせられる
あたりの要素を考慮して選べば、多少幸せにスタートできる。
Z80/8080、6502あたりなら上の全部の条件を満たすから、
初心者にはお勧めだな。8bitは仕組みも単純だし。
(電子系に強ければH8とかのPICって道もないではないが)
CASLでもいいけど、実装がないのが微妙だな(エミュレータはあるが)。
初めて読む8086を買いましたが時代を逆行したかと思いました......。 たしかに大切そうなことが書いてありますが、MASMばかりですね.....。
883 :
882 ◆QmXBz55CBA :2005/10/31(月) 22:09:28
xpのコマンドプロンプトのdebugコマンドでdiskcopy.comをいったんメモリに読み出して、 そのままwコマンドを打ってファイルに書き出したのですが、バイナリエディタで開いてみると内容がまるっきり変わってしまっていました。 いったいこれはなにが起こったんでしょうか....?
そこでIntelのSIMD命令の勉強ですよ。 わりと実用性は高いと思う。
>>883 それ、拡張子はCOMだけど、中身EXE(Win2kでそうだから、xpも多分同じ)。
セグメントの展開とかBSSの確保とかシンボルの再配置とかいろいろされてるから、
ファイルイメージとメモリイメージはかなり違う。
VectorあたりからDOS時代のシンプルなコマンドひろってきて試したほうがいいと思うよ。
あのへんなら確実に純粋なCOMだから、ダンプしてもほとんど一緒のはず。
(凝った奴だと独自にセグメント操作したりしてるからめんどい)
>>883 xpのdiskcopy.comは名前こそ.comだが実際には.exe形式なので、loadした時点で再配置されている。
従って、そのままでは元の形にはwriteできない。
887 :
886 :2005/10/31(月) 22:55:22
げげん、被った。 先頭2バイトが'MZ'なら.exe形式ね。
>>885 ,
>>886 さん
どうもありがとうございました。
確かに先頭2バイトは'MZ'でした。exe形式(32ビット??)だといろいろと妙なことをやるみたいですね...。
nasmでサンプルコードを書いて16ビットコードを吐かせて本に載っていたことと同じことをやったら
しっかりと同じものが書き込まれていました。
よかったです、本当にありがとうございます。
889 :
886 :2005/10/31(月) 23:36:07
>>888 32bitとは直接関係ないよ。16bitでも.exe形式で作れる。
つーか、.com形式は単一セグメントモデルだから、
大きなプログラムは必然的に.exe形式にする必要があった。
#まぁ、アセンブラでそげなもんを作るわけでもないだろうから.com形式だけでもいいとおもうけど。
890 :
CASL ◆ukjpFpULac :2005/11/01(火) 18:39:10
CASLUを使って 10進数の100を16ビットの2進数で表現したときに、 その値の中に含まれる0の個数を、メモリに格納するプログラムの作成。 プログラムの終わりの部分は、下記で、0の個数は、ANSの領域に格納される。 CNS DC 100 ANS DS 1 END わかった人は教えて下い。
LEA GR1, 13 ST GR1, ANS
古っ
何故に CASL なのかと。
894 :
デフォルトの名無しさん :2005/11/02(水) 19:32:29
質問! DOS のプログラムから WindowsNT 系のDOSプロンプトと本物の MS-DOS Version 4.X, 5.X と区別する方法ってある? AH=30hのINT 21hやINT 2Fhでは区別ができん。 今は一応環境変数でOS=Windows_NTというものを検索してごまかしているけど もっとスマートな方法ない?
895 :
CASL :2005/11/02(水) 21:27:08
891は890の答えなのでしょうか? 次に、 アセンブラ言語CASLUを使って 4桁の16進文字列(0−9、および、A-Fの文字を組み合わせ た文字列)を入力しそれを10進数に変換して、メモリに格納 するプログラムを作成せよ。 プログラムの終わりの部分は、下記で、変換した10進数は、ANS の領域に格納されるものとする。 IBUF DS 4 ILEN DS 1 C000F DC #000F ANS DS 1 END わかった人は教えてください プログラムをCASLで書いてください
>>894 int 21h, ax=3306hでVer.5.50(bx=3205h)が返ってくれば
NT系のコマンドプロンプト。
VMを作りたいと思います。 たたき台になりそうな資料がありましたら教えてください。
VTやPacifica対応のCPUが出てきたらゾロゾロ出てくるんじゃないの?
PC-98エミュレータくらいいくつもあるし、それ参考にすれば?
>>895 >>891 のコードが、それ(だけ)を教官のところに持っていったら
「おまえ、俺をバカにしてるだろ」
と言われる種類のものであることを見抜けないなら勉強するだけ無駄。
さっさと学校やめちまえ。
オマエみたいなのに業界に来られたら困る。
ちなみにCASL II (COMET II)では LEA は無くなったので(旧CASLにはあった) 正しくは LEA GR0, 13 ではなく LAD GR0, 13 だったりする。
906 :
905 :2005/11/03(木) 20:36:32
訂正 ×GR0 ○GR1
ぜとはちほしゅ
ぜっぱちじゃないのか
Z8? あれは面白い石だった。
910 :
デフォルトの名無しさん :2005/11/14(月) 22:00:00
age
912 :
デフォルトの名無しさん :2005/11/18(金) 18:50:20
今年はアセンブラの本がたくさんでてるよね
>著者: 林晴比古 これって何人いるの?
目次を見るだけで悪本の香りが漂うな
915 :
デフォルトの名無しさん :2005/11/18(金) 19:28:21
MacOS Xでアセンブリやりたいんだけどどこかいいサイトないかな?
氏のC言語の本は良かったが、Javaのは糞本だった。 少なくともプログラミングをやったこと無い人には これでJavaを理解しろと言われても無理だろう。入門書としては 全く薦められない、そういう感じの本だった。
入門書は結城本で決まりでしょ
本人乙。
林晴比古のは読んでないんだけど、パラパラめくった感じ なんか厨臭さを感じたんでスルーした記憶が
他のCの本なんて糞ばっかじゃん。 結城浩の方が遥かに厨房臭いぞ
結城ってCの入門書書いてんの? てっきりJavaの話かと思ってたよ
結城本ってJavaだろ? と思って検索したら、Cもあるみたいだね。 でもやっぱり結城浩はJava関連の書籍で評価したいところだ
925 :
デフォルトの名無しさん :2005/11/18(金) 22:50:25
はじめて読む486を買いましたが対象のOSがDOSやらWindows3.1になっていて この書籍を読むのが大変苦労します。 言語処理系もだいぶお古なようです。 XP上で16ビットプロンプトに切替えてできないこともないのですが ノートが大変遅いためXPを起動するだけで一苦労です。 これを制限があまりないLinux上でできれば一番いいと思うのですが、 ところで、この書籍を最近手にされてお読みになった方は どのように実習されたんでしょうか? 御存じの方がいらっしゃいましたら是非ご教授下さい。
はじめて読む486はOSを書きたい人間が読むものであって、OSに守られた上でなにかしたい人間には向かない。
つまりLinuxのコミッタを目指す奴用か
QEMUなんかのエミュレータ+Digital Marsあたりのコンパイラ+nasmかなんかで一通り環境は構築できそうだが。 サンプルコードがそのまま通るかどうかはともかく。
Digital Marsなんか薦めるなよw
931 :
925 :2005/11/19(土) 09:12:33
>>926-930 ご意見ありがとうございます。
おっしゃるとおりOSを書きたいなと思っていた次第で
この本を終えたらA.S.タネンバウム教授の本を買って作ろうと考えています。
新しすぎることがこんな弊害になるとは....。
中古PC-98などを探してみましたが100円のものから万単位するもの
まであるんですね。それにしてもでかいです...。
Win3.1がFD12枚も使うなんて全く知りませんでした。
金銭的余裕も今あんまりないし、どうしましょう...。
そのノートPCのHDDを消しても良いのならFATパーティションを確保して、 何かDOSでも入れられないかと言ってみる。
アッカーマン関数をINVOKEと.IFを利用しないでmasmの環境で書きたいのですが、再帰がうまくできなくて困っています。どこか参考になるページなどありましたらご掲示いただけますでしょうか。よろしくお願いします。
>>929 qemuとdigitalmarsはいいんだけど、nasmをmasmにすれば書きやすくなる。
入手法はお約束っぽく『ml.exe プロセッサパック』でぐぐる。
OSを書きたいのなら、アセンブラなんて泥臭いところは既存のをぱくってきて、
自分なりの試みをできる部分だけをC++とかで書くのが効率的だと思う。
特定のHWを決め打ちにするとかコンセプト次第でアセンブラレベルでガリガリ書く必要も出るだろうけど、
普通そういうのは無いからね。
935 :
925 :2005/11/19(土) 20:18:37
>>932 ,
>>934 お返事が遅れてしまってすみません。
とりあえずはこの環境をなるべく崩さずに
教えていただいた方法をいろいろ試していけるとこまでやってみたいと
思います。
いろいろアドバイスありがとうございました。
開発環境まで一緒にしないと何もできない程度の応用力じゃ、 OSどころかアプリすら書けるかどうか怪しい。 今の環境残したいなら、開発システムはFDからブートさせればいいんじゃない? それ以上のことは、ファイルシステムさわるようになってからでも遅くない。
937 :
デフォルトの名無しさん :2005/11/21(月) 23:21:23
925じゃないが、CUIを知らずに育ったGUIっ子のオレみたいなのにとっては 環境の入手が困難で資料も少ない昔の環境ってのは結構キツいものがある。 それはそうと、NASMの日本語資料みつかんね..... 時間の経過と共に資料がどんどん無くなってくのな....オレもDOSの時代に生まれたかったyo。
>>937 なくなってるんじゃなくて、探し方が下手か、元々(ネットに)ない。
・・・まあ、なくなっていく資料もあるけどね、特にメーカー公式系の情報は。
DOSが現役だった頃、フリーの定番CコンパイラといえばLSI-Cだったけど、
MS-CあたりとはとはABIや識別子の変換規則が違うものだから、
定番のライブラリとかがほとんど使えなくて悲しい思いをしたなあ。
貧乏学生に買えるようなシロモノじゃなかったからね、MS-Cなんて。PC自体持ってなかったけど。
情報源も書籍か雑誌しかないから、田舎じゃどう転んでも入手できない情報もあった。
そもそも情報があるってこと自体知らないなんてザラだった。
雑誌のプログラマが平気でN-88BASICのBIOSルーチン呼び出してるのが不思議だった。
なんでそんなこと知ってるんだよって。解析資料が出版されてたんだけど。
大学生協で技術書が棚いっぱいに並んでるのを見たときは冗談抜きで幸せだったなあ。
今ならOMF(昔のMS LINKで扱えた.OBJの形式)の資料もネットで簡単に手に入るから、
LSI-C付属の文書とにらめっこすれば、ラッパー噛ますなりOBJ書き換えるなりして
無理矢理つなぎ合わせるくらい楽勝だなあ、とふと思った今日このごろ。
今更だけどね。
939 :
デフォルトの名無しさん :2005/11/22(火) 05:59:24
Microinstructionの質問なのでここで質問していいのか分かりませんが 該当するスレが見つからなかったもんですからここで。 'imul'というMic-1には実装されていない掛け算のmicroinstructionを 作りたいのですが、下のであってますでしょうか? アイディアは間違ってないと思うんですが テンポラリー変数としてOPCをこんな風に使ってよいものか分かりません。 imul1 OPC = MAR = SP = SP-1; rd imul2 H = TOS imul3 MDR = TOS = MDR + OPC imul4 Z = H = H-1; if (Z) goto imul5 else goto imul3 imul5 TOS = MDR; wr; goto Main1
x86(i686)上でアセンブラを書いてるんですけど、 アフォみたいにレジスタが少ないんですけどなんとかなりませんか?
メモリ使え
適当にレジスタ使いまわしとくとCPUが勝手に内部レジスタに読み替えてくれる。
x64なら16本ぐらい汎用レジスタがあったと思う。 x86はガンバレ。マジ頑張れ。 アセンブリ書く目的がMMXやSSEなら、Intrinsicsを使ってみるという手がある。
むしろ 8086を一遍かじって 少ないとはいえアドレッシングに全てのレジスタが使える幸せをかみしめろ
どうせなら8080をかじれ
やっぱり6502でござるよニンニン
947 :
940 :2005/11/22(火) 22:03:25
>>941 だってぇー、メモリアクセスしたく無いんだもん。 ><
>>942 x86-64の奴をポーティングしようとしたら、あまりの少なさに俄然としたんだお。 ><
949 :
940 :2005/11/22(火) 22:04:50
950 :
940 :2005/11/22(火) 22:10:13
しょうがないから、ebpとespぶっ壊す事にしたお。 ><
>950 ちょwwwおまwww
952 :
940 :2005/11/22(火) 22:35:37
movで汎用レジスタからxmmレジスタに転送できない件について あったら便利なのにな
ぶっちゃけ、レジスタ二つにスタックがあれば何でも出来る …よね?
DOSのファンクションコールが呼べない。
AXとDXがあればDOS呼べるぞ CP/M時代のファンクション限定だがな
>>953 ip と fl もレジスタであることは認識しているか?
>>956 953の言う2つのレジスタはきっとその2つに違いない。
演算に伴う入出力はは全てメモリからという仕様に違いない。
スタックポインタが・・・
メモリが無いんだよ。 四則演算とpush popだけ。 オーバー・アンダーフローは例外かな
理論的な話だけなら、レジスタ1個で何でも計算できるけどね。 メモリは無限に必要だけど。
プログラムカウンタとスタックポインタ以外は0ページ空間にあるCPUを設計したことはある。 ぶっちゃけ、0ページがレジスタみたいなもんだけどw
>>961 6502 みたいな 8bit CPU の時代ならいざ知らず、
今それやると激しく遅そうだな。
で、次スレどうするよ?
>>963 常にon casheと思えばさほどでもなさそうってわけないよなあ。
コードが書きやすくなるとか、CPU自体の構造が簡単になるってあたりが利点じゃない?
>>965 このペースなら980でもいいんじゃね?
967 :
940 :2005/11/23(水) 00:43:37
968 :
デフォルトの名無しさん :2005/11/23(水) 01:50:05
「x86アセンブラ入門」 CQ出版 大貫 広幸 著 B5判 304ページ 定価2,310円(税込) 2005年12月15日発売予定!
970 :
デフォルトの名無しさん :2005/11/23(水) 16:50:58
そのスレの事はそのスレで聞け または自分で試せ
一体アセンブリだけで何冊俺に読めと?
move $a0, $(´・ω・`)知らんがな li $v0, 4 syscall
やねうらおが今年中に これぞ!っていうアセンブラ本出すとかいってたけど、 あれはどうなった?
>>970 mainの後ろの ret と int 0x20 は不要。
int20は確かに要らないが、こんなのが唐突に出てくる文脈が 読めない漏れはVIPPERにはなれなさそうだ。
アセンブラ… やらないか? ウホッ!(AAry
>>978 (プログラム実行前にDOSがスタックの先頭に0000hを入れる)
↓
main からスタート
↓
func のアドレスをスタックに積む
↓
(最初の) ret で func にジャンプ
↓
文字列表示
↓
(func 最後の) ret で 0000h にジャンプ
↓
0000h にはCP/Mとの互換性から、あらかじめ "INT 20h" のコードが入っているため
プログラムが終了する。
スレタイはどうすべ?
(0w0)ウェーイは、なんか妙に残るというか気に入ってしまったからな 次も良いの頼むぜ
>>980 そっか、callじゃないからmainには戻ってこないんだった。勘違いしてた。
986 :
940 :2005/11/24(木) 01:09:43
>>984 そのスレタイ、あんまりいくないお。 ><
987 :
983 :2005/11/24(木) 01:34:15
真似して一丁書いてみたぞw cseg segment assume cs:cseg org 100h main: mov ah,09h mov dx,offset msg int 21h mov ah,4ch msg db "ヘ!? ダメポorz", '$' cseg ends end
梅
埋め
普段何も発言出来ない私が梅
1日200レスしか出来ない俺が埋め
うめー
うまー
995
996
997
998
999
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。