386の命令は可変長。命令の構造は以下の通り。この辺りは誰でも知ってるか。 前置バイト + オペコード + MODRM + アドレスディスプレースメント + 即値定数 386のこの命令の表現形式を頭に叩き込んでるところ。掛け算の九九並に体に馴染ませてから NTLDRを読み始めたいと思います。
昔リスティングファイルを読んで マシン語とアセンブリ言語の対応を表にしたことがあったなぁ。 CC(INT 3) と CD xx(INT xx) なら今でも覚えてるけど、 他はおぼろげだなぁ。
ntldrを読もうとしましたが、どうにも難しい。
BIOSから直接ロードされるファイルはNTDETECT.COMなんでしょうか。
適当に読んで行けばそのうち分りそうなものですけど。
今の時点では、NTDETECT.COM -> ntldr -> NTOSKRNL.EXE
の順番にロードされると勝手に予想してますけど。
NTDETECTの中を見ると十六進表記で'66'が異様に沢山ならんでいます。
0x66の意味は上のインテルのマニュアルの中巻の2章に載っています。
命令プリフィックス(上では前置バイトと書いたけどこれは古い言い方らしい)とは
G1 ロック及びリピートプリフィックス
G2 セグメントオーバーライドプリフィックス
G3 オペランドサイズオーバーライド
G4 アドレスサイズオーバーライド
の4グループに分かれます。これらはそれぞれ1byteを使って表現されます。
ということで、命令プリフィックスのバイト数は0から4バイトになると思われます。
グループの順序は不問。一つのグループから複数のプリフィックスを指定することは
ダメらしいです。1バイトオペコードマップに埋め込まれて記載されてます。
個別の値をこの際暗記してしまえば、命令文に対する見通しも良くなるはずです。
カッコ内は続くオペコードが決まっている場合のそれ
G1 = {F0(LOCK), F2(REPNE,REPNZ), F3(REP,REPE,REPZ)}
G2 = {2E, 36, 3E, 26, 64, 65} それぞれCS, SS, DS, ES, FS, GSセグメントを指定
G3 = 66
G4 = 67
です。なんのことはありません。
>>174 しばらくは機械語の読み方の練習になりますが、
読めるようになったら一緒にがんばって逝きましょう。
ntldrから起動されるものはNTOSKRNL.EXE以外にも
hal.dllやNTKRNLPA.EXEなんかも同時にメモリにロードされるのかな。
ntldrでどこまで準備しているのかは分らないけど、
おそらくPE、PGビットはオンになっているはず。
この辺りの事情に詳しい人はWindows板なんかにいるのかな。
ちなみに2000のntldrはXPをブートできないらしい。
http://www.sitetm.net/column/data/pc/1044978109.html NTOSKRNL.EXEに制御を渡すまでにどこまで準備しておくのか。
ここがカーネルの設計方針とどう関わってくるのか、ヘタレな漏れには
いまいち分らず。Linuxは例外として、BSDでは古いローダでも
起動できるのを考えると、あんまり良い印象なし。
177 :
名無し@沢村 :03/06/22 06:38
>>173 違うよ。
オペコード(1または2バイト)+MODRM(1バイト)+SIB(1バイト)+アドレスディスプレースメント(1または2または4バイト)+即値定数(1または2または4バイト)
だよ。
またMODRMはmod(7-6ビット)、reg(5-3ビット)、R/M(2-0ビット)の各フィールドからなるんだよ。
例えば、MOV(reg1からreg2へ)命令の場合、
100100w 11reg1reg2なんだよ。
wというのは、16ビットか32ビットかを指定するもので、それによってレジスタが決まるんだよ。
命令によってはオペコードの中にwフィールドがないものもあり、その場合はregフィールドの値だけでレジスタが決まるんだよ。
まあ、他にもややこしいことはいろいろあるよ…
MODRMの説明 MODRMとはmod(上位6,7ビット)とR/M(下位0,1,2ビット)の名前を結合。 MODRM = mod + R/M R/Mはmodビットの状態(11bのときはレジスタ)によってレジスタオペランド(R)、 メモリオペランド(M)の両方を指定できるという意味からR/Mらしい。 真中の3ビットは、レジスタオペランドの指定やオペコード拡張用 (lgdtやlidtみたいな特殊なもの)に使われます。 mod(2bit),真中(3bit),R/M(3bit) 7 6 5 4 3 2 1 0 mod 真中 R/M というもの
まず最初に表現したい命令ありき。そのなかで必要となるオペランドの 有無、種類によってバイト長も変わってくる。 1.オペランド数がゼロの場合は1バイト命令 8bitをフルに使って命令を表現 2.オペランド数が1の場合も1バイト命令 5bitで命令を表現し、残りの3bitでレジスタを指定する。 7 3 2 0 オペコード レジスタ という形 3.オペランド数が2つ(レジスタ、メモリ)の場合は2バイト命令 1バイト目は8bitでオペコードを表現 2バイト目はmodは{00b,01b,10b}のパターン R/Mはメモリオペランド 真中はレジスタ 4.オペランド数が2つ(レジスタ、レジスタ)の場合は2バイト命令 1バイト目は8bitでオペコードを表現 2バイト目はmodは11bのパターン R/M、真中でレジスタ二つを指定 という基本的四つの形式。 真中3ビットを特殊命令に使うケースはここでは省略してます。
MODRMにおけるレジスタ指定のための3bitのパターンをここで暗記。 汎用レジスタを指定する表現 32bit 16bit 8bit 000 EAX AX AL 001 ECX CX CL 010 EDX DX DL 011 EBX BX BL 100 ESP SP AH 101 EBP BP CH 110 ESI SI DH 111 EDI DI BH セグメントレジスタを指定する表現 000 ES 001 CS 010 SS 011 DS 100 FS 101 GS 110 (予約) 111 (予約)
レジスタを表現する3bitの具体的値ひとつにしてもそれだけでは
4通りの意味に読み取れる(000bにしてもEAX,AX,AL,ES)。
それを判別するのはオペコードの種類によって異なるということ。
一般的にはMODRMが必要になる形式はオペランドが二つという命令。
先頭の1byteを見て、オペランド数がいくつなのかをまず連想すれば
速く読めるようになるかな。1byte目が0fなら2バイト命令ということで
MODRMは3バイト目となるのも大事か。
MODRMは上位2bitを見てレジスタ―メモリなのかレジスタ―レジスタの
どちらのパターンなのか判別。16進数で言えば、MODRMが"c0"より大きい値のときは
レジスタ―レジスタというパターン。それ以下のときはレジスタ―メモリ
という形式となる。
そしてレジスタは上の一覧の通り、種類はオペコード次第。
>>177 お待ちしておりました。
>>177 と178〜は同一人物か…?
プレフィクス(0〜4)+オペコード(1〜2)+(MODRM+SIB)(0〜2)+
ディスプレースメント(0〜4)+即値データ(0〜4)
プレフィクスとは、LOCK、REP、REPNE
オペランド&アドレスの16or32のサイズ逆転に、セグメントオーバーライド関連
オペコードは、そのまんま命令で、
MODRM(SIB)は、
>>178 以降で、説明してるようだが、本当に分かってるのだろうか…
別人だったのね…
184 :
名無し@沢村 :03/06/22 10:41
>>180 正しくは、
wフィールドが存在しない命令では、
32bit 16bit
000 EAX AX
001 ECX CX
010 EDX DX
011 EBX BX
100 ESP SP
101 EBP BP
110 ESI SI
111 EDI DI
となり、
wフィールドが存在する命令では、
32bit 16bit 両方
(w=1) (W=1) (W=0)
000 EAX AX AL
001 ECX CX CL
010 EDX DX DL
011 EBX BX BL
100 ESP SP AH
101 EBP BP CH
110 ESI SI DH
111 EDI DI BH
となる
昨日書いたものはレジスタオペランドの表現方法。 今日は[命令・レジスタ・メモリ]という命令文における、 メモリアドレスの表現形式についてまとめてみる。 レジスタオペランド指定のその単純な表現と違い、 メモリオペランドは少し複雑になっている。 mod=00,{R/M,base}=101みたいな特殊なケースもあるし。 自分の中で整理するまでは時間がかかりそうなので、 ここでとりあえず理解している範囲をまとめてみる。 メモリオペランド指定にはMODRMが1byteのものと2byteのものの 2種類に分けられる。2byteMODRMでないと表現できないメモリオペランドとは ・インデックスレジスタを使うもの ・ベースアドレスにESP(つまり100)を指定するもの (R/Mにおける100がMODRM自身の2byte拡張に割り当てられているため) の二通りのケースが考えられる。この二つは1byteのMODRMでは表現できない。 指定されるメモリのアドレス表現は セグメント―ベースアドレス―インデックスアドレス(+スケールファンクタ) ―ディスプレースメント の4部分で指定する。 この4っつの使用は任意である。ただしセグメント指定がないときはデフォルト セグメントのDSを用いるという意味になるし、ベースアドレスが無い時は ディスプレースメントが必要不可欠となる。 メモリ中のアドレス指定において、セグメントレジスタは独立しているからいいとして ベース、インデックス、ディスプレースメントの三つの組み合わせは、 例外があったりして少し複雑である。全ての組み合わせを考慮して、 そのビットパターンを網羅することもいいかもしれないが、具体的バイナリを 読めるようになることに目的をおいているので、あまり厳密には考えない。
1.セグメント デフォルトではDSセグメントを使うが、その他のセグメントを参照する場合は 命令プリフィックスで指定する。(プロテクトモードでは、セグメントレジスタに 指定されているのは当然、セグメントディスクリプタへのインデックス値であって アドレスではない。) 2.ベースアドレス セグメント内におけるベースアドレス。1byteMODRMにおいてはR/Mにおいて32bitの レジスタのみを使える。2byteMODRMの場合は2byte目のbase領域(0-2bit)において 32bitのレジスタを指定する。 3.インデックス これを使うときはMODRMは2byteになる。インデックスレジスタを使わないときは スケールファンクタは00になっていなければならない。 スケールファンクタ(2bit)の値の意味するところは 00 x1 01 x2 10 x4 11 x8 というもの 4.ディスプレースメント MODRMが1byte、2byteに関係なくmodの値が ・00はディスプレースメントなし ・01は8bitのディスプレースメントあり ・10は32bitのディスプレースメントあり という意味。
2byteMODRMについての詳しい図はインテルのマニュアル中巻の図2-1にあります。 というか自分が読んでいる古い386の本と用語が少し代わっています。 2byteのMODRMなどというものはなく、MODRM(1byte)とSIDというらしいです。 意味するところはSIDは2byte目のMODRMと上で言われているものと変わりません。 スケールファンクタとは単にスケールというらしい。 SIDとは上にも書いたように、メモリオペランド表現専用です。 >>沢村様 wフィールドとはなんでしょう?オペコードのどこかのビットということに なるのかな?
ベースレジスタの指定には10種類の値を指定できなくてはいけない。 8(汎用レジスタ)+SID有り+ベースレジスタなし=10種類 そこでいつくかの特殊ケースを設定されている。 ・ESPを指定するはずの100を2byteMODRM有りの意味に使う ・mod=00, {R/M,base}は常識的にはディプレースメントなし +ベースレジスタはEBP(101)という意味になるが、 これを特殊ケースとして、 「ベースレジスタ無し+32bitディスプレースメントあり」の意味に使う これはディスプレースメント無しのモードではEBPをベースレジスタとして 使えないという意味になる。 代用としてはmod=01,R/M=101,ディスプレースメントは0を設定する。 というもの インデックスフィールドに関する例外としては ・100のときはESPをインデックスレジスタとして使う、という意味ではなく、 インデックスレジスタ無しという意味になります。このときスケールは00でなければ ならない。 即値フィールドはディスプレースメントの後と決まっている。 これで、あとはオペコードを暗記するだけでバイナリが読める、はず。
s/ファンクタ/ファクタ/ 自分で書いてていうのもなんだけど、内容めちゃくちゃだな。 インテルのPDFにMODRM,SIDのビットパターン一覧が載ってるから それみて覚えるのが一番効率がいいことは確か、か。
190 :
mathmania ◆uvIGneQQBs :03/06/23 16:59
DOSの機械語(マシン語)と、UNIXの機械語(マシン語)は違うものですか?
DOSとUNIX でマシンが違うならね
あ、DOSとUNIXか、なら一般的には違うものだな。 もし同じCPUであっても DOS は16bitコード UNIXは32bitコードだろうからね
01010101001001010101010101111111111010101001101
>>192 基本的に16bitでも32bitでもCPUが同じなら機械語は同じだろ
ただ、それを解釈するCPU、もしくはCPUのモード(方言)が違うだけ
>>194 まあ基本的にはそうなんだが、
x86の場合はデータサイズが変わっちゃうからねえ。
どっちのモードで動いているか把握しておかないと悲惨な事になるぞ。
よい2進数のエディタはないですか?
198 :
デフォルトの名無しさん :03/07/19 00:21
七輪グゥ?
(^^)
int mc91(int n){ if (n>100) return n-10; else return mc91(mc91(n+1)); } 上のCプログラムを出来ればアセンブリでおながいします m(_ _)m
>>201 しょーがねーな
_mc91:
cmp.l #100,er0
ble 1f
sub.l #10,er0
rts
1:
inc.l #1,er0
jsr @_mc91
jsr @_mc91
rts
展開するのはめんどいので素直に再帰。
>>202 有難う御座います。
しかしプログラム間違えてました申し訳無いです
else return mc91(mc91(n+11));
でした。しかも、MIPSアセンブリ言語でした。
因にプログラムの動きは
n>100の時は1回だけ-10して終了。
n=<100の時はn=91になるまで計算を繰り返す。
でつ
(⌒V⌒) │ ^ ^ │<これからも僕を応援して下さいね(^^)。 ⊂| |つ (_)(_) 山崎パン
第2次記念パピコ
GCCにアセンブリソースを吐かせて勉強しやう
浮動小数点のフォーマット(データ構造)と、四則演算のやり方を説明できる方いませんか? あるいは、こういうこと解説してある本でも良いんですけど。 今はとりあえず我流で3バイトの整数部+1バイトの指数部(X*2^n)でやってるんですが、 なんか違うというか、もっと上手いやり方があるような気がして。
208 :
デフォルトの名無しさん :03/12/15 01:08
>>207 C実践プログラミング(オライリー)に書いてあった
>>208 即レスありがとう。
ググってみると結構高い本みたいですが、探してみます。
>>207 フォーマットは、IEEEの規格があるのでCPUのマニュアルなんかに書いてあるはず。
足し算引き算は、指数部の桁を合わせて仮数部を計算。
掛算は、指数部を足し算して仮数部だけで掛算。
割算は、指数部を引き算して仮数部だけで割算。
誤差がどうのこうのってな事があるので、数値演算の本を読んだほうがいいと思う。
パタヘネにも載ってたな、そういえば
>>210 ,
>>211 レスありがとうございます。
>>211 あ、私の説明が全く不十分だったのですが、8ビットの加減算しか出来ないCPUで
(今使っているのは8051って石の派生チップなんですが)Cのfloat相当の
浮動小数点の処理を効率よくやる方法はないものかな、と思っておりまして。
でもレスありがとうございます。
>>213 浮動小数点のフォーマットがよく分かるよ、
ってことだったんだけど。
>>213 8051か。
外とfloatのデータをやりとりしないなら、
俺フォーマットのほうが幸せかもしれない。
昔Z80で数値演算する本がえらく参考になったが…
もう手に入らんだろうなあ。
000000000000000010010101101100110000000000000000000000001000001100000000000000000000000010000011
00 01 02. 03 04 05 06 07 : 08 09 0A 0B --------------------------------- 00 00 95 B3 00 00 00 83 : 00 00 00. 83
機械語プログラミングってコメントどこに書くの?
E9 0D 48 65 6c 6c 6f 2c 20 77 6f 72 6c 64 21 : ..Hello, world!
220 :
デフォルトの名無しさん :04/02/04 23:13
PC互換機、OSはWindows2kで動作するお勧めのZ80アセンブラは何よ
221 :
名無し@沢村 :04/02/05 19:34
222 :
デフォルトの名無しさん :04/02/06 08:34
PEとCOFFってどう違うの?
・EXEヘッダがある ・PEヘッダがある ・オプショナルヘッダが独自 あとはエクスポート・インポート関係?(´・ω・`)
>>224 乙であります。
来週からそこの資料見て作業しようと思っております。
ありがとうございました。
自分はインストラクションコードへのコンパイルや外部シンボル
などのリロケーションテーブルまでは作成済みの段階であり、
あとはその資料を見ながら適当にexeやobjの形にしていく
だけであります。
今はexeを作成する際に、Cランタイムをmsvcrt.dllから拝借でき
ないか、と考えておりまして、とりあえずmingwのスタートアップ
コードを眺めている次第であります。stdioやmallocとかの初期化は
どうやんのかとか、その辺の情報ありましたら引き続き情報提供
願います。オーバー
226 :
名無し@沢村 :04/02/07 21:12
デバッグ情報のことをきくのはスレ違い? デバッガで見た時わかりやすいように関数名とか埋めこみたいんだけれども
>>226 文字列の表示だけじゃつまらん。TSRの作り方も解説してくれ。
>>228 たいていアセンブラにデバッグ情報を埋め込むためのオプションがあると思うけど。
>>229 bcc32とかで-S付けてアセンブリソース吐かせると、?debugなんちゃらが付いてくるじゃないですか
簡易コンパイラ作りたいので、あの意味が知りたいのです
231 :
名無し@沢村 :04/02/08 23:09
ザコのおまーらよ、言語は何やってる?
C言語?C++?Java?VB?COBOL?HSP?ふっ…おまーらって、ホントザコだな。
おれはE言語やってるね。
おまーら、D言語ってのは聞いたことあるが、E言語って聞いたことないだろ?
おまーらよ、E言語ってのはな、「executive language」日本語に訳すると「実行可能言語」だよ。
まあ、ぶっちゃけ、早い話がマシン語のことなんだよ。わかる?
おまーらよ、E言語はまたの名を「実行可能言語」とか「実行ファイル記述言語」とか呼ばれるよ。
それにしても、E言語ってすげー命名だな。命名者はおれだぞ!このおれだ。
おれはもしかして、E言語の祖と呼ばれるようになるかもしれないな。どうよ?
http://hp.vector.co.jp/authors/VA015412/
http://erights.org/ > Douglas Crockford writes:
> 'I chose E because of the progression B, C.
> I observed that there was no language D.
> I figured it was a bad luck letter, so we moved on to E.
> That 'E' was also the initial of Electric Communities was noticed at the time.
> It also tied in to our development of the Unum distributed object model.'
00101000, 1110010101101000! 10100100?
実際にPEの構造わかっても、スタートアップのランタイムの初期化とか インポートテーブルとか、超面倒ですな。 やる気なくなってきた。
236 :
デフォルトの名無しさん :04/02/15 13:02
おとなしく高級言語つかえよ あがくなって
ふふふ……
238 :
名無し@沢村 :04/02/18 22:08
6E 75 72 75 70 6F
6E 75 72 75 70 6F 6E 75 72 75 70 6F 6E 75 72 75 70 6F 6E 75 72 75 70 6F 6E 75 72 75 70 6F
6E 75 72 75 70 6F 6E 75 72 75 70 6F 6E 75 72 75 70 6F 6E 75 72 75 70 6F 6E 75 72 75 70 6F 6E 75 72 75 70 6F
6E 75 72 75 70 6F
>>239-242 8140814081408140814081408140814081402081510A814081408140814081408140837E814081DA
8151816A0A8140814081408140814081408140814081402F0A814081408140814081408140814081
40202F814081408140815F815F0A814020B3B2B0DD8140814083A12F97B9814081408140207C8140
7C0A81408140B3B2B0DD8140207C2E81977C81408140814081407C81407C8140B6DEAFB6DEAFB6DE
AF0A81408140814081408140814081407C202F207C8140814081408140906C0A8140814081408140
8140814081407C2F81407C814081408140203C2081403E814083A981BF0A81408140814081408140
2081512F8140207C8140815E815E2E82753B814581CD8145292F0A81408140814081408140816981
5183749C638140814081408140814081408140202F20814081A93E3E3233392D323432
あーうぜえ
あぼーん
あぼーん
247 :
デフォルトの名無しさん :04/02/26 14:15
>>184 wフィールドとは8bitのレジスタアクセスが可能な
命令にだけあるフィールドであって、セグメント属性や
命令プリフィックスで指定されるオペランド長(16/32bit)
の指定とは全然別の概念でしょ。
_
/〜ヽ
(。・-・)
>>248 フフフそれはね・・・
゚し-J゚
取鳥砂丘ウザイ
252 :
デフォルトの名無しさん :04/03/02 21:23
ステートメントってどういう意味ですか?
254 :
デフォルトの名無しさん :04/03/11 21:13
消されたんだよ。完全にな。
じゃあなんで254まで透明削除されているんだよ
254 もあぼーんだったんだよ。 多分 254 と同じ人が 255-257 を書き込んだんだと判断したんだろ。
なるほど。 削除報告していないあたり、依頼を見て削除したわけじゃなさそうだな。
だから「”削除”人はがんばりすぎ」とか悪態つかれたんだろうな。 がんばってるのは良いことなのにな。
最近この板うっすら荒らされてるんで、見張っててもらえるのは有り難い。
↓というわけで、以下何事もなかったかのように再始動
実際にPEの構造わかっても、スタートアップのランタイムの初期化とか インポートテーブルとか、超面倒ですな。 やる気なくなってきた。
263 :
名無し@沢村 :04/04/07 03:19
確かにいいかもしれないが、リリースコンパイルしてから公開しろよ
265 :
デフォルトの名無しさん :04/04/09 01:11
凄まじい勢いで良スレ! 俺を導いてくれ!
266 :
デフォルトの名無しさん :04/04/09 01:26
267 :
デフォルトの名無しさん :04/04/09 19:53
アセンブリや機械語に一番近い言語ってC言語なの?
>>267 コンパイルしたら機械語なんです。
若いヒトにはそれがわからんのです。
269 :
デフォルトの名無しさん :04/04/10 04:15
270 :
デフォルトの名無しさん :04/04/10 04:31
272 :
デフォルトの名無しさん :04/04/10 09:47
CPUが対応していない命令セットの場合にどう扱われるのか 教えてください。NOPとして無視されるのでしょうか? (K6-2でSSE命令とか、Pentium4で3DNow!命令とか)
273 :
デフォルトの名無しさん :04/04/10 09:52
274 :
デフォルトの名無しさん :04/04/10 09:59
ありがとうございます。 アプリケーションが不正な処理で 強制終了されるということでしょうか?
勉強不足で、質問が変でした。解決しました。 (DelphiだとEInvalidOpになるようです)
276 :
デフォルトの名無しさん :04/04/12 05:57
アセンブリと機械語って処理速度同じなの?
同じコードの表現方法が違うだけですからね
278 :
デフォルトの名無しさん :04/04/12 08:04
じゃあアセンブリやりゃ機械語必要ないじゃん。
バイナリエディタ
機械語(16進数) 01 08 04 fe 38 22 65 88 アセンブリ(例) LDA $100 STA $101 JMP ADDRESS100 マシン語をバイナリエディタで組んだ人なんて聞いたことない。 もっとも本についていたバイナリデータを打ちこんだことは あるが。。。今だったらあり得ない。 簡単なお絵かきツールだったのだが根性で打ちこんだ15年前。 懐かしい。
281 :
デフォルトの名無しさん :04/05/14 05:32
282 :
名無し@沢村 :04/05/14 05:52
>>277 >同じコードの表現方法が違うだけですからね
そうとも限らないぞ。
解釈の仕方によっては、同じアセンブリ言語が別のマシン語コードに翻訳される場合も有り得る。
>>280 >今だったらあり得ない。
まーそう仰らずに
「ファイル名を指定して実行」で debug と入れてくださいな。
284 :
デフォルトの名無しさん :04/05/14 11:10
>>282 究極だったのはAlphaプロセッサー上でのVAXマクロコンパイラだったなあ。
VAXアセンブリで書かれたコードをコンパイルしてAlphaのバイナリを
吐き出すというゲテモノ。
機械の言語を手に入れるため、僕はメーテルと旅に・・・。
↓メーテルのエロシーンの回数を答えよ
「次は惑星アライメントー、アライメントー」 「惑星アライメント・・・、半端者は生きることを許されない星・・・」
LD A, R LD (ERO), A
290 :
デフォルトの名無しさん :04/06/24 12:07
PE/COFFの公式ドキュメントの翻訳がどこかのHPにあったと思いましたが、 あれ、どこにあるかわかる人いますか?
>>291 あー、これこれ。探してたのは。どもね。
何かとおもったら、MSDNに載ってる奴じゃん。
ギーーーッゴッ、ギーゴッゴギゴーッギゴギー…
昔はマイコンBASICのノリで機械語(16進ダンプ)を入力したもんだよ。 ああ、昭和は遠くなりにけり。
296 :
デフォルトの名無しさん :04/07/15 21:19
x86のニーモニック表(オペコード付き)って何処かにないかな?
297 :
デフォルトの名無しさん :04/07/15 21:41
機械語でWindowsのexeを作る開設サイト知りませんか?
>>280 まぁマシン語を組むのに必要なのはどちらかというと
CADとかアイディアプロセッサとかの類だからな。
昔256bitRISCの機械語体系を自作したなあ。 命令はMSB側4ビットで、次の4ビットがアドレッシングで、残りは全部データっつう 簡単な代物だけど。 アセンブラを自作するのが面倒で、それで遊ぶのをやめてしまったな。 今からすると命令16個しかないから、簡単そうだけど。
このスレで言うところのマシン語って何を指すの?
定義厨は帰っていいよ
なんだよ定義厨って。
304 :
デフォルトの名無しさん :04/10/15 06:48:34
同じ系統のCPUの進化を追いかけるより、86系の次は68系やってみるとか。 その方がもっと君の腕の幅が広がるだろう。
プロセッサは一つの言語みたいなもんだからな。 x86だけやってても駄目。いろんな言語を選り好みなく 使わないと。
307 :
デフォルトの名無しさん :04/10/15 14:42:42
x86 マシン (というかDOS/V機) のエミュレータ上で マシン語の勉強したいんですけど、 何かいいのありますか?
dos窓でdebugって打ってみ
309 :
ほんたま :04/10/15 19:31:12
>>307 おみゃ〜よ、そりは「スリムドカン」を使って勉強するといいよ。
「スリドカン」はdos窓で動くプログラムはもちろんのこと、windowsプログラムもサクッ!とつくれるマシン語でプログラムする開発環境よ。
おまけにダイアログボックスを編集してプログラムに取り込めるリソースエディタまで付属しているから、ちょっとしたマシン語版のVisual C++といえるな♪
これだけのものが無料でダウンロードできるんだから、マシン語を勉強したいと思う者にはバイブル的存在だ。
「スリムドカン」によるプログラミングの詳しい解説は↓のホームページを見るといいよ♪
http://hp.vector.co.jp/authors/VA015412/
>309 ありがとうございます。 評価してみたいと思います。
ほんたまタイーホ
アーア、リアルやっちゃった。ほんたまちゃん、これはマジまずいよ。 リソース書き換え出来るのはよく知られてはいるけどさ、色んな海外製 フリー/シェアソフトの日本語化とかやってるの見ても、直接リソース 書き換えているのって無いじゃん。みんなパッチという形にしてるじゃん。なんでかな? 直接弄ったら、著作権侵害されたとかリバースエンジニアリングされた とか、クラックされたとかで訴えられたりしないようにするためにわざわざパッチという グレーな形態にしてごまかしているんだよ。それなのに、よりによってマイクロソフトの製品に 対して実例で図付きで示すなんて、勇気あるな。しかもワードなんかもやってみようなんて 改竄を薦めているし。これはマジ訴えられる可能性大きいよ。 まあ、訴えられないにしても、ベクターにチクッたら即刻ID永久削除だね。 せっかくいいソフト作ってたのにかわいそう。スリムドカンは永久に 抹殺されるのか。残念。こういうコラム書くなら別のサイトで完全に名前 隠してやれば良かったのに。正直な人なんだなぁ。
314 :
ほんたま :04/10/20 04:06:59
おみゃ〜らよ、スリムドカン1.1.9アップしたから見ちみれ? おみゃ〜らよ、リソースエディタ2つ以上つくれるようになったぞ。不完全ではあるがな… おみゃ〜らよ、サンプルのDaialog.asmをビルドすると、2つあるダイアログのうちのひとつが開き問題ないように見える。 だがこりはリソース内部ではデータ がまだどっかおかしくなっているのだ。だからいろいろいじくるとボロが出てくる… おみゃ〜らよ、もう少しデバッグしなけれなならんようだ… だがここまでくるとおりはもはや神だな♪ だがおみゃ〜らよ、おりは次のメニューの作成に移ってもいいかな?どうじ? メニューをつくりながら、ひまを見てはダイアログをあとちょっとデバッグするという路線でいこうと思うのよ。自分じどうか?
315 :
デフォルトの名無しさん :04/10/20 07:04:10
>レッドセッ・・・あー、ソックス ワラタ
スリムド韓流
317 :
デフォルトの名無しさん :04/10/20 20:30:02
318 :
ほんたま :04/10/26 22:54:26
おみゃ〜ら〜、「スリムドカン」のダイアログエディタが完全になったぞ。吉報だ! おみゃ〜ら〜、「スリムドカン」のダイアログエディタはひとつのダイアログばかりでなく、複数のダイアログを自在に編集し、しかもそれをメインウィンドウから別々に開くことができるまでに進化したぞ!わかるか? つまりおりは神だってこと!! おみゃ〜らよ、一応自己テストではバグは出なかったが、使っているうちにバグが見つかるかもしれんから、そのときは報告してくれ♪ おみゃ〜らよ、「スリムドカン」もいよいよ完全なダイアログエディタを備えるまでになったってことだ!! おりは神だな♪ おみゃ〜らよ、次はいよいよメニューエディタの作成に取り掛かるぞ! 今年中にメニューエディタ、アイコンエディタまでは完成させときたいな♪どうよ?おみゃ〜ら〜? おりは神だな♪
319 :
8086アセンブリ言語の質問。 :04/10/27 07:12:35
このC言語を8086アセンブリに変換したらどうなりますか? count=0 for(i=0;i<=1499;i++) { if(Array(i)<0) { Array(i) = -Array(i) count++ } } ;Arrayはsigned 32bitsの整数です。 ;どなたかお願いします。
それのどこが C なんだ?
322 :
デフォルトの名無しさん :04/10/27 18:58:28
Write an 8086 assembly language mudule that adds the following(partial) variable as signed number and leaves the answer in ANSWER. That is, ANSWER = Dbyte + Dword + DDword どなたか、help meっす。
323 :
デフォルトの名無しさん :04/10/27 19:00:24
ちなみに、DDword = Double word.
324 :
デフォルトの名無しさん :04/10/27 19:01:57
同級生に聞けば? たぶんどっかの工業高校でしょ?
質問スレだった orz
326 :
デフォルトの名無しさん :04/10/27 19:17:30
誰か、わかりますか? 立て続けにすいません。 1. Write an 8086 assembly language module that emulates the C language program section shown. The data Array is a long integer (signed 32 bits). count = 0; for ( i = 0;i<=1499;i + +) { if (Array(i)<0) { Array(i) = -Array(i) count + + } } 2. Write an 8086 assembly language module that adds the following (partial) variable as signed number and leaves the answer in ANSWER. That is ANSWER = Dbyte+Dword+DDword (DDword is double word) 3. Write equivalent string instruction for these two program portions : a) mov ax, [SI] mov [DI],ax inc SI inc DI b) mov ax, [SI] dec SI dec SI
ここは宿題スレだったんだっけか?
この問題作った奴かなりアフォ
329 :
デフォルトの名無しさん :04/10/28 12:47:14
ついでにC language program sectionがCで書かれていない。 8086にはDDwordはない。 問題が不適当なので、答えは書けない。 てか、こんな問題を出す低レベルな学校やめちまえ。
写し間違いじゃネーノ? Q.2 なんて余計な "D" 取れば意味通じるし。
何度も繰り返して間違えるか?w
某スレでとっくに解決済 もうこんなスレこないだろ
334 :
デフォルトの名無しさん :04/10/28 20:22:04
おめでてーな。もうね、アホかと。馬鹿かと。 8086には、ここで云うDDwordくらいあるだろゴルァ! DDword is double word って書いてあるだろ。16+16=32 bitだよ。ボケが。 得意げな顔して何が、「8086にはDDwordはない。問題が不適当なので、 答えは書けない。」だよ。お前は本当に8086知ってるのかと問いたい。 問い詰めたい。小1時間問い詰めたい。お前、偉そうに書込みたいだけちゃうんかと。
335 :
ほんたま :04/10/28 22:12:02
>>334 おみゃ〜よ、Dwordがすでにdouble wordだよ。わかるか?
つまりDwordがすでに16+16=32 bitなんだよ。
ちなみにwordなら8+8=16 bitな。
だからおみゃ〜よ、DDwordとDが2つつけば、double double wordのことだよ。
つまり32+32=64 bitな。わかるか?
自作自演乙
337 :
デフォルトの名無しさん :04/10/29 00:02:41
>>335 ほんたま、中坊レベルの英語も出来んのか。カワイソウ
その理論だとDbyteはdouble byteってことになるが、
wordも使ってるのに、double byteはないでしょう。
最初のDはdigitで、ここでは単に数値を意味してる。
1-tape TuringMachineのプログラミングで悩んでいます。 教えてください
339 :
ほんたま :04/11/03 22:53:15
おみゃ〜ら〜、すげーぞ〜!!! おみゃ〜ら〜、「スリムドカン」の最新版をアップしたぞ〜♪ おみゃ〜ら〜、「スリムドカン」の最新版はすげーぞ〜♪ まずダイアログエディタにバグが見つかったので、それを直した。 次におみゃ〜らよ、サンプルプログラムをすこぶる充実させたから、見ちみれ? おみゃ〜ら〜、サンプルにはビットマップの描画サンプルと、「ファイルを開く」コモンダイアログを出すサンプルが仲間入りしたぞ〜。わかる? 特に「ファイルを開く」コモンダイアログを出すのは難しく、nasmとかのいいサンプルがないか探したんだが、結局見つからず自力で実装したという次第よ。 おみゃ〜ら〜、「スリムドカン」のサンプルもいよいよ「猫でもわかる…」のサンプルと同レベルのものが登場してきたよ。 つまり、「スリムドカン」はいよいよ中級のウインドウズソフトがつくれるソフトになってきたってこと!! おみゃ〜ら〜、サンプルにビットマップの描画サンプルと、「ファイルを開く」コモンダイアログを出すサンプルがあるってことは、もはや「スリムドカン」でつくれないウインドウズソフトはないといっても過言ではないのではなかろうか? どうじ?おりはもはやここまで来ると神だな♪自分じどうじ?
ウザイ・・・ ↑のマルチレス削除依頼通るか?
いいじゃん。ほんたま、面知れ-よ。 所構わず突如投入される単発質問よりよっぽどいい
甘やかすな
343 :
ほんたま :04/11/05 23:29:38
345 :
ほんたま :04/11/06 06:30:18
ほんたま最高! 神! 小鳥!
347 :
ほんたま :04/11/08 23:02:36
おみゃ〜ら〜、サンプルアップしたぞ〜♪ホームページもアップしたぞ〜♪宇宙一すげぞ〜♪ おみゃ〜らよ、なぜ宇宙一すげーかわかるかな? おみゃ〜らよ、おりはな、「Visual C++」で自作したDLLをスリムドカンでつくったプログラムから呼び出すのに成功したんだよ!わかる? おみゃ〜らよ、DLLを呼び出すプログラムを「Visual C++」」でつくるには、Libファイルをリンクに設定したり、ヘッダファイルをインクルードしたりとやるべきことは多いだろ? おみゃ〜らよ、DLLを呼び出すプログラムを「HSP」でつくるにも、やはりDLLの他に「.as」ファイルが必要だよ。 だが、「スリムドカン」の場合、DLLの他には一切何も必要ないんだな〜う〜ん、これが…自分じわかる? つまり「スリムドカン」の場合、DLLさえあればDLLを呼び出すプログラムがビルドできるってわけ♪ おみゃ〜らよ、おりは宇宙一画期的だと思わないか? おみゃ〜らよ、宇宙一すげ〜とわめいたのはそういうことよ♪ おみゃ〜らよ、自分じどうじ?
HSPとの結婚・・・
350 :
デフォルトの名無しさん :04/11/09 16:26:11
くっ泣かせやがって
ひらめいた!
352 :
デフォルトの名無しさん :04/11/22 16:26:14
353 :
emulator 8086 :04/12/07 13:54:09
現在のRTC(real time clock)をメモリーに読み書きして日付けを1月16日、1978年に変える アセンブラ言語(emulator8086 & logic flex使用。)を書いてます。console portのcarriage returnに基づいて日付を outputしなければなりません。一応、プログラムを書いたんですが未完成です。このcodeのbcdsioのsubroutineをちょっと変えなきゃいけないと思うのですが。 もしわかる人がいたら、助けてください。
354 :
emulator 8086 :04/12/07 13:55:51
コードです。 start:movah,00h moval,11100011b mov dx,1 int14h movah,04h int1Ah jcerror movcentury,ch mov year, cl movmonth,dh movday,dl moval,month callbcdsio moval,'/' callsiochar moval,day callbcdsio moval,'/' callsiochar moval,century callbcdsio moval,year callbcdsio
355 :
emulator 8086 :04/12/07 13:56:26
code続きです。 error: moval,0dh callsiochar moval,0ah callsiochar ret bcdsio: movch,al movcl,4 shral,cl oral,30h callsiochar moval, ch andal,0Fh oral,30h callsiochar ret siochar: movdx,1 movah,01h int14h ret centurydb ? yeardb ? monthdb ? daydb ?
356 :
デフォルトの名無しさん :04/12/07 23:28:34
c3RhcnQ6DQoJCW1vdglhaCwgMDBoDQoJCW1vdglhbCwgMTExMDAwMTFiDQoJCW1vdglkeCwgMQ0K CQlpbnQJMTRoDQoNCgkJbW92CWFoLCAwNGgNCgkJaW50CTFBaA0KCQlqYwllcnJvcg0KDQoJCW1v dgljZW50dXJ5LCBjaA0KCQltb3YJeWVhciwgY2wNCgkJbW92CW1vbnRoLCBkaA0KCQltb3YJZGF5 LCBkbA0KDQoJCW1vdglhbCwgbW9udGgNCgkJY2FsbAliY2RzaW8NCgkJbW92CWFsLCAnLycNCgkJ Y2FsbAlzaW9jaGFyDQoJCW1vdglhbCwgZGF5DQoJCWNhbGwJYmNkc2lvDQoJCW1vdglhbCwgJy8n DQoJCWNhbGwJc2lvY2hhcg0KCQltb3YJYWwsIGNlbnR1cnkNCgkJY2FsbAliY2RzaW8NCgkJbW92 CWFsLCB5ZWFyDQoJCWNhbGwJYmNkc2lvDQoNCmVycm9yOg0KCQltb3YJYWwsIDBkaA0KCQljYWxs CXNpb2NoYXINCgkJbW92CWFsLCAwYWgNCgkJY2FsbAlzaW9jaGFyDQoJCXJldA0KDQpiY2RzaW86 DQoJCW1vdgljaCwgYWwNCgkJbW92CWNsLCA0DQoJCXNocglhbCwgY2wNCgkJb3IJYWwsIDMwaA0K CQljYWxsCXNpb2NoYXINCgkJbW92CWFsLCBjaA0KCQlhbmQJYWwsIDBGaA0KCQlvcglhbCwgMzBo DQoJCWNhbGwJc2lvY2hhcg0KCQlyZXQNCg0Kc2lvY2hhcjoNCgkJbW92CWR4LCAxDQoJCW1vdglh aCwgMDFoDQoJCWludAkxNGgNCgkJcmV0DQoNCmNlbnR1cnkJZGIgPw0KeWVhcglkYiA/DQptb250 aAlkYiA/DQpkYXkJCWRiID8NCg==
357 :
デフォルトの名無しさん :04/12/13 20:21:20
ちょっと質問。画面にAを出すらしいコードを書いたんですが(暇だったので)int命令のところで止まってしまう。 なぜでしょう?ちなみに、コードそのものはデバッガのCPU画面で見たアセンブリコードを見る限り正しいんですが...。 #define _CODE(X) (((void (*)())X)()) int main(int,char**,char**) { _CODE ( "\x54"//PUSH ESP "\x57"//PUSH EDI "\xB4" "\x02"//MOVE AH 02h "\xB7" "\x41"//MOVE BD 41h "\xCD" "\x21"//INT 21h "\x5F"//POP EDI "\x5C"//POP ESP "\xC3"//RET ); return 0; }
DOS窓で debug コマンドでロードしてから実行してみろ
1F 8B 08 08 20 7B BD 41 02 0B 65 7A 72 6D 69 64 32 2E 64 6C 6C 00 F3 8D 9A C0 C0 CC C0 C0 C0 02 C4 FF FF 33 30 EC 60 80 00 07 06 C2 60 03 10 F3 C9 EF E2 63 D8 C2 79 56 71 07 A3 CF 59 C5 90 8C CC 62 85 82 A2 FC F4 A2 C4 5C 85 E4 C4 BC BC FC 12 85 A4 54 85 A2 D2 3C 85 CC 3C 05 17 FF 60 85 DC FC 94 54 3D 5E 5E 2E 15 A8 19 EE D7 BF DF 66 DE 36 B3 03 86 FF 4F EB EE 60 02 D2 DF 56 76 81 E9 A0 CC E4 0C 90 38 CC CE 00 57 06 06 1F 46 66 06 F9 EA BD 8E 30 B1 07 0C 7C 8A DC 8C AC 3C 0C 4C 50 8F 80 80 00 14 2B 40 79 20 36 13 42 1A 46 83 3D 0A E5 30 C1 34 0A 20 D3 50 0A 68 4E 00 11 61 C2 60 C0 C0 C0 C3 40 7D A0 57 92 5A 51 02 A4 DD 60 0E 42 F6 2B 14 00 9D 98 A0 57 94 92 58 92 08 75 AB 02 54 1D 1B AA 3A A0 97 1D F4 8A 52 73 F2 93 A1 6E 35 80 AA E3 C0 50 E7 C4 30 0A 86 35 D8 C1 08 24 0E F1 30 84 85 07 EE 53 03 E6 92 EE 1A 15 91 9D A0 74 F0 79 29 58 2A 32 3E EE 10 07 83 F6 9D 8F 8D 0C 13 22 E7 9A 98 4B EB C5 07 EB 88 29 3A EE C9 3F 20 10 C1 DB A0 20 FF 3F D5 D2 EC CB 68 38 0E 65 00 2B 4B 8D 80 E5 05 28 CE 61 58 03 C8 D7 01 62 03 20 E6 00 96 39 76 E0 B2 34 B5 AA 28 37 33 C5 48 2F 25 27 87 C1 39 31 27 C7 AD 34 2F B9 24 33 3F 2F B8 24 B1 A8 64 34 30 87 1A 10 80 D4 01 3C 06 A3 41 31 12 01 00 BB 4E 94 BB 00 0A 00 00
360 :
デフォルトの名無しさん :04/12/14 14:18:17
HALT
ん?このすれパンチカード作る人の為のスレ?
age
365 :
デフォルトの名無しさん :04/12/17 19:48:00
C9
76
>>367 カナをふれといっといて C30000 ですか。そうですか。JP 0 ですか。
C7
♪ノリのいい人ね。CF
ある掲示板で「011010000111010001110」みたいな書き込みがあったんですけど、 これをどうやったら日本語、もしくはURLか何かに変換できますか? 変換コードは多分shift-JISだと思います。
右か左かどちらかの端から8個ずつに区切って16進数に直す。それを漢字コード表で探す。 その例なら左から68,74,7x 右からだとxB,0E,8E 半端の所はxで書いた。 区切る所を間違えると文字らしいコードにならないよ。
>>371 レスありがとうございます。
>>370 に書いた数列は実は最初のごく一部で、実際の書き込み
を全て16進数に直してみたら、こうなりました。
68 74 74 74 3A 2F 2F 66 34 31 2E 61 61 61
2E 6C 69 76 65 64 6F 6F 72 2E 6A 70 2F 2F
6B 61 7A 75 6B 6F 62 65 2F 70 68 70 6A 6A
79 66 75 6C 2F 6A 6F 79 66 75 6C 2E 70 68 70
これをいちいちコード表を見ながら変換していくのは面倒なので、
何かいいツール、任意の変換コードを使って自動で変換できる
やつなんかありませんか?
また、最初の2進数を16進数に変換する段階で、このツール
ttp://www.vector.co.jp/soft/win95/personal/se139137.html を使ったんですけど、これだと一度に8文字ずつしか変換できないので、
もっと効率的に変換できるツールはありませんか?
よろしくお願いします。
2進文字列をバイナリにしてファイルにでも落とせばいいんじゃ?
>>372 undump とか。
httt://f41.aaa.livedoor.jp//kazukobe/phpjjyful/joyful.php
ページが見つかりませんけど。
375 :
デフォルトの名無しさん :04/12/30 16:00:12
確かx86のニーモニックのバイナリがサクっと出るアプリが あった気がするのですが、どなたかご存じないですか?
gcc
http://hp.vector.co.jp/authors/VA015412/ ここの"Hello World"の記事なのですが
B4 09 BA 0B 01 CD 21 B4 4C CD 21 91 E5 89 BA 97
65 8E 71 82 CD 8F 97 8E 71 83 41 83 69 82 CC 92
86 82 C5 88 EA 94 D4 83 4C 83 8C 83 43 82 C5 83
58 83 65 83 4C 81 F4 0D 0A 24
これをメモ帳で貼り付けてcomに拡張子を直して
コマンドプロンプトで実行しても、何もなりません。
なぜでしょうか?
そりゃ379が馬鹿だから かな
そういや最近、ほんたまを見かけないな。 電気代払えずに凍死したかな?
>>379 しょうがねぇ、つられてやるか
バイナリエディタを使え
>>381 マ板の某スレで初心者のプログラムを間違っていると罵倒したあげく、反論を食らって撃沈された。
しかも、直後に初心者でもやらないよいような勘違いを論拠に、見当外れの勝利宣言をして再度轟沈。
たぶん恥ずかしくて出てこれないのではないかと思われ。
#リアルタイムで見ててかなーり面白かった。
いや、メモ帳で貼り付けてcomって拡張子かえただけでなる、みたいに 書いてあるじゃないですか。
嘘を嘘と見抜けない人には(機械語の利用は)難しい
嘘なのか。
嘘っつーか、そのHPつくった人間の知識自体が(ry
てすと
390 :
デフォルトの名無しさん :05/01/12 13:47:23
文字列の文字数を数える関数が、機械語2,3個で見事な再帰コードになってる 演習問題があったな。
>>359 おっ、なかなか面白いプログラムだね。
まあ、実用性重視して、4行目の一つ目、C9
としたのは、まあ許せるけど、次の EF は、×。
正解は、EAだ。 そうしないと無限ループに
おちいる。 とにかく、楽しいコーディングだな。
この機械言語見てるだけで、半日はイケる。
C9がRETだから8085かと思ったけど、違ってたみたい。
395 :
デフォルトの名無しさん :05/03/04 20:54:19
ここか沢村のスレは?
やつは既に葬り去られた。
いなくなってから分る良コテ
ほんたまってよんでやれ
やめれ。調子に乗って戻ってきたら困るだろ。
いなくてもつまんねーからいたほうがいいじゃん。
PEヘッダの中の、Export Tableの次にある、 Import Table address and size (offset 104) と、PEヘッダの後ろのほうにある IAT(Import Address Table) address and size (offset 192) てどう違うの?(pecoff.doc表記)
402 :
デフォルトの名無しさん :05/03/05 15:37:44
sageで聞いてもあれだぞー。(通行人少ないとも思えるし) 思い切ってあげてみる。
>>402 じゃあ教えてくれ!!
スレ主のあれの仕様上の欠陥は64bitCPU対応OSのセキュリテーで動かなくなることなのか??
あと、セクションの並びって、Virtual Address順じゃないといけない、 とかいう決まりってあるんですかね。 例えば セクションの並びが .text(Virtual Address= 0x1000 raw addres=0x400) .data(Virtual Address= 0x2000 raw addres=0x800) の場合、 .data(Virtual Address 0x2000 raw addres=0x400) .text(Virtual Address 0x1000 raw addres=0x800) という配置をして良いのかどうか。
ほんたまで検索したら でた。 ほんとうにたまげた〜話 略してほんたま あれはほんたま氏のサイトではない。
>>393 はネタですよね?
私には信じられません。
407 :
デフォルトの名無しさん :05/03/07 21:21:07
それは「.com」ファイルなのですか?
無限ループにならないというか「不正な〜」で終了させられる。
>>356 はbase32ですか?
あ32じゃねえ64だ。 アセンブリで書かれてた。
なんだよ
>>354 をbase64エンコードしただけかよ。
>>406 >>359 は何マシンか解りますか?
条件によっても変わってくるけど、
EF:out dx,eax
で良いか?
EAだとjmpになった。
>>410 いえいえ、そういうんではなくて、
なぜあれで解ってしまうのか理解できなかったってことです((;^_^A
本当にわかってるんですね。。。
えっ!?いやバイナリィエディタでぶち込んでnasmなどのあれに 付属している虐アセンブル機にかけるという手順。
流れからすると8086っぽいから
>>412 で正解を導き出せないのか?
フォンタマ氏のスレは埋めさせてもらう。
フォンタマ氏のスレは埋めさせてもらう。
フォンタマ氏のスレは埋めさせてもらう。
フォンタマ氏のスレは埋めさせてもらう。 フォンタマ氏のスレは埋めさせてもらう。 フォンタマ氏のスレは埋めさせてもらう。
フォンタマ氏のスレは埋めさせてもらう。 フォンタマ氏のスレは埋めさせてもらう。 フォンタマ氏のスレは埋めさせてもらう。
フォンタマ氏のスレは埋めさせてもらう。 フォンタマ氏のスレは埋めさせてもらう。 フォンタマ氏のスレは埋めさせてもらう。
フォンタマ氏のスレは埋めさせてもらう。 フォンタマ氏のスレは埋めさせてもらう。 フォンタマ氏のスレは埋めさせてもらう。 フォンタマ氏のスレは埋めさせてもらう。 フォンタマ氏のスレは埋めさせてもらう。 フォンタマ氏のスレは埋めさせてもらう。 フォンタマ氏のスレは埋めさせてもらう。 フォンタマ氏のスレは埋めさせてもらう。 フォンタマ氏のスレは埋めさせてもらう。
また変なのが涌いてきたな。
フォンタマ氏のスレは埋めさせてもらう。 フォンタマ氏のスレは埋めさせてもらう。 フォンタマ氏のスレは埋めさせてもらう。 フォンタマ氏のスレは埋めさせてもらう。 フォンタマ氏のスレは埋めさせてもらう。 フォンタマ氏のスレは埋めさせてもらう。 フォンタマ氏のスレは埋めさせてもらう。 フォンタマ氏のスレは埋めさせてもらう。 フォンタマ氏のスレは埋めさせてもらう。
もうこのスレは無意味だ。だれか別の立てて。
>>423 専用ブラウザにNGワード設定して透明あぼ〜んで放置しとき。
だがワードを変えてくるぞきっと。
427 :
デフォルトの名無しさん :05/03/08 19:29:57
・・・。
・・・・・・。
・・・・・・・・・。
あぼーん
あぼーん
あぼーん
あぼーん
あぼーん
あぼーん
あぼーん
あぼーん
あぼーん
あぼーん
あぼーん
あぼーん
あぼーん
445 :
<><><>>>>>>>>>>444 :05/03/10 12:51:51
<><><><>
おちろーーー糞スレがあっ!! ポカポンタス!!
あのさぁ、ここ沢村のスレじゃねーんだけど。
450 :
デフォルトの名無しさん :05/03/11 23:58:36
違うのか?
451 :
デフォルトの名無しさん :05/03/11 23:59:11
案内してくれたらおとなしく立ち去る。
だがここの1はほんたまじゃないのか? 口調や内容から似ているキガスッケド。 しかし教えてもらったからには猿しかない。
>>453 あの自己顕示欲の塊がスレ立てて半年近く書き込みをしないなんて考えられんだろ。
漏れもほんたまの立てたスレ説に一票 初めの頃は来てたように思う 途中から自己顕示欲が満たされなくなって移動した模様
456 :
デフォルトの名無しさん :05/03/12 10:33:26
自己顕示欲というか恥を晒したために逃げた。
>>455 ここは普通の質問スレとして機能してるんだから、沢村が立てたスレか他人様のスレかは関係ないと思うが。
それに、何より荒しは迷惑なんだよな。
>>450 が、沢村の立てたスレが目ざわりだから埋め立てるっていうなら、代替になるスレを立てるか、すでにあるスレに住人を誘導してから埋め立てをするべきだ。
それに単に埋め立てだけが目的なら、他人がNGワードで透明あぼーんできるように特徴的なフレーズを埋めこんだ書き込みにするべきだろ。
おそらく
>>450 が沢村で自分の恥がいつまでも晒されるのに耐えられず
スレ消化書き込みを始めたということにしておいてこの話はおしまい。
賛成。
ほんたまのバカがこのスレを賑わせたのも事実。
じゃ、ここはほんたまアンチスレとして、別にマシン語スレ立てる? PEの中身とかリンカとかの話がしたいんだけど。
あんな過去の遺物なんざ無視。
>>462 それもそうですね。
タイトルは「あれ以外の機械語」でお願いします。
PEとかリンカってOSスレのような希ガス
リンカは機械語スレでもいいよ。アドレスの解決法など機械語依存の話が多いし。 機能は似ててもローダだとOSがらみになりそう。
機械語を学べるツールってないの? ほんたまのツール面白そうなんだが、周りの話を聞いてると不安で仕方ない。
Win系OS「今は動くさそりゃあ。」 WinXPSP2「俺はうごかないらしい。」 ほんたま氏のマシーンはNT 4.0だから 「それ以外のWinの不都合は直しようが無い」 らしい。
連投するけどいいですか? 「ほんたま氏が居れば発展したのにな。」 と言う人も居る。 本人が消えたのだよ。それが一番の問題。 機械語学びたいなら 一対一であれだという、アセンブラでも良い気がする。
>>467 冗談抜きでアレはやめたほうがいい。
あのツールは発想というか、プログラミングに対する考え方が現在の基準から30年は遅れているし、何より作った奴の知識が無さ過ぎる。
解説ページに堂々と嘘書いて、間違いを指摘されても直す気配すらないんだから。
悪いこといわないから普通のアセンブラ使いなさいって。
頭の中でビット演算してマシンコードを直書きできますなんてのは、技術じゃなくて宴会芸の部類。
俺も使ってるやつだ。 というか名前が RadAsm だから検索にかかる 確率が高いと推理してみる。
>>467 Cで作って逆汗とかデバッグとかすれば十分にいける。
あとはアセンブリコードの意味とかをどっかの汗入門みたいなとこで照らし合わせてみればいい。
ちなみに俺はOllyDbgってデバッガ使ってる。英語だけど性能はかなりのもの。
検索すればすぐに出てくる。
時間経ちすぎでいない可能性大。
型変換するにはどうすればいいですか? 例えば…403000に64と入ってたとしてこれをchar*型で100つまり、0x313030にするには?
訂正: 403000に0x64と入ってたとして
0x64なら0x313030を代入という条件分岐を書く
>>476 言っていることが解りませんがこうですか?
0x64(10進数で100)
1,0,0の文字コードが0x31,0x30,0x30
あなたの言いたいことは
a=100
printf("%s",a);
(のような事)にあたる
アセンブラのコード希望
変換サブルーチンを使えばいいんじゃなかろうか
>>478 NASM表記のx86で
mov eax,100
push 0x7325
push eax
lea eax,[esp + 4]
push eax
call _printf
>>478 >>480 できました。ありがとうございました。
余談ですが
>>478 は正しくは
int i = 0x64; //100
str s;
sprintf(s,"%d",i);
です。
また教えてで申し訳ないんですが、今度は逆ができません…
なんだよ皇紀2665/04/01(金) 16:01:14って。 俺のジェーン調子悪だな。 あ〜わからん。俺はパス。
484 :
デフォルトの名無しさん :2005/04/11(月) 21:07:24
おはよーございます
あげんなこのタコ!!てめえ今まで見た中で1、2を争うクズだな!!
486 :
デフォルトの名無しさん :2005/04/12(火) 01:29:57
そうだ 漏れはクズなんだ あ
20年前、卒論で東芝のパソコン(Z-80搭載)を使ってデータ取り込みを するのに、BASICインタープリターじゃ遅くて話にならないので、 機械語で直接組みました。アセンブラーというものがよくわかってなくて 当然もってなかったので、アセンブリ言語でノートに書いたプログラムを Z-80のインストラクションセットの表と首っ引きで16進数に直してそれを 打ち込んで行きました。そんな事を毎日やってたら、卒業する頃には、 よく使う命令は覚えてしまったので、殆ど、機械語表を見なくても 直接16進数でプログラムが書けるようになりました。今は殆ど忘れて しまったけど。
ELF形式、COFF形式などと言うらしい、バイナリフォーマットの仕様を説明した HPご存知でしょうか。 スクリプト言語でNASMクローンをつくれたら面白いかな、と思ったが、 どんなファイルを出力するのかでまずはまってしまて。。。
HEXやSフォーマットにも対応希望
492 :
488 :2005/06/07(火) 23:53:28
ありがとうございます。
まずは
>>490 さんのリンクを読みます。
NASMのソースが簡潔でベストだと思うんだが
binutilsのツールはhexダンプと並べてヘッダー情報を表示してくれるような 機能があれば、よりオブジェクトファイル形式に馴染めるんだけどねえ。 オブジェクトファイルを書き換えるようなアプリケーションのプログラマは、 ヘッダー情報の構造ぐらい暗記してるから、必要ないって感じなのかな?
495 :
しーた :2005/06/09(木) 21:07:26
アセンブラでクイックソートの書き方がわかりません。 教えてください。多少は調べたのですがC言語とかばっかりでアセンブラがありませんでした。 提出が明日で切羽詰ってます。考え方はなんとなく分かるのでソースの書き方を おねがいします。
cc -S
Cが吐いたコードを参考にすればええ
498 :
しーた :2005/06/09(木) 22:44:34
うはwwwwおkwwww どうも参考になりましたw アキラメマシタw 明日おこられまつwww
499 :
デフォルトの名無しさん :2005/06/10(金) 04:15:06
今PEヘッダを勉強しているのですが、インポートデータの、ルックアップテーブルっていらなくないですか?
500 :
デフォルトの名無しさん :2005/06/10(金) 04:48:15
コンパイラ・アセンブラを作る人には必要だな。
optasm
502 :
499 :2005/06/11(土) 05:28:31
すみません、馬鹿なのでよくわからないですが・・・ 私にはアドレステーブルと全く同じデータのように思えるんですが、設計者は何らかの意図があってこういう形にしたわけなんでしょう? 設計意図を簡単でかまいませんので示唆して下さい。
503 :
デフォルトの名無しさん :2005/06/11(土) 07:57:40
OllyDbg のサイトって、なくなってない?
505 :
502 :2005/06/12(日) 19:41:12
すみませんやっぱり馬鹿だった。USER32.DLLのインポートテーブルを見たらわかりました。
自分で用意したオブジェクトファイルの実行時動的リンクやりてー のでLoadLibraryのソース誰かください。
ところで、ちょっと前に流出したw2kのソースにLoadLibraryの部分てあった?
逆汗しれ。どうせファイルオープンしてプログラム領域を ヒープにマップしてるだけかと。
ウィルスでも作るつもりですか?
プロテクトに使える
>>1 俺はジャガード織機のプログラミングができるぞ
512 :
505 :2005/06/18(土) 11:41:59
わかったと思ったんだけどわからなくなりました・・・ OSのPEローダーは 1. (インポートする外部ルーチンの情報に関しては)ルックアップテーブルのみを参照してインポートを行う。アドレステーブルにどんなデータが入っていようと一切無視する。 2. ただし、ルックアップテーブルへのポインタが0だった場合には、アドレステーブルに入っているデータをルックアップテーブルの代わりに使う。 というようなアルゴリズムみたいですね・・・ 2.の場合があるわけだから、やはりルックアップテーブルは必要がないのでは? # それにしてもUSER32.DLLは不審だ・・・最初アドレステーブルにインポート済みらしいデータが入っているを見て、OSがインポートアドレスを厳密にチェックしているのか?と思ったんだけど、別に何もしていないみたい。(Win98の場合)
Win98は駄目駄目だよ 参考にしちゃいかんべ
よくは知らんが、再配置のアドレス解決は相当高くつくらしい。
OS自体全く違うがKDEはビルドのときにpreloadしておくと
起動時間が半分になるという話もある。
KERNEL32.DLLとかUSER32.DLLなどシステム固有のDLLは
どんなアプリでも同じアドレスにマップされる。(できる。)
しかしユーザ作成のDLLの場合、どんなアプリが何時ロード
するか分からんので、アドレス固定にすることは出来ない。
因みにVStudioはインストール時にアドレス解決するらしい。
>>512 という話と関係ある?
499の言う「いらない」の意味がよくわからないんだが、 最終的にアドレステーブルだけあればいい=ルックアップテーブルを上書きすればいい、 つまり同じ用途で二箇所もいらないっていう意味で言ってるなら、そう言えないこともないかもな。 ローダーとモジュールの都合だけ考えれば。 ただ、両方テーブルがあると、デバッガとかでプロセス内部をのぞき見する場合には便利なことが多い。 たとえば、アドレス解決住みのアドレステーブルを見て何の関数なのか(可読名称)知りたいとき、 ルックアップテーブルが残ってれば名前テーブルがすぐ引ける。 ルックアップテーブルが残ってなければ、DLLのエクスポートテーブルを検索する必要がある。 また、API乗っ取り等のためにアドレステーブルを書き換えてしまった場合、 ルックアップテーブルが残ってれば、本来あるべきアドレスを再検索することができる。 ルックアップテーブルが残ってなければ、二度と本来のアドレスは分からない。 (まあ、本来のアドレスがわかったとして、それを素直に書き戻していいかは、 多重乗っ取りの可能性を考えると難しい面もないではないが、ここでは関係ない) 以上がPEの設計者が意図したものなのかどうかは知らないが、 そういう利用法はあるし、実際利用されてることを鑑みれば、 まるっきり無駄ってわけでもないとは言えると思う。
>>514 >因みにVStudioはインストール時にアドレス解決するらしい。
詳しく
>>516 インストール時にrebase.exeで処理するってことじゃないの?
518 :
512 :2005/06/19(日) 22:44:11
>>515 >同じ用途で二箇所もいらない
そうそう!そういう意味です。
>両方テーブルがあると、デバッガとかでプロセス内部をのぞき見する場合には便利なことが多い。
そうなんですよ!だからこそ不審なんですよ。まるでクラッカーのために用意されているかのような2重テーブル。
OSの設計者が意図的にクラックしやすくするわけはないと思うので、何の意図があるのか、と思ったわけですが・・・
>>514 >KERNEL32.DLLとかUSER32.DLLなどシステム固有のDLLは どんなアプリでも同じアドレスにマップされる。
システムDLLでもOSのバージョンが違えば違うので、少なくとも普通のEXEとかユーザーDLLではビルド時解決は全くできないと思いますが・・・
USER32.DLLはたぶん特定のKERNEL32.DLL上でしか動かさないのでKERNEL32ターゲットのアドレステーブルが解決されていると思うんですが・・・
これって結局ロード時に上書きされちゃうんですよね・・・?
XPとかのUSER32.DLLはそうなってないですか・・・?
MSのOSの設計者は意図的にクラックしやすくしまくってますがなにか?
520 :
Hg :2005/06/20(月) 00:35:16
まじめな質問 キーボードフックをして、hook.txtに出力するコードを教えください。
環境くらい書けやヴォケ
522 :
Hg :2005/06/20(月) 01:17:51
MASMでもNASMでもかまいません。
>>520 copy con > hook.txt
>>518 >システムDLLでもOSのバージョンが違えば違うので、少なくとも普通のEXEとかユーザーDLLではビルド時解決は全くできないと思いますが・・・
書き方悪かったのかな。そういってるつもり。
だからVStudoはOSが特定できるインストール時なんでしょ。
525 :
デフォルトの名無しさん :2005/06/21(火) 14:06:24
>>519 M
S
(モビルスーツ)のOSの設計者を知りませんか?
527 :
Hg :2005/06/22(水) 01:26:44
テストです。
>>1 のデフォルトの名無しさん、"con con con"について知ってますか?
528 :
518 :2005/06/25(土) 07:10:56
>>524 後で気がついたんだけど、514さんの書きこみは、'インポート'ではなく、'フィックスアップ'ですね。
「高価」というのは、DOS EXEからPEになって、絶対アドレスはすべてフィックスアップの対象になったわけで、場合によってはえらい数のリロケートが必要になる、ということでしょう。
フィックスアップは、通常ビルド時に仮想解決しますね・・・特にEXEは殆どの場合'望ましいベース'にロードできるので、リロケートが必要なく、素早いロード(安価)が可能となっているようです。
529 :
1は失踪中 :2005/06/26(日) 05:28:48
530 :
528 :2005/07/09(土) 05:31:17
やっとわかりました!
どうも、すみません。514さんので正しいみたいです。
http://www.windowsitlibrary.com/Content/356/11/4.html この文書の
'BINDING IMPORTS FOR A PE FILE'
という項目に詳しく載っていました。
インポートデータの'アドレステーブル'が解決済みのファイルを'BOUND'、そのようなファイルを作ることを'BIND'と言うそうです。
'BOUND'のファイルはインポートデータの'タイムスタンプ'が0以外に設定されることで区別されます。
ローダーは、このタイムスタンプが、インポート対象モジュールのと同じかどうかチェックし、同じならアドレステーブルをそのまま使う、という仕組みみたいです。
そして、USER32.DLLはバウンドでした。
>>530 あんたスゲーよ。
俺の場合、概念的というか感覚的なレベルでしか
理解してないけど、それをキチンと調べて細かい
部分まで抑えていくあたりは、技術者の鏡だよ。
間違えてageちゃった。スマヌ。
なんか話が混じり合ってるので、自分の勉強も兼ねて整理しようか。
fixupってのは*基本的には*コンパイル単位(OBJファイル)間のアドレス解決。
Win32(PE)のEXEみたいに固定アドレスにしかロードしないものだとそれで終わりだけど、
DLLみたいにロード時に再配置する場合は関係することもある。
(絶対アドレス参照とかしてたらね・・・最近はそういう例はあんまりないとは思うけど自信はない)
一方、bindってのは共有ライブラリ類に対するロード時のアドレス解決。
>>530 がいろいろ調べてるのはこっちね。
>>514 が言ってる「あらかじめアドレス解決する」ってのは実はこの両方の話を含んでて、
前者を前解決してくれるREBASE.EXE、後者を前解決してくれるBIND.EXEというツールが
VCやPlatformSDKに付属してる。
(やってることは
>>530 のリンク先のページにあるAPIを読んでるだけ、らしい)
もちろんロード先は環境に依存するので、それぞれの環境にあわせてrebasing/bindingしないと無意味。
OS付属のDLLの場合は環境が固定なので、あらかじめrebasingもbindingもやってある。
>>512 とかでUSER32.DLLが不審だと思っちゃったのはそれが原因。
>>514 のVCは、インストール時(つまり環境が固定される時)にrebasing/bindingをやってしまうという話。
>>531 自分が必要なとき、知りたいときに、どこを調べれば解決できるか分かる程度に理解してれば十分だよ。
ぷろくし〜。
535 :
愛也 :2005/12/22(木) 20:46:30
こんにちは。お邪魔します。 パソコン関係の初心者なのでお尋ねさせていただきたいのですが・・ 下の問題が分かる方はいらっしゃいますでしょうか?? 問題。次のプログラムを機械語に翻訳しなさい。なおプログラムの先頭番地を#0100とし、 メモリの番地も示しなさい。また、このプログラムを実行すると答えはいくつになるか。 PROG START LD GR1,DATA1 LEA GR2,1 ADD GR1,DATA1,GR2 ST GR1,ANS EXIT DATA1 DC 25 DC −19 ANS DS 1 END 頭脳明晰な方、どうか教えてくださいませ(−_−;) ここは最近の書き込みがないからダメかなぁ〜〜〜(><。)
マルチにはお答えできませんなあペッ
537 :
デフォルトの名無しさん :2005/12/22(木) 20:49:28
538 :
デフォルトの名無しさん :2005/12/22(木) 20:51:15
>>535 聞いてる態度にしては挑戦的だがそれでいいと思ってるのか?
539 :
デフォルトの名無しさん :2005/12/22(木) 20:52:24
こんな糞スレageんなや
お。この糞スレだれのかと思ったらほ○たまではないか!
544 :
愛也 :2005/12/22(木) 22:05:10
537さん スレありがとうございます(^^)例題があるのですが〜例題では、「アドレス#4001から格納すると仮定し、メモリ番地を左側に、また機械語の16進表現を機械語の右側に示せ。」 「ソースプログラム」 EX1 START LD GR1,DATA1 ADD GR1,DATA2 ST GR1,DATA3 EXIT DATA1 DC #0123 DATA2 DC #4567 DATA3 DS 1 END 「機械語プログラム」 メモリ番地 機械語 16進表現 #4001 0001 0001 0001 0000 (#1110) #4002 0100 0000 0000 1001 (#4009) #4003 0011 0001 0001 0000 (#3110) #4004 0100 0000 0000 1010 (#400A) #4005 0001 0010 0001 0000 (#1210) #4006 0100 0000 0000 1011 (#400B) #4007 1010 0011 0000 0000 (#A300) #4008 0000 0000 0000 0000 (#0000) #4009 0000 0001 0010 0011 (#0123) #400A 0100 0101 0110 0111 (#4567) #400B xxxx xxxx xxxx xxxx (#xxxx)
1
マルチすんなぼけ あっちが解決済みならこっちにもその旨書いとけ
このスレスルーしないとほ○たまが大量に通りすがりますよ。そのうち
CASL(゚听)イラネ
549 :
デフォルトの名無しさん :2006/01/24(火) 13:41:42
アセンブリ言語のプログラミングで分かんないんですけど誰か教えてください。お願いします!
550 :
デフォルトの名無しさん :2006/01/24(火) 16:01:10
4文字以下の文字列を入力して反転出力させなさい。 という問題できるかたいらっしゃいませんか?
551 :
550です :2006/01/24(火) 16:08:11
すいません アセンブリ言語をつかっておねがいします!
反転なら 入力時スタックに詰め込んで 出力時スタックから取り出す。
553 :
550 :2006/01/24(火) 16:25:44
んんよくわかりませんすいません。。。 ちなみにCOMETを使っているんですが具体的にどういう風にやればいいのでしょうか?今日はじめてアセンブリを学んで壁にぶつかりました。。。。 なんかインデックスアドレッシングとループを使うとのことなんですが。助けてください。
554 :
550 :2006/01/24(火) 16:39:13
付け加えでスタックは使わないでしなさいとのことでした。。。。
とりあえず書いたCASLで。先頭の全角スペースは半角スペースに置換しる。 MAIN START IN BUF,LEN LD GR1,LEN SUB GR1,C1 LEA GR2,0 LOOP LD GR0,BUF,GR1 ST GR0,BUF2,GR2 ADD GR2,C1 SUB GR1,C1 JPZ LOOP OUT BUF2,LEN RET C1 DC 1 BUF DS 80 BUF2 DS 80 LEN DC 0 END
557 :
550 :2006/01/24(火) 17:38:33
ありがとうございました。感謝してます!!!
558 :
550 :2006/01/24(火) 19:37:22
新たな問題です。 キーボードから文字列を入力し、その文字列に含まれる数字の数を、 コンソールへ表示するプログラムを作成せよ。 ただし、入力される最大文字列は、20文字とし 入力される文字は、 ASCIIコード表(プリント11ページ)に 載っている文字に限定する。 とのことです。だれか助けてください。。。。。。。
>>558 合格情報処理でも読んでから出直してこい。
561 :
550 :2006/01/24(火) 19:47:31
プリントは関係ないです。すいません。普通通りアスキーコード でかんがえていただければ。 ちなみに今回もマシンはCOMITを使用します。 ホントにどなたかお願いします。
>>559 11ページ見なくてもネットに存在するぞ。
むしろバイナリエディタがあれば判定できる。
COMITじゃどうしようもないな
宿題は自分で解け
566 :
デフォルトの名無しさん :2006/01/24(火) 20:39:32
あげ
マルチなのかよ。せっかく作ったのに。 今回もCOMETでいいんだよな?数字がいくつあるか数えるんだよな? 先頭の全角スペースは半角スペースに置換しる。 MAIN START IN BUF,LEN LEA GR1,0 LEA GR2,0 L1 CPL GR1,LEN JZE L1E LD GR0,BUF,GR1 LEA GR1,1,GR1 CPL GR0,NS JMI L1 CPL GR0,NE JPZ L1 LEA GR2,1,GR2 JMP L1 L1E LEA GR1,0
L2 CPL GR2,C10 JMI L2E LEA GR1,1,GR1 LEA GR2,-10,GR2 JMP L2 L2E ADD GR1,NS ADD GR2,NS ST GR1,RESULT LEA GR3,1 ST GR2,RESULT,GR3 OUT RESULT,RLEN RET NS DC 48 NE DC 58 C10 DC 10 BUF DS 80 LEN DC 0 RESULT DS 2 RLEN DC 2 END
マルチというか陥れたのは俺な訳だが。
570 :
550 :2006/01/24(火) 21:21:23
ありがとうございます。すいませんがLEAコマンドのいみが よくわからなくてロードアドレスでなにをしてるんでしょうか? また7行目とかでGR1、1、GR1とでてきますがレジスタとレジスタの 間の1は何のいみがあるんですか?他にもオペランド中に文字が3つならんだり あんまりわかりません。。。すいませんがよければおしえてもらえませんか?
>>571 ひでえ!
>>570 おい!おまえのせいで
死ねといわれたぞ!
コノ状況でのんきに
「教えて君」やってんじゃねえ!
573 :
550 :2006/01/24(火) 21:42:01
もうしわけないです。
>>574 ひでえ!
>>573 おまえのせいで
責任取らされそうになってるぞ!
なんとか自己解決しろ!
いいからマジで死ねよ
LEA GR1,0はGR1にアドレス0を代入。つまり0を代入 LEA GR1,1,GR1はGR1にGR1とアドレス1を足したを代入。つまり、GR1にGR1+1を代入。 LDやADDでは即値での代入、加減算ができないから、 LEAを利用して代入や加減算をしてる。
578 :
550 :2006/01/25(水) 14:04:26
なるほどです!あと、論理比較はどういうことをやるんですかね??
CPL GR0,ADDRだったら、 GR0>ADDRの内容だったらFRレジスタを正。 GR0=ADDRの内容だったらFRレジスタを零。 GR0<ADDRの内容だったらFRレジスタを負。 FRレジスタはJPZ等の分岐命令でジャンプするかどうか判定するのに使われるやつな。
580 :
デフォルトの名無しさん :2006/01/25(水) 16:18:19
なんて本読めばこのスレの中の人と渡り合えるようになるの?
はじめての2ゲット
なんで機械語のスレなのにアセンブラ?
585 :
デフォルトの名無しさん :2006/01/25(水) 17:22:42
>>582 CASLじゃなくて?
CASL2の話題には見えんが。
>>585 今ならCASLよりCASL II関係の方が手に入れやすいやん。
混乱するだけだろw しかし今なぜCASLやってるのかは永遠の謎だね。
588 :
556 :2006/01/25(水) 21:19:26
CPU書いてないから、ネタとしてCASLIIで書いてやれーと思って、作って、 書き込もうと思ったら、COMETって補足されてて凹んだよ俺は。 ちなみに俺、昨日までCASLもCASLIIも名前しかしらなかったw
>>587 1.先生が十数年前に作った授業ノートを後生大事に使い続けている
2.基本情報技術者試験を受けようと思い古本屋で買った参考書に載っていた
3.COMETとCOMETIIを同じ物だと思いこんでいる
機械語じゃなくて、朝鮮語とかはだめなの?
<丶`∀´> ケンチャナヨ〜
592 :
デフォルトの名無しさん :2006/02/03(金) 06:50:51
だれか CASL 動く CPU 作ってくれ。
593 :
デフォルトの名無しさん :2006/02/03(金) 12:45:40
('A`)ジュワジュワジュジュジュワジュワ?
>>592 CASL を直接理解出来る CPU は難しそうだな。
595 :
デフォルトの名無しさん :2006/02/03(金) 23:11:58
3D A7 00 4C 9B 70 EA 0C って何のCPUの機械語?
つ 逆アセンブラ
caslのエミュレータを作ったけど、完成した直後に仕様変更があって割り込み命令などが拡張されてた。少なからず凹んだ…12年位前のできごと。
CASLにエミュレータは存在しないとマジレス
質問です。 MOV ECX,0000002AH RDMSR TEST AX,0800H JZ 〜 これは MSR 2Ahのbit11をチェックしているんですよね? IA-32のマニュアルを見ても、該当部分は「予約済み」となっているのですが、 このチェックにどういう意味があるのでしょうか?
アラブの金もちが良く来る寿司屋がその金持ちの家に遊びに行ったらスゲエ宝石ちりばめられた盾貰ったって見せてくれた。 そのアラブ人が来る日は座敷でなくカウンターが予約済みだった
601 :
デフォルトの名無しさん :2006/03/12(日) 20:17:36
602 :
デフォルトの名無しさん :2006/03/12(日) 20:18:48
3573:0100 B87924 MOV AX,2479 3573:0103 50 PUSH AX 3573:0104 68 DB 68 3573:0105 6B DB 6B 3573:0106 6B DB 6B 3573:0107 68 DB 68 3573:0108 68 DB 68 3573:0109 69 DB 69 3573:010A 32C0 XOR AL,AL 3573:010C D1C8 ROR AX,1 3573:010E D1C8 ROR AX,1 3573:0110 54 PUSH SP 3573:0111 5A POP DX 3573:0112 CD21 INT 21 3573:0114 32C0 XOR AL,AL 3573:0116 D1C8 ROR AX,1 3573:0118 48 DEC AX 3573:0119 D1C0 ROL AX,1 3573:011B CD21 INT 21 3573:011D B44C MOV AH,4C 3573:011F CD21 INT 21
MOV AX,2479 ; AX = 2479h PUSH AX ; AX = 2479h = '$y' PUSH 6B6B ; 6B6Bh = 'kk' PUSH 6968 ; 6968h = 'ih' XOR AL,AL ; AX = 2400h ROR AX,1 ; AX = 1200h ROR AX,1 ; AX = 0900h PUSH SP POP DX ; DX = SP ('hikky$') INT 21 ; 文字列表示 ("hikky") XOR AL,AL ; AX = 0900h ROR AX,1 ; AX = 0480h DEC AX ; AX = 047Fh ROL AX,1 ; AX = 08FEh INT 21 ; キーボードから1文字入力 MOV AH,4C INT 21 ; 終了
ありがとうございます。 脱力。
TextSS のWindowsXP(Professional)64bit化おながいします もしくは64bitにネイティブ対応したテキスト置換ソフトありますか? そういや64bitにネイティブ対応している2chブラウザてありましたっけ?
607 :
デフォルトの名無しさん :2006/03/31(金) 23:19:36
3dnowとmmxは別々に実装しないといけないと思うのですが まずどっちが対応してるかってどうやって判別すればいいのですかね?
「CPUID mmx 3dnow 判定」でググレ
>>608 アプリ起動時に選択メニューを表示し、ユーザーに選択してもらう。
それ判るユーザだけなら良いけどな
612 :
610 :2006/04/12(水) 07:21:54
>>611 間違った方を選ぶとまともに動作しないから、次回起動からは間違えない(はず)。
613 :
デフォルトの名無しさん :2006/05/02(火) 19:48:13
614 :
デフォルトの名無しさん :2006/05/02(火) 19:55:09
Ω自体は別に真新しい言葉ではないし、まあ、ケーモー書ってところじゃないの。
昔は哲学者、今は計算機屋か。 数学の価値を破壊しようと必死に企む逆賊は。
616 :
デフォルトの名無しさん :2006/05/28(日) 15:34:09
COMET/CASLをこれから学ぶ人のための入門書で いい奴あったら教えてください
620 :
デフォルトの名無しさん :2006/06/04(日) 14:20:19
ちなみに、だ。「アセンブラ」は変換機でありコンパイラのようなもので、アセンブラ言語なるものはなくアセンブリ言語というのが正しい。>>アセンブラ言語とか言い出した香具師 つまり6の言うことに間違いは無く、11は根本的にアセンブリ言語とアセンブラを混同している。
どっちだっていいじゃねぇかよ
つーか亀レス杉
623 :
デフォルトの名無しさん :2006/06/04(日) 18:17:06
C++コンパイラで書こうぜ! やはり変
どっちだっていいじゃねぇかよ
クソスレageるな
最近組み込みのコードどうやって作ってるんだか知らんけど、 某エレベータの誤動作が問題になっているよな。 あれって、原因として (1)センサー系統 (2)ROM内のコード みたいなことが考えられると思うけど、俺は(2)が原因だと思う あのクラスのコードサイズ(バイト数)、大体どれぐらい? 開発経費、ってか組み込み屋の労働単価ってどれくらいかな? わかる?興味本位だが(笑
>>627 ようは品質管理が全然できてないんだろ。
電源切断した後に急速上昇するなんてどういうギミックだろう?
>>629 エレベータって必ず、上下に移動する部屋と逆に方向に動く重りがあるだろ。
多分、その重りがある程度人が乗ってる状態の部屋と同じぐらいの重さなんだろ。
で、人があんまり乗ってなかったら重りの方が重いから部屋は上昇するんじゃないの?
631 :
626 :2006/06/07(水) 11:59:06
サブルチンの最後を条件付ジャンプかなんかにしておくと、 ありえない条件が発生しちまったとき、連続した次のサブルチン に入ってく、なんてのが素人のコードでよくあるんだけど、 まさかそんなようなことはないだろうしなあ… 自転車と一緒に後ろ向きに降りようとしたらしい。 センサとしてみると、ずいぶんとでかい幅の人間だと思うかも。 で、閉じるルチンも呼ばれていないわけだ。 ある時間待ちで戻っちまうとか。 シンドラのコード、見たことある香具師いないの?俺はリストも見ていないくらいなんで。
634 :
デフォルトの名無しさん :2006/06/26(月) 08:12:25
>>633 リアルでさんくすこって、ノリでついいっちゃうと大変なことになるから注意な
635 :
デフォルトの名無しさん :2006/09/07(木) 23:39:51
HALT
636 :
デフォルトの名無しさん :2006/09/08(金) 05:20:24
638 :
_ :2006/09/12(火) 17:39:05
>>631 の場合は再現性ありだな。
>>627 の
>何かの拍子にスタック破壊して変なところコールしてるとか。
の場合は、スタック破壊したら、CPUじたいマトモな動作しない=エレベータとしての動作しない、ほうの確率が非常に高くて、
変なとこコールが起こる確率は僅かで、そればかりが起こる確率なんて微の微の微であるから、まずない。
639 :
デフォルトの名無しさん :2006/12/03(日) 09:01:12
age
640 :
22 :2006/12/13(水) 11:37:26
九九を作成するプログラムってどうやって作るんですか? cometUです><
int i,j; for(i=1;i<=9;i++){ for(j=1;j<=9;j++){ printf("%d*%d=%d\n",i.j.i*j); } } をcometに翻訳汁
おっと printf("%d*%d=%d\n",i,j,i*j); に訂正
printfてcometにあるの?
644 :
641 :2006/12/15(金) 21:23:02
58 02 これがどういう計算かしらないが10進数で24になるんだが 何やったら24になるんだ?
$0258 -> 001001011000b 下5bitだけ見れば24になるが。
>>646 おお、ありがとうございます。
これでやっと進められます。
R2D2のおはようをハ長調で書くとどうなりますか?
649 :
デフォルトの名無しさん :2007/05/15(火) 07:48:09
957 名無しさん@120分待ち sage 2007/05/14(月) 23:44:59 ID:ujy9N/RN え?違うの? システムって機械じゃないの? プログラムとかのこと? ベーシックなら数学1でやったお♪ 110行 GOTO HELL 120行 PRINT(OMAEMONAH)
650 :
デフォルトの名無しさん :2007/05/31(木) 22:37:46
ねえ、ちょっと教えて下さい。今8086エミュレータを作っているんですが、 8086で未定義命令を実行するとどうなるかが判りません。80186以降は 例外になるようですが。。。
未定義
>651 特定の動作をするわけじゃないんですね。リセットとかハングするのかと思ってました。
pop cs とか、実行出来たり。
654 :
機械語は初心者(VBS好きです) :2007/07/22(日) 23:18:21
何でも教えてくれるんだな? 機械語って何から学べばいいんだああ。 具体的な学び方がわからない機械語プログラミングの方法が 書いてあるHPでもあったら出してくれませんか。
656 :
デフォルトの名無しさん :2007/08/07(火) 22:45:11
日本で機械語使えるやつってどの程度いるんだろう
沢山。
東京ドーム3杯分
でもソフト作ってるやつは全然いない現実
このスレでも答えられるやつや原理を理解してるやつはいても、 実際に使いこなせるやつは皆無な状況だからな。
662 :
まったくの機械語初心者 :2007/08/08(水) 20:19:16
誰かお願いします 機械語の学び方を教えてください おねがいぽ・・・・。
663 :
まったくの機械語初心者 :2007/08/08(水) 20:21:24
ところで初心者の俺の質問はスレちがいなのか・・・。
スレ主に質問しなければならない もうスレ主はこのスレ見て無いかもな
学び方つってもな。 ふつうの言語のプログラムは書けるのか? 機械語つっても目標は?どのCPUの?何でもいいの?
>>665 11010111111000101010.
100101010wwwwww
10,1101010111101110100101010?
機械語にCPUなんて関係すんの?
それは大前提だろ この世にインテルしか存在しないならともかく
どのCPUで書こうが機械語レベルなら大差は無い。
>>667 機械語はCPUとアセンブラプログラマー/コンパイラーのインターフェース。
CPUが変われば機械語も当然かわる。
CPUの違いによる機械語の主な違いは
・命令セット(当然か) 命令セット数はCISC>RISC
・アドレッシング方法
・汎用レジスター/制御レジスタの種類と数
・I/Oポートの割り振り方法 メモリーマップドI/O,I/OマップドI/O
それは大げさすぎ
>>671 まあ、そうかもしれないな。
転送命令、条件比較命令、JUMP命令、四則演算命令
アセンブラのコードの95%はこれらだから
これらだけサクッと覚えればたいていのCPUのアセンブラはかける。
ARMとか自称RISCだがx86より遥かにややこしいぞ
そうか? 後からゴタゴタ追加した部分に関してはx86と同じ程度だと思うが・・・
675 :
デフォルトの名無しさん :2007/10/13(土) 18:09:24
よくわからんが2進数や16進数で記述してそれのアセンブラとかあるわけ?
676 :
デフォルトの名無しさん :2007/10/13(土) 19:35:56
‘/spreadsheet.のaddress.でしょうか? 此れ→ <8d>¡<93>ú<82>Í
>ARM PC相対アドレシングを手で書くのは苦痛すぎる
armってアドレスを直接指定できない奴だっけ?
679 :
デフォルトの名無しさん :2007/10/17(水) 17:04:29
IOマップドIOとメモリマップドIOって具体的にどう違うんですか?
オンドゥル語はだめですか?
>>679 I/O専用バスにI/Oを接続してるかメモリバスに接続してるかだけ。
組み込み用では
CPUによってはI/O命令を持たないものもあるし
メモリバスが外に出てないものもあるし、
キャッシュを持つような高機能・高速のCPUではメモリマップドI/Oだと逆にハードウエアコストが増えるので
ビデオRAMのような用途以外は まあ使われない。
eaxとecxにどんな値が入ってもゼロフラグをONにするには以下をどのように書き換えるべきか。 xor eax,ecx これわかりません;;優しい人教えていただけませんか?
xor eax,eax にすればゼロフラグはオンになるけど、eaxも壊れてしまう。 難しい問題だね
cmp eax,eax
686 :
デフォルトの名無しさん :2008/02/16(土) 17:10:27
WindowsXP上でバイナリのTurboJetEDITを動作させたいんですけど、拡張子がbinで開けませんでした。 デーモンツールも試して見たんですが、何故かエラーばかりで結局無理でしたorz スレチならすみませんが、何かよい方法は無いでしょうか。
PCの電源を切り街へ出かけよう
mov ax,4c00h int 21h
689 :
デフォルトの名無しさん :2008/03/06(木) 22:24:37
サイトからダウンロードしたMicrosoft Windows SDKのIMGファイルが1.32GBもあって大きすぎてCDに入らないんですけどどうやってインストールするんですか?
>>689 lヽ ノ l l l l ヽ ヽ
)'ーーノ( | | | 、 / l| l ハヽ |ー‐''"l
/ D | | |/| ハ / / ,/ /|ノ /l / l l l| l D ヽ
l ・ i´ | ヽ、| |r|| | //--‐'" `'メ、_lノ| / ・ /
| V l トー-トヽ| |ノ ''"´` rー-/// | V |
| ・ |/ | l ||、 ''""" j ""''/ | |ヽl ・ |
| D | | l | ヽ, ― / | | l D |
| !! | / | | | ` ー-‐ ' ´|| ,ノ| | | !! |
ノー‐---、,| / │l、l |レ' ,ノノ ノハ、_ノヽ
/ / ノ⌒ヾ、 ヽ ノハ, |
,/ ,イーf'´ /´ \ | ,/´ |ヽl |
/-ト、| ┼―- 、_ヽメr' , -=l''"ハ | l
,/ | ヽ \ _,ノーf' ´ ノノ ヽ | |
、_ _ ‐''l `ー‐―''" ⌒'ー--‐'´`ヽ、_ _,ノ ノ
 ̄ ̄ | /  ̄
AAの使われ方が適切すぎてフイタ
692 :
デフォルトの名無しさん :2008/03/09(日) 13:02:17
Qちゃんがんばれ
今までC/C++,Java,perl,python.ruby,CommonLisp,scheme などの言語を学んできました。 機械語の勉強をしたいのですが、入門書など基礎に成るものが 有りましたらよろしくおねがいします。
キャッスルエクセレント!
695 :
デフォルトの名無しさん :2008/09/26(金) 14:41:21
初心者的な質問ですいません。 機械語は0と1の組合せですが、0と1の機械語が複雑な動作を実行する仕組み を教えてくだい。
求人広告に無限に長いテープを前後に動かすってアルバイトが載ってたんですが、 この仕事は一回あたり何時間ぐらいで終わるものなのですか?
>>695 「複雑」ってそもそもどういう状態?
で,実は「複雑」じゃないってオチ
機械語と機械の動作が1対1対応している様な簡単なCPUなら
1と入力されたら手を挙げて
2と入力されたら手のひらを開いて
3と入力されたら手のひらを閉じて
4と入力されたら手を下げる
って機械なら,1,2,3,4という機械語はリンゴくらいならつかめる動作も可能
これが複雑なのか単純なのかわからないけど
>>695 「0と1の機械語」というよりも機械語がコード化されているだけ。
CPUはそのコード化された機械語を解釈して、所定の動作を実行する。
機械語はCPUに対する動作の指示書のようなものです。
0と1が複雑な動作をするわけではないです。
01は信号の電気的なON/OFFの話で 意味のあるまとまりは8bit以上から
ニブル・・・
>>695 たとえば68000のMOVE命令は16bitなんだが、これは↓な感じに分解できる。
MOVE命令を示す固定値(2bit)
転送サイズ(2bit)
ディスティネーションのレジスタ番号(3bit)
ディスティネーションのアドレッシングモード(3bit)
ソースのアドレッシングモード(3bit)
ソースのレジスタ番号(3bit)
なに?そういう話じゃない?信号がサーキット内をどう走るか知りたい?
そんなものは知らなくてもプログラムはガーっと動くんだよ!
そこでプリフィックスだらけのx86の出番ですよ!
703 :
デフォルトの名無しさん :2008/12/19(金) 22:21:13
あ
せ
ん
み
ら
ち
ん
ぽ
1340780792994259709957402499820584612747 9365820592393377723561443721764030073546 9768018742981669034276900318581864860508 53753882811946569946433649006084096
712 :
デフォルトの名無しさん :2009/03/13(金) 07:41:57
機械語(非アセンブリ)でスタックの中にある2つの32bitの値を64bitの浮動小数とみなしてFPUのスタックに送る事は可能?
713 :
デフォルトの名無しさん :2009/03/13(金) 11:24:05
機械語はなんとかヒアリングはできるようになったが、 まだしゃべれるとこまではいかないな。特に発音が。
>>712 そういう処理をアセンブリ言語で書いてアセンブラにかけ、出力されたオブジェクトファイルを参考に機械語をしゃべればOK。
こやつめw
716 :
デフォルトの名無しさん :2009/05/19(火) 10:30:19
715 デフォルトの名無しさん sage New! 2009/03/14(土) 01:52:39 こやつめw
717 :
デフォルトの名無しさん :2009/08/10(月) 20:29:00
良質なアセンブリ言語入門書を教えてください
cometです!
720 :
デフォルトの名無しさん :2009/08/17(月) 02:23:35
何色でしょう?
SSEをちょっといじってみたいんですが、 参考になってとっつきやすいサイトないし書籍はありますか? 『IA-32 SIMD リファレンスブック』はちょっと立ち読みしてみたけど 少々キツイです(内容的にも財布的にも)。
>>721 iccの関連文書にそれなりの情報がある。つーか、SSEを齧る程度ならWebで検索すればヒットするだろ。
>>721 アレは出てすぐぼったくり本認定されたから買っちゃダメ。
広く浅くでいいのならCQ出版のx86アセンブラ入門でもどうぞ。
サイトなら光成のところとか。まぁ自分でググった方が早い。
あとから「先生」を入れようと思ったら忘れて呼び捨てに・・・ ごめんなさいorz
沢村さん失踪しちゃったなー
727 :
デフォルトの名無しさん :2009/10/19(月) 16:45:58
あの、インテルの64ビットcpuってアドレス空間はどのくらいなのでしょうか 一つのプログラムに割り当てられるアドレスも知りたいです。 それと、どのcpuから64ビットでしょうか
>>727 「EM64T アドレス空間」でぐぐりなさい。
729 :
デフォルトの名無しさん :2009/10/19(月) 19:39:30
ありがとうございます 失礼します mov ah,4ch int21h
動くかわからんけどこんな感じ? pxor xmm6,xmm6 mov ecx, 16 _For1: prefetchnta [edi] cvtps2pd xmm2, [edi] cvtps2pd xmm3, [edi+8] cvtps2pd xmm4, [edi+16] cvtps2pd xmm5, [edi+24] prefetchnta [esi] movddup xmm0, [esi] movddup xmm1, [esi+8] mulpd xmm2, xmm0 mulpd xmm3, xmm1 movddup xmm0, [esi+16] movddup xmm1, [esi+24] addpd xmm6, xmm2 addpd xmm6, xmm3 mulpd xmm4, xmm0 mulpd xmm5, xmm1 addpd xmm6, xmm4 addpd xmm6, xmm5 add esi,32 add edi,32 loop _For1 _Next1: cvtpd2ps xmm6, xmm6 movlps [p.p_out_buffer_ptr], xmm6
ありがとう、分からない部分が理解できました
i586からi686の最初に移る時の目玉命令は何でしたか?
eye
SSEだっけ?
大多数のプログラムにとっては cmovの方が有意義だったと思うけどね。 SSE系は、使用可能な部分においては圧倒的な差が出るけど 使える分野が限られるから。 もちろん、cmovも 互換性が必要なプログラムでは使われてないんだけどさ。
737 :
デフォルトの名無しさん :2009/11/30(月) 01:25:56
1語長整数型を2倍にするのは ・同じものを足す ・左に1ビットシフト ・2を掛ける C言語ではどのコーディングが最も高速ですか?
738 :
デフォルトの名無しさん :2009/11/30(月) 01:35:54
この命令は何をしているのですか? 68 6C E6 26 01
>>737 C言語でその程度の内容なら、普通に書けばどう書いても最適化される。
読みやすいように書け。
>>738 プロセッサの種類がわからないとわからない。
>>738 8085で、先頭が命令語の途中でない、とすれば、
68 MOV l,b
6C MOV l,h
E626 ANI 26h
01 LXI b,この後ろの2バイト この一連のコードではスジが通らないな。
>>738 x86の32bitコードなら
push $0x0126e66c
学校の宿題です助けてください 「ニーモニックを知ってるCPUを挙げろ ただし、ニーモニックが重複しないように」
知ってるのを挙げろって課題なら、知らないなら何も挙げないのが正解
挙げないと提出できないのですお願いします 教えてください
挙げないと提出できないのなら、提出しないのが正解
これって再々試験を受けるような馬鹿学生向けのサービス問題だろ? 本当にわからないってんなら、留年どころの話じゃあない。 いますぐ学校辞めた方がいいぞ。時間と金の無駄だ。 というか、これってどうせVIPPERが釣り遊びしてんだろ? こんなもんそんなとこに質問丸投げするのと同じ手間で答えそのものを得られるだろ。
・インテル系CPUで、Aレジスタ(アキュムレータ)の値を0にする最速の方法を書け ・MMX命令セットの開発理由を簡潔に述べよ。 分かる方おねがいします
前者、電力供給カットとどっちが早いかね?
電源の電圧低下ってけっこうタイムラグあるよ
だな。命令実行時間は数十ナノだが電源ブチ切っても落ちるまでミリ秒オーダーだね。 それに電源切ったらアキュムレータの値はゼロじゃなくて不定になるよね。
753 :
デフォルトの名無しさん :2010/03/13(土) 02:29:58
>>749 >>748 前者 XRA A
凄いですね・・
ちなみに携帯のARMてどんな機械語で動いてるんでしょうか。
最近の国産のケータイはほとんどSHだよな。iPodタッチとかは知らんけど。 SHの機械語はMOV系のニーモニックが使われてるが、アーキテクチャはLD/ST系だ。 C++やCが吐いた機械語で動いているので、人間がASMでプログラムする訳じゃない。
え。ドコモもauもiphoneもARMだから俺はむしろ殆どARMだと思ってたが。
SHだろう
757 :
デフォルトの名無しさん :2010/03/13(土) 23:34:08
ARMだろ?
どう考えてもARMだよな
いや、主流はどうみてもSH。
シャルム
混ぜるなキケン
ARMだと主張しているのは携帯アプリを作ってる勝ち組 SHだと主張しているのは組込やってる負け組 ということだろうか?
SH-MobileとARM両方積んでるしな
メインCPUがARMで、通信用サブCPUがSHとか、そういう話?
765 :
デフォルトの名無しさん :2010/03/16(火) 01:08:57
携帯アプリが勝ち組とはどういった了見で?
766 :
デフォルトの名無しさん :2010/04/26(月) 15:09:47
EM64TとかIntel64とかの命令語一覧を探していますが・・・ 検索してたら、ここに来てしまいました。 どなたかご存じの方いらっしゃいますか?
はい。
済みません。766ですが自己解決w 英語版ですがみつけました。ありがとうございました。
769 :
767 :2010/04/26(月) 18:14:17
なんだ、もう少し楽しませてくれよw
770 :
デフォルトの名無しさん :2010/04/28(水) 07:48:36
,―ヽ_(((((_、― ,/ ノ ヽ ~\ / ノ IPA ヽ ~\ / ノ ヽ、 `ヽ | ノ / ̄\ / ̄~ヽ ヽ i | ノ | ノ \ | <●> <●> ( ) \ | | | i / | / ヽ レ i (●_●) / i、 ,-――-、 ・ / i、 <(EEEEE)> ∵/ どういたしまして i、 \ ./ / \ ーー ,ノ ,,.....イ.ヽヽ、ー-―一ノ゙-、. : | '; \_____ ノ.| ヽ i | \/゙(__)\,| i |
771 :
デフォルトの名無しさん :2010/04/30(金) 22:37:04
プロセッセアーキテクチャの設計している方いませんか?n
電気板を漁れ ろくなもんじゃないけどな
773 :
デフォルトの名無しさん :2010/05/03(月) 11:40:08
訳しているのですが、の間違いだろ?
775 :
デフォルトの名無しさん :2010/05/11(火) 16:58:34
機械語を使わなくちゃいけない場面って、あるんですか? 職場とかで
うちのミニコンはIPLをマシン語で打ちこまないと起動しなかったな
稼動中のシステムにほぼ無停止でパッチを当てる場合とか
>>775 バイナリで走るプログラムを書くなら、高級言語で書いてあっても吐いたコアを
解析しなければならない場面というのは結構あるのではないかな?
オプティマイズされてたら、機械語でレベルで追ってかないと十分な情報を引き出せない。
もちろんバグの再現は出来ず、コアは顧客の環境でのみ、数週間、数ヶ月に一回しか吐かれない
って状況。
自分は機械語で解析するのはムリぽ。 ディスアセンブルしてニーモニックになってるならオケ。
あれ、ここの「機械語」って本当に機械語だったのw すまん、スレ違いだった。
機械語で3E, 32, 25ってどういう意味でしたっけ? Z80でコンピュータの仕組みを学んだことがあるんだけど、わすれちゃった。 3Eが格納で32が代入25が足し算たったっだかな?
石を限定してから聞かないとね。Z80/8085 なら、3E=Aregに次の1byteをロード。 3E 32 25 と並んでいるなら、3E32 で1命令で、Aregに32hが入る。 その後ろの25が、HLregをデクリメント。 並んでいるのじゃなくて32が命令の頭なら、32の後ろの16bitアドレス(25xx)に Aregを格納する命令。
おお。レスありがとう。
並びに特別な意味はないよ。
ただなんとなく覚えてる命令を列挙しただけ。
やばいほとんど忘れてる。
>>782 の言ってることが理解できないorz
もしくは始めから理解なんてしてなかったのか・・・。
修正:
>足し算たったっだかな?
足し算だったかな?
; 8085命令コード 00 NOP 01FFFF LXI b,65535 02 STAX B ・・・ FE80 CPI 128 FF RST 7 全ての命令コードについてこんなリストを作って、命令コードでソートしてある。 これを参照すれば任意のHEXの断片をASMコードに翻訳できるんだよ。 もちろん8085のコードだと判っているHEXでなければ意味ないけど
785 :
デフォルトの名無しさん :2010/07/23(金) 23:11:32
85の10倍ぐらい大変だとおもう。レジスタ多いし、アドレッシングモードも多いし。
機械語はbitで分けてOPコード部分のレジスタ番号を意識すると覚えやすい
>石を限定してから聞かないとね。Z80/8085 なら、3E=Aregに次の1byteをロード。
>3E 32 25 と並んでいるなら、3E32 で1命令で、Aregに32hが入る。
>その後ろの25が、HLregをデクリメント。
H = 100
L = 101
n = 110
(HL) = 110
A = 111
24 = 00 100 100 = INC H 64 = 01 100 100 = LD H, H
25 = 00 100 101 = DEC H 65 = 01 100 101 = LD H, L
26 = 00 100 110 = LD H, n 66 = 01 100 110 = LD H, (HL)
2E = 00 101 110 = LD L, n 6E = 01 101 110 = LD L, (HL)
36 = 00 110 110 = LD (HL), n 76 = 01 110 110 = HALT
3E = 00 111 110 = LD A, n 7E = 01 111 110 = LD A, (HL)
http://njprog.com/z80_002.htm
790 :
デフォルトの名無しさん :2010/07/25(日) 15:21:04
LDAとLXIとMOVて意味一緒ですか? 初歩的ですいません
>>790 インストラクションセットごとに微妙に意味合いが違う場合があります。
792 :
デフォルトの名無しさん :2010/07/25(日) 16:36:27
えっと・・・どういうことですか? プログラムを書く場合において、MOV A,Bとあらわされている部分をLXI A,Bとあらわしても問題はないのですか?
>>792 だから、お使いのインストラクションセットでの意味を把握してお使いくださいと。
同じCPUでも表記の違うインストラクションセットがある場合がありますから。
794 :
デフォルトの名無しさん :2010/07/25(日) 19:24:48
ありがとうございました
アセンブラと機械語は別じゃなかった?
796 :
デフォルトの名無しさん :2010/07/25(日) 20:54:27
PLC 2010/07/25 15:53:37 削除依頼 ブックマークする [80B3h][80B2h]←[80B0h]+[80B1h]*2 この処理を行うプログラムの書き方がわかりません・・・。 教えてください><
スレ汚すな
>>795 アセンブラと機械語は基本的に1対1で対応している
基本的に、なんだよなぁ。 同じ機械語に複数のアセンブリ言語の表現があることもあるし、 同じアセンブリ言語に対応する複数の機械語があることもあるし。
pgr
機械語はアセンブラの一部だよ。実行命令記述機能。他に、USING ORG 基数選択 印字機能のON/offなど、いろんな機能を総合したものがアセンブラ。
ついでに変数とか式とか制御構文とか関数呼出しとか書けるようにしようぜ
そのどれも書けるじゃん。CALLでJSRと同じコード出るし、doやforも書ける。 コンパイラと比べて弱いのは構造体の記述能力あたりかな。 コンパイラがいいのは、レジスタ使いの標準化。ASMで書いてもコンパイラと同じ レジスタコンベンションを採用するようにしてるよ。
機械語ってのは、2進数(人の目で見るときは16進数)の並びのことだぞ
01001011 であってもこの人の目には16進として見えるらしい。すごいな
屁理屈はいいから。
機械語を直接読んでる人で、2進数のまま読んでいる人なんて、まず見かけないでしょ。
普通は16進数になっているものを読んでるから。
例えば
>>784 のように、ね。
そもそも、アセンブラ(アセンブリ言語)と機械語の違いをわかってないという
とっても恥ずかしい点には関係ないし。
そうだねあらゆるところが劣化してる。用語の使い方ひとつとってもおかしい。きっと厨房だろう。
日本語でおk
「2進数」も人の目で見たときの表現だから 意味が判らないね
あ、そういやBLAME!って漫画で、キリィが建築者を2進数で制御する
場面があるけど、あの2進数も漫画の吹き出し上の表現であって、
実際はスイッチのON/OFFなんだよ。シリアル転送っぽいから、
その場合LSB、MSBどっちからとか色々あるんだけどね。
そういう事って
>>804 レベルの読者だと理解してないんだよな。
>>809 機械語とは2進数のこと
機械語とは2進数だが、(人間がそれを直接読むときは)16進数として表示して読む
この程度の文章も理解できないの?
>>809 二進数って、人の目で見ないと二進数じゃないんですか?
CPUが扱っているのは二進数じゃないんですか?
CPUを何だと思ってるんだw
>>811 を
>>804 に正確に従って直すと
機械語ってのは、2進数の並びのことだぞ
機械語ってのは、(人の目で見るときは)16進数の並びのことだぞ
何も変わってるように見えないが 何がおかしいのか考えるなりぐぐるなりしなさい お休み
ぷっ
まさかとは思うけど 「2進数も16進数も、同じ数字の表現方法を変えたものだけ」 なんていう、あまりにも当然過ぎて誰も気にもとめなかったことを 「自分は指摘しているから正しい」と言いたいわけじゃないよねぇ。 まさか。
まさかとは思うけど、
>>817 を書くまで、気にもとめてなかったわけじゃないよね。
プログラマは中身と表現をきちんと区別して意識するものだよ。
2進法、16進法、じゃなくて、2進数、16進数、と書いてるあたり、気にもとめてない
おバカさんだったようだけどwwwwwwwww
あー、なるほど。 「機械語とは2進法の並びである」と言いたかったのか。 さすが三国人の使う言葉は違うね。
発 者 同 . 。_ ____ 争 生 同 .じ . /´ | (ゝ___) い .し 士 .レ .__/'r-┴<ゝi,,ノ ro、 は、 .な で .ベ ∠ゝ (ゝ.//` ./`| }⌒j .い し .ル } ⌒ /`ヽ、_∠l,ノ ・ヽ´ .! ! か の / ´..:.} >、、___, .r、 ソ、`\ / ..:.:.} / |∨ ` ̄ / ..:.:./ | 丶 / _、 ..:.:.:.{ .{.:.:. \ { ..:Y .ゝ、 {.:.:.:.:. ヽ |、 ..:/ 丿 .:〉 >.- ⌒ . ヽ / {. ..:./ ソ ..:./ .( ..:.:.:` ..:} ./..:.:}.:.:./ ヘ、 ..:./ .\ ..:.:r_,ノ、.:.:} ./..:.:/|.:/ {.:./ X.:.:}.} X X /..:.:/ .}.:| }:/ .Y丶ヽ Y.:Y . __/.:/ { } 《.〈、 _,,__>.:》丶 Y.:\ /.:.:.:.:.::/ !.:.:ゝ ゝ.:. ̄ヾ ´:.:.:.:.:.:.:.:.:ヾゝ \.: ̄>  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
>>818 言っとくけど、本当にちゃんと「同じ数字だとわかった上で」書いてるよ。
だからこその、「人が見るときは16進数に直す」だから。
実際に16進ダンプからの読み取りとかすると
命令の一部のビットを2進に直して見ることも必要になるけど
相対ジャンプの計算とかの、2進のままじゃ面倒なこともやらなきゃいけないから。
口先だけで実際にやったことが無い人には
わざわざ16進と付け加えた意図がわからないだろうけどね。
まあ「日本語が理解できない」とひたすら叫んでいた人には関係ないけど。
同じ数字? そこは「同じ数」だろ? 「日本語が理解できない」というのが事実だと、また一つ明らかになったねw
お前以外は 石の入出力は一般的に電圧の高低であって 2進数にしろ16進数にしろ人が見るための物に過ぎない ということを話している
>お前以外は 誰? 何人? 日本語読めない人を除いて
>>823-824 えーと、「機械語とは何か」の話をしてるってこと、わかってたかな?
つまり、「機械語とは電圧の高低」と言いたいわけ?
ねえ、普段周りの人と会話とか、してる?
一人でただマンガ読んでるだけじゃないよね?
ちゃんと他人とコミュニケーション取れてる?
人が見るときとか自分で言い出したのに素敵
ねえ、普段周りの人と会話とか、してる? 一人でただマンガ読んでるだけじゃないよね? ちゃんと他人とコミュニケーション取れてる?
> ねえ、普段周りの人と会話とか、してる? > 一人でただマンガ読んでるだけじゃないよね? > ちゃんと他人とコミュニケーション取れてる? むしろ、おまえはどうなんだ? コンピュータとのコミュニケーションすらちゃんとできてなさそうだぞ。
>>827 アセンブリ言語という、人間が扱うもの、と
機械語とを混同している人に対して説明するために
ニーモニックが並んだアセンブラのリスト、
これと対比できるものを挙げるのは当然のこと。
流れを読めず、状況を想像することもできず
ただひたすら上げ足取りだけをいつもいつも考えている人には
理解できないだろうけど。
>>829 >お前以外は
誰?
何人?
日本語読めない人を除いて
ねえ、普段周りの人と会話とか、してる?
一人でただマンガ読んでるだけじゃないよね?
ちゃんと他人とコミュニケーション取れてる?
832 :
デフォルトの名無しさん :2010/07/28(水) 14:10:40
「確率」が候補に出ないIMEを持っている人
>>830 それでは2進と16進の扱いの差を説明できていないぞ
>>821 ネタにマジレスしとくがレベル低い基地外に絡まれたらマジ厄介。
どうでもいいけど もし本気で二進数というのは数値の表現方法に過ぎないということを もったいぶって、俺は知ってるから偉いんだぞ、的なことを書いていたのだとしたら ちょっと恥ずかしすぎる。
2828
58 35 4F 21 50 25 40 41 50 5B 34 5C 50 5A 58 35 34 28 50 5E 29 37 43 43 29 37 7D 24 45 49 43 41 52 2D 53 54 41 4E 44 41 52 44 2D 41 4E 54 49 56 49 52 55 53 2D 54 45 53 54 2D 46 49 4C 45 21 24 48 2B 48 2A 29 3B
ぱっと見てプログラムじゃなく文字列だな
839 :
デフォルトの名無しさん :2010/08/01(日) 09:48:08
機械語だから仕方が無い。
わざわざこの流れで文字列のせる訳ないだろ
機械語だったら、このぐらいの中に非ASCIIのバイトが1個も無いのはあり得ない。 ちなみに文字列にしたらこんなのだった。 X5O!P%@AP[4\PZX54(P^)7CC)7}$EICAR-STANDARD-ANTIVIRUS-TEST-FILE!$H+H*);
eicar.com と名前をつけて保存
843 :
デフォルトの名無しさん :2010/09/19(日) 21:56:22
質問で
844 :
デフォルトの名無しさん :2010/09/19(日) 22:34:21
アセンブラのソースリストが最適化をしたら大きくなってしまいました。 これでも高速化の可能性はあるのでしょうか?
たとえばループアンロールをすれば大きくなるよね?
846 :
デフォルトの名無しさん :2010/09/19(日) 22:48:47
実行速度が10倍くらい遅くなります。 ベクトル演算自動生成で。コードが短くなるはずなんですけどもね。
コード小さくなって処理時間長くなるならまあ仕方ねーか
848 :
デフォルトの名無しさん :2010/09/19(日) 22:54:59
折角SSE2使って処理してるのに・・・
あっちでSSE2のこと聞いてた人か。cの吐いたコードを手で最適化してるんじゃないの?
850 :
デフォルトの名無しさん :2010/09/20(月) 04:02:42
アセンブラはよくわからないのでコンパイラに任せています。 それを手動で最適化するだけの技術はありません。 例えば配列のデータはバイトだけどintにしないとコンパイラは自動的に SSE2のベクトル演算にしてくれません。最適化の道のりは遠いです。
ダメだこりゃ
ここでいいかな いよいよ、64bitなPCを買うことになった 64bitの逆汗でいいのがあったら教えて 32bitで使ってたのは、IDA Pro Freeware 64bitは、Advancedのみだそうだ 割れを探せばあるにはあるが、逆汗の成果を自作物(アマチュア)に取り込むので、 製作過程に割れをかましたくはない…。
>>852 VisualStudioのデバッガとかGDBとかメジャーなデバッガで出きるだろ。
もし逆コンパイルの事なら聞くな。元のコードに戻すのは不可能だから。
返事してくれてた人がいたのか 自動巡回から漏れてた いや、覗くだけなら、cdb/ntsdで十分だな、たしかに ちょっと意味が違うが、cl /Fa も使うようになった その後、radareってのを試した ちょっとキツかった ちなみに、IDA Pro 製品版には、逆コンパイラが付くようになったそうだが、 それはまあ、俺には過ぎた代物だな プロと違って、量を読む必要はないし スタックマシンタイプの仮想マシンのバイトコードは、逆コンパイラがあるとラクだが、 x86程度なら、レジスタ数もそこそこあるし、素で読んでもおおよその流れは掴める
これ ; デリミタっていうんだけどさ、よく打ち忘れるよね Rubyだとつけなくてよくなるんだけど 土方が何をいっても
日本語お上手ですね(^^)
>>855 --
<<<<<< これ ; デリミタっていうんだけどさ、よく打ち忘れるよね >>>>>>(きリッ!ッッ!!
---------
<<<<<<<<<<< Rubyだとつけなくてよくなるんだけど >>>>>>>>>>>(きリッッッ!!キリ!!キリキリッッキリッッッ!!ッッッッ!!!!
---------
<<<<<<<<<<<<< 土方が何をいっても >>>>>>>>>>>>>(キリッッッッ!キリッッキリッッ!きリッッッッ!!きリッッッ!ッッッ!!
放射性廃棄物のほうがマシ
天使#test_s
「天使の煽り」の提供でお送りしました
858 :
デフォルトの名無しさん :2011/07/09(土) 01:24:07.53
やっぱりバイナリって楽しいよなあ
うむ
860 :
デフォルトの名無しさん :2011/07/16(土) 15:15:50.33
DOS窓で実行させるコマンドファイルで、remだと表示されてしまいますよね。 表示されないコメント文ってありますか?
echo off rem コメント だっけ? つかバッチファイルはスレチだろおい
ありがと。やっぱそれしかないか。
@rem でもいいけどな
スレ違いだと言うのにレスつける馬鹿。
:コメント
ラベルじゃないか
3E 01 CD 08 01 C9
Ld a,01h Call 0108h Ret
870 :
862 :2011/07/21(木) 05:40:25.48
@rem がどんぴしゃでした。昔買ってあった、DOSプロンプトポケットリファレンス という本に載っていました。 スレ立てるまでもない疑問・質問 というスレがありました。 こういうのはあっちが良かったですね。相手してくれた人たち、ありがとうございました。
872 :
:2011/09/24(土) 15:16:50.73
873 :
872 :2011/09/24(土) 15:37:48.84
生成したexeがtest.exeだとウィルスと判断されたけど、名前を変えたら大丈夫でした。 test.exeだとチェックが厳しいのでしょうが、それでもどこでウィルスと判断されたのでしょうか?
>>872 ノートンのログに、なんというマルウェアと認識したか位記載されていないの?
875 :
872 :2011/09/26(月) 19:13:21.86
>>874 疑わしい動作を検出しました、としかありません。
でも、いろいろ元のプログラムをいじったら解決しました。
無駄に大きいexeのサイズをコンパクトにできるようにしたり、
最後にExitProcessを呼ぶようにしたりしました。
どれが決定的な役割を果たしたのかはわかりませんが。
ありがとうございました。
逆汗で出てきたコードで、 0000 : 0F00 mov この命令を、far callで実行したい場合、 9A 0000 0F00 call far ptr という感じにアドレス指定(セグメント:アドレス)のバイナリ命令で良いのでしょうか?
セグメントとオフセットが逆
レスありがとうございます。気をつけます。 しかし、それだけのミスなら良いのですが。。。自分のセグメントの扱いの知識が怪しいので。 セグメントに関して、もう1つ質問させてもらいます。 各セグメントのサイズは、64kbまでって書いてあったんですが、 逆汗が出力したコードの、データセグメントと思われる大きさが、 [FFFFh]を越えてたのですが、これはどういうことですか?
64KBを越えるデータの定義はできるよ。そういう領域をアクセスする時は、 セグメント番号とセグメント内オフセットを別々に計算して、セグメント番号は セグメントレジスタに、オフセットは別のレジスタにセットしてアクセスするとか、 32bitの絶対アドレスで計算するとか、それなりの気遣いが必要になる。 よくやる間違いは、配列のn番目をオフセットだけで計算する間違い。
大変勉強になりました。有難うございます。
F000:FFFFのマスクで正規化するのが普通かな? セグメントレジスタ値の演算をいかに減らすかが腕の見せ所か Cコンパイラにhugeモデルのアセンブラソース吐かせれば 勉強になるんじゃないかな
すみません 電気通信大学の知り合いから、「機械語はプログラミング言語ではない」との指摘を受けたのですが、そうなのでしょうか?
そいつにとってはそうなんだろ。
ありがとうございます。一般的にはどうなのでしょうか?
機械語といっても、アセンブラを暗に言ってるのかもしれないし、
バイト列のことを言ってるのかもしれないし、
(CPUが直接理解しない)中間言語のことを含めて言ってるのかもしれない
>>868 で意味は読めたが、0108が何だったか思い出せない
俺も耄碌したな ぴーろくだったかな
CPUが実行するバイナリコードを狭義には機械語と言うことがあるから、
>>882 の知り合いの言うようにプログラミング言語としてはアセンブラだろな。
アセンブラの吐く最終目的は実行コードである機械語だが、言語としては
他にデータ定義、領域定義、アセンブル方法に関する命令など色々な機能がある。
その昔はバイナリで直接書いてたんじゃね? それともノイマンアーキテクチャが出た当初から、 (机上であれ)アセンブリ言語は存在したのか?
そうなってくると、機械語とは、まさにbinaryか? hexで機械語とか語ってる奴はにわか。とかって思われるのかな、俺ら。
hexはいいだろ、ビットパターンを記号に置き換えただけなんだから
EDSAC では既に、ブートローダーが、 A20M とかいう感じで書かれたプログラムの紙テープを読み取って、 バイナリに変換してたぞ。 もっとも、この例では「A」の部分は紙テープ上のコードがそのままオペコードの バイナリになってたのだが、その次のアドレス指示部は、普通の文字で 十進で書かれたものをバイナリに変換してる。
なるほど、ハード的にアセンブルしちゃうようなものか
いや、EDSACのイニシャルローダーというのだけど、数十ワードだけどソフトウェア。 起動すると、ROMみたいな感じのハードウェアから、RAM(水銀遅延管)に書き込まれるんだと思った。
PDP-11の頃だって、トグルスイッチを使ってメモリの低位番地にHexで数ワード 「ブートローダーを読み込ませるコード」 を書き込み、「実行」 させると 紙テープからブートローダーが読み込まれ、さらに複雑なローダーが常駐する、 なんてことやってたぞ。昭和50年代だったかな
こういう古いこと言う奴を見るにつけ、 …ほんと、いい経験してて羨ましいと思うぜ、まじで 俺は、Z80から入ったニワカ
Z80はカワサキがKC80として現代でも互換機を提供しているから、学びやすいね。 俺にはいまだに8085の仕事が来るんだが、年に数枚出るこの基盤のために、 廃棄された基盤から外したチップを調達するのが年々大変になってる。 こんな石のマニュアルなんて紙のはとっくに絶滅してるし、生産中止になって長い から、netにも僅かしか残ってない。火星まで行って仕事した由緒正しい石なのに。
そういう、今更PDFをネットに置いても誰も損しないだろ、みたいなスキャンデータを とっとと置けるように制度作ってほしいよな。
今、ぽんとセラミックの8085もらったら、静かに卓上に飾っておきそう。 ついでにセラミックの780も連想してみたが、…なんか懐かしさが沸かない 今なら、PIC(エミュ入りドータボード)かFPGA(俺には書けない)で代替できたりしないかなって思う
6809 屋さんはいないのですね。(泣)
6809とか糞だろ すまんやっかみ FM7欲しかった
901 :
895 :2011/12/03(土) 04:00:15.87
>>898 屋さんってほどじゃないけど、6809の仕事もしたよ。
プロジェクトの記録が残っている最古の仕事だ。26年前のF社の製品。
(これより前は、「職歴」 しか残ってない。)
ROMが8KBの物しか無く、2000h番地ずつ4個に焼くのが面倒だった。
数年後保守を部下に任せた頃にはROMが1個になってて感動した(w
>>901 2764 ですかあ。27128 まではみたことがあるんですが。
あー、その頃だと机のスタンド引っぺがして殺菌灯買ってきてROMを消去してたなぁ。
904 :
895 :2011/12/04(日) 05:08:57.36
今の8085の基盤には27256を刺すんだけど、これも引っこ抜いて消した奴ばかり だから、脚がへなへなに曲がってるのばかり。27512刺しても使えるんじゃね? とか話してる。
換装しようとしたらまさかの3電源 # 「ない話」な。ふと思い出したので
907 :
デフォルトの名無しさん :2012/01/27(金) 05:42:46.20
8085の DAA 命令の動作と使い方について質問です。 A=09 の所に INR A して、DAA すると 0A→10 になる? A=90 の所に DCR A して、DAA すると 8F→89 になる? DAA っていうのがどんな動作するのかよく判らないので、なんでそうなるのかも。
BCDが判らないのか それとも仕組みが判らないのか しょぼいマイコンのそれもごく稀なケースでしか使い道ないし 今更別に覚える必要ないよ
909 :
デフォルトの名無しさん :2012/01/27(金) 17:25:53.13
BCDは知ってます。BCD3バイトを繰り下がり引き算するコードを解析してるので 知りたいのです。 ハーフキャリーが立ってたら何かを足す、というメカではないか と想像してるのですが、実地に知ってる人の話を聞くのが早いと思いまして。
内部実装(ゲート)レベルの話が聞きたいのか 俺もちょっと聞きたい
あ、引き算の方は、数ページ先ね
914 :
909 :2012/01/28(土) 13:47:27.73
リンク紹介ありがとうございます。DAAけっこう凝ったことをやってくれるんですね。 これはインストラクションセットの説明だけでは想像できませんでした。 BCD3バイト(LSB,2バイト目,MSB)からBCD1バイトを引く計算は、Creg=引く数で LDA LSB ADD C DAA STA LSB LDA 2バイト目 SBI 0 DAA STA 2バイト目 LDA MSB SBI 0 DAA STA MSB これでうまく行きそうに思います。どうでしょうか?
ADD C × SUB C ○ でした(m_ _m)
>>868 3E 01 C3 08 01 でおkと何度いえば
改造する側としては無駄に長いほうがありがたい
>>913 TTLが並んでるのを見ると懐かしさと同時に何故かワクワクしてくる
win95以前のDOS(win3.1?)のプログラムを勉強してるんですが、 この時代のコンパイラ、アセンブラはどういったものがあるんでしょうか? または、これらが走るプログラムをコンパイル、アセンブルするにはどうすればいいでしょうか?
>>919 CでいいならLSI-C試食版が手頃かな。癖はあるけどアセンブラも付いているぞ。
このスレとしては、標準デバッガをお忘れなくw 適当に拾ってこれるTD(無償配布版)って、16ビット対応だったっけ
回答ありがとうございます。
本当に少しでも興味が沸いたらでいいけどいまVIPにスクリプトが投下されてるんだが
数字しかないからもしかして機械語か?と思ったが自分にはわからないからもし機械語なら
意味を教えてほしい
http://hissi.org/ 必死チェッカー1位のやつだ
>>923 突っ込みどころ満載だな。
・今見たら既に二位だ。
・スクリプト投下ってなんだよ。こんなもん手打ちできる時間じゃないか。
・数字しかないから機械語っておめでてぇな。
・それが本当に機械語だとして、たった数個の数値だけで何が判るんだ。
まぁ、文字を数値化して書き込んでいるんだろうな。
無限ループ ebfe
そこはf3つけないと。
927 :
デフォルトの名無しさん :2012/11/20(火) 11:57:23.53
手マン
928 :
片山博文MZボット ◆0lBZNi.Q7evd :2012/11/21(水) 11:52:04.99
Windowsのシェルコードに詳しい人居ますか?
8085用のLSIC-80で、3行分溜めてからまとめるコードを以下のように書いていた。 strcpy(dst,1行目); strcat(dst,2行目); strcat(dst,3行目); strcat関数はstrlenとstrcpyを使うだろうからコール2つだろう と思っていたら、コール5つも含んでいた。string.hを調べて、copyした末尾のnullキャラ のアドレスを返す、stpcpy(dst,src) という関数を見つけた。それだと上のはこう書ける。 strcpy(stpcpy(stpcpy(dst,1行目),2行目),3行目); 上のよりは速い。 ところが、stpcpy関数はcで書かれていて、strlenとstrcpyの他にコール2つを含む コードになっていた。つまりstrcatの4/5にしか短縮できない。第一引数はHLだから strcpyした末尾アドレスをそのまま返せばstrcpyと同程度の性能になるのに許せん!
931 :
つづき :2012/12/16(日) 02:02:11.52
ということで、stpcpy関数を自作してみた。 stpcpy_::; char*stpcpy(char *s, const char *t) { LDAX D INX D MOV M,A ; (*s++ = *t++) INX H ORA A JNZ $-5 DCX H ; return(末尾アドレス) RET strcpyより僅かに速い関数ができた。机上での論理チェックもしたし、実装が楽しみ。 strcatもASMで書き直したら純粋にstrlenとstrcpyだけの性能にできた。 8085はレジスタが少ないので、automaticクラス変数のメモリアクセスがネックだな。
>>931 改良してやったぞ。
INX D
INX H
stpcpy_::; char*stpcpy(char *s, const char *t) {
LDAX D
MOV M,A ; (*s++ = *t++)
ORA A
JNZ $-5
RET
INX D INX H stpcpy_::; char*stpcpy(char *s, const char *t) { LDAX D MOV M,A ; (*s++ = *t++) ORA A RZ INX D INX H LDAX D MOV M,A ; (*s++ = *t++) ORA A RZ INX D INX H LDAX D MOV M,A ; (*s++ = *t++) ORA A RZ INX D INX H LDAX D MOV M,A ; (*s++ = *t++) ORA A JNZ $-23 RET
934 :
931 :2012/12/16(日) 06:48:10.81
>>932 ありがとう。これぞASMってコードですね。今は_asm_使ってcのstpcpy関数
の中に書いてるんで、どうやったらそれにできるかな。やってみよう・・・
935 :
931 :2012/12/16(日) 07:15:46.55
static const char inxd[2]={0x13,0x23}; /* INX D, INX H */ char* stpcpy(char *d, const char *s) { /* stpcpy()関数の最適化 12.12.11*/ *d = *s; /* do { } while( */ _asm_c("\n\tORA\tA\n\tJNZ\t$$-5\n"); /* *d++=(LDAX D;INX D;) ); */ } 関数の外に_asm_c( )が書けないので、これが最善でしたね。 定数を別の場所に集めるコンパイラでは使えなくなっちゃうけど(w
LSI-Cってasm()の中はそのまま.asmに出力すんじゃなかった? dummy() { _asm_c(" INX D\n"); _asm_c(" INX H\n"); _asm_c("stpcpy_::; char*stpcpy(char *s, const char *t) {\n"); _asm_c(" LDAX D\n"); _asm_c(" MOV M,A ; (*s++ = *t++)\n"); _asm_c(" ORA A\n"); _asm_c(" JNZ $-5\n"); _asm_c(" RET\n"); }
937 :
931 :2012/12/16(日) 19:05:52.30
あはは、それは思いつかなかった。それができるなら、INX Dの行に do1: とかラベル 振って、if ( (*d = *s)==0 ) goto do1; とかやれば殆どcにできそうですね。 明朝やってみますね。 ありがとう。
938 :
931 :2012/12/17(月) 04:44:25.32
937の方針は、DとHのpush/popが出るので×。936の方針は、stpcpy_のラベルが illegal EXTRN stpcpy_ というエラーになりました。cのコールは外部コールなのに 内部にそのラベルがあるのはおかしいということですね。 ASMのラベルはcには見えなくて、アセンブルフェーズでエラーになるんですね。 結局、932のコードを実装するには935が最善みたいです。定数をstpcpyの中に 書くと INX D から実行が始まっちゃうし。932のsofをromlibのstpcpy_と置換する のが正論なんでしょうけど、配布済みのromlibをいじるのも畏れおおいし(w
>>938 >cのコールは外部コールなのに
>内部にそのラベルがあるのはおかしいということですね。
>ASMのラベルはcには見えなくて、アセンブルフェーズでエラーになるんですね。
ラベルにコロン二個付けててそんなわけないだろう
940 :
931 :2012/12/17(月) 06:00:05.25
わけないだろうって言っても、出ちゃうの。LSICのフェーズ分けのせいなんでしょうね。 #include <string.h> #include <stdlib.h> char _asm_c(char *); charCUR[190],WCUR1[64],WCUR2[64]; void dummy(void) { _asm_c("\n\tINX\tD\n"); _asm_c("\n\tINX\tH\n"); _asm_c("\nstpcpy_:: ;\n"); _asm_c("\n\tLDAX\tD\n"); _asm_c("\n\tMOV\tM,A\n"); _asm_c("\n\tORA\tA\n"); _asm_c("\n\tJNZ\t$$-5\n"); _asm_c("\n\tRET\n"); } void setcur(char *buf) { if( WCUR1[0] & WCUR2[0] ) { strcpy(stpcpy(stpcpy(CUR,WCUR1),WCUR2),buf); } WCUR1[0]=WCUR2[0]=0; }
941 :
931 :2012/12/17(月) 06:16:33.17
これを cc80 -S test でASM吐かせるまではノーエラーだけど、吐かせたtest.ASMを NR80 -P test.lst test.asm でアセンブルすると、 EXTRN stpcpy_ の行について illegal extrn strcpy_ が出ますよ。 63行目 EXTRNstpcpy_ *** illegal extrn stpcpy_ lcc80の実行フェーズは、CPP=cソース展開、CF、CG80=cからASMを展開、 NR80=アセンブル という構成になってます。ASMのラベルのstpcpy_::は、 2番目のフェーズでは存在を認められないので、こういうことが起こります。
>>941 アセンブルでエラーになるなら対策すりゃいいだけの話じゃね?
NR80ってアセンブラの仕様が分からんからなんでエラーになってるのか判らんが
>>935 でエラーにならないなら
>>935 のコードで出力される相当の内容を
_asm_c()で書けばいいだけのことだろう。
943 :
931 :2012/12/18(火) 04:44:08.12
なんか話がループしてる(w >935のコードで出力される相当の内容 と思って 書かれたのが936でしょ。 対策すりゃいいだけ、ってのに対応していろいろいじった 経過が938で最後はやっぱり935。LSIC80では936は実装できませんでした、という話。 >アセンブラの仕様が分からんからなんでエラーになってるのか判らんが アセンブラの仕様は分からなくてもエラーメッセージから推測できましたけど。 cはstpcpy_を外部ラベルとしてコールする機械語を吐くが、同じソースの中に stpcpy_というラベルがある。それじゃ外部であるという宣言 (EXTRN stpcpy_) が 間違いなんじゃね? という意味のエラーですね。 936のstpcpy_::のラベルの場所をコールするcの書式とかあります? asmなら call dummy+2 とか書けるけど、cではそうは書けないよ。 cからの呼びだし書式は<string.h>準拠で書ける機械語コード、という条件で 俺がたどりついたのが935だった。
>>943 >936のstpcpy_::のラベルの場所をコールするcの書式とかあります?
>asmなら call dummy+2 とか書けるけど、cではそうは書けないよ。
typedef char*(*pstpcpy)(char *s, const char *t);
((pstpcpy)((char*)dummy + 2))(CUR, WCUR1);
無駄にtypedefとかしない方がいいかな?
((char*(*)(char*, const char *))((char*)dummy + 2))(CUR, WCUR1);
>>944 もだが恐らくは CALL dummy+2 よりは冗長なコードを吐くとは思うのでこういう呼び出し方を
することが無意味なのは言うまでもない。
BCを関数内で壊していいなら。 char*stpcpy(char *s, const char *t) { _asm_c(" DEFB 01H\n"); _asm_c(" INX D\n"); _asm_c(" INX H\n"); _asm_c(" LDAX D\n"); _asm_c(" MOV M,A ; (*s++ = *t++)\n"); _asm_c(" ORA A\n"); _asm_c(" JNZ $-5\n"); _asm_c(" RET\n"); } とかなんか変な苦労するぐらいならインラインアセンブラなんか使わずに素直にアセンブリソースに分割すべき。
947 :
931 :2012/12/18(火) 14:38:23.39
>>944 のtypedefは素直にdummy+2をコールするコードだけが出ました。
01HはLXI Bなのね。よく思いつくなあ・・・
BCは壊してもいいのですが、たしかに素直じゃないですね。
こんな小さなコードでもいろんな見解が聞けてよかったです。ありがとうございました。
>>947 条件付ジャンプでオペランド部分に飛び込むのは常套手段。
--
; aが0なら0xffにそうでないなら0にする
and a
jp z $+2
xor a
db 0dah ; jp c
ld a, 0ffh
--
とか。
>; aが0なら0xffにそうでないなら0にする 例がマヌケ杉 cpi 1 sbb a
950 :
931 :2012/12/18(火) 16:56:00.71
私もASMバリバリの時代はそんなテクを使いこなしていたのかな。忘れてるけど。 8085はけっこう深入りしたけど、ゼッパチはふつうのユーザー止まりでした。 7801で、現場に行ってから32bit/16bit:DEHL/BCを書いたことがあります。 それが初めてのソフト除算で、よくパツイチで通ったなあ・・・ ご先祖様は助けてくれない (そんなもん無かったから) 前世の行い? あんな奇跡はそのとき一回きりでした。その後宝くじは買いません。
>>930 そもそも LSI-C80 ならバカなソース書かなきゃそんな酷いコード吐かないんでない?
char*stpcpy(char *s, const char *t)
{
while (*s = *t) {
s++;
t++;
}
return s;
}
手許の LSI-C86 試食版での結果は↓だったよ。
stpcpy_::
PUSH SI
MOV SI,AX
JMP _1
_2:
INC SI
INC BX
_1:
MOV AL,[BX].B
MOV [SI].B,AL
TEST AL,AL
JNE _2
MOV AX,SI
POP SI
RET
訂正 LSI-C80 → LSI C-80 LSI-C86 → LSI C-86
先ず第一に、80と86ではコードジェネレータが違うこと。 →80版は86版ほどタイトなコードは生成しない。 第二に、初回のジャンプを省略しようかと言うレベルの話をしていること。 →8086のコードは参考にしかならない。 全く的外れと言わざるをえない。
>>953 >先ず第一に、80と86ではコードジェネレータが違うこと。
>→80版は86版ほどタイトなコードは生成しない。
じゃあどんなコード吐くの? 参考に晒してくれたっていい罠。
>第二に、初回のジャンプを省略しようかと言うレベルの話をしていること。
少なくとも
>>930-931 はそんな話してない訳だが。
>→8086のコードは参考にしかならない。
参考になるならいいじゃん。アホか?
>>953 >第二に、初回のジャンプを省略しようかと言うレベルの話をしていること。
そこまで気にすんなら関数呼び出しのコストも削れよw
>>954 名前:デフォルトの名無しさん[sage] 投稿日:2012/12/19(水) 12:27:27.27
そう真っ赤になるなって。自分の投稿時間でも眺めて和めよ。
和んだ
>>930 >8085用のLSIC-80で、3行分溜めてからまとめるコードを以下のように書いていた。
> strcpy(dst,1行目);
> strcat(dst,2行目);
> strcat(dst,3行目);
>strcpyした末尾アドレスをそのまま返せばstrcpyと同程度の性能になるのに許せん!
実際その部分が全体のパフォーマンスにどの程度影響及ぼしてるわけ?
多少効率が悪かろうとも、間に合ってるなら以降の作業は徒労ということになるが。
959 :
931 :2012/12/19(水) 16:54:57.38
sprintfで実数変換使うと間に合わない、整数変換でも幾つもやると同様、ぐらい。 4800BPSを4CH同時に入出力してて、あるCHがこの例です。1CHだけならイイが、 4CHみんな整数変換とかstrcatを使うと危ないので軽くできればしておきたいです。 間に合わない=受信ringで周回遅れが発生して行の再構成が失敗します。 clockは3.072MHzで、これを8253で分周して8251用と10mS割込用のclock作ってます。 まあ、暇だから最適化で遊んでるってのもありますけど。
sprintf() 既に使ってるなら、 sprintf(dst, "%s%s%s", 1行目, 2行目, 3行目); とか書けば保守性は向上するな。 sprintf()の実装や連結する文字列のバイト数によっては負荷ともなりうるが。
>>959 >sprintfで実数変換使うと間に合わない、整数変換でも幾つもやると同様、ぐらい。
重い箇所分かってんなら最適化で一番効果が期待できるのはそこだが?
>>930 >8085用のLSIC-80で、3行分溜めてからまとめるコードを以下のように書いていた。
> strcpy(dst,1行目);
> strcat(dst,2行目);
> strcat(dst,3行目);
最初からひとつのバッファに3行分溜めればまとめる必要もねんじゃね?
Cで速度最優先なら、str系ではなく、自分で長さを保持して全てmemcpy。 それでもダメってところで、ようやくアセンブラ。
>sprintfで実数変換使うと間に合わない、 LSI C-80って基本的な仕様が古いみたいだし、実数はfloatでも一旦doubleに昇格してから 演算するとかですげえ遅いんじゃないの?C89以前では普通だったけど。 実数が本当に必要かも検討するべき。
LSI Cは実数遅いよ。余りチューンしてないってpnoriさんが言ってた。 まして80じゃぁしょうがない。多分自力で固定小数点数ライブラリを作るのが一番。
>>963 >Cで速度最優先なら、str系ではなく、自分で長さを保持して全てmemcpy。
8085での実装なら、memcpy()よりstrcpy()の方が速い。
967 :
966 :2012/12/19(水) 19:45:54.67
訂正 8085での実装なら、memcpy()よりstrcpy()の方が速い。 ↓ 8085での実装で、場合分けによる処理の最適化をしない前提なら、memcpy()よりstrcpy()の方が速い。 LSI C-80での実装がどうなってるかは知らん。
969 :
931 :2012/12/20(木) 06:43:03.90
%16 ; ここがwhile の行。 __2: LDAX D MOV M,A ORA A JZ __3 %17 INX H %18 INX D %19 JMP __2 __3: %20 RET JMPが2つあるのでサイズ最小ではないけど、素直なコードですね。 _asm_が混じるcコードより可読性はグー! memcpyよりstrcpyのほうが速いのは知って使ってます。
>>969 成る程、86版とは違うコードになるんだなあ。
1ループ中にジャンプ命令が2回あるからコピーする文字列が長いと86版に比べて効率は悪いが、
逆に、コピーする文字列が""で、結果1バイトしかコピーしない場合には効率は良いとも言えるな。
JZ __3
(略)
__3:
RET
のところは
RZ
になってればループを抜けなかった際のサイクル数が少なかったのに惜しい。
971 :
931 :2012/12/20(木) 13:55:00.11
R<条件> と、C<条件> はLSIC-80に実装されてないんですよね。なので、 if( r_ptr ^ w_ptr ) func( ); は、lda r_ptr、lxi H,w_ptr、xra M、JZ 飛び越し、call func が出ます。 これを lhld r_ptr、mov A,H、xra L、cnz func と、最適化しました。 (r_ptrとw_ptrは並んでいるので) メインループ中にこれが4種類あるので、 メモリアクセス削減になってます。
2ちゃんもひと少なくなったな
973 :
931 :2012/12/20(木) 17:14:18.48
8085用 romlibのcコード読んでたら、strncat( ) は目的stringの末尾にnullをsetする だけなのに、strncpy( ) は、目的stringがソースより長いとき 「残りを全て0で埋める」 ように書かれていました。 これは実害は無いにしろ、「余計なこと」 ですね。
974 :
931 :2012/12/22(土) 05:50:34.74
>>970 ループ中に毎回NOPのジャンプが実行されるのが、素直なコードの悔しい所ですね
char*stpcpy2(char *s, const char *t) {
goto do2;
do1: s++; t++;
do2: if (*s = *t) goto do1;
return(s);
} これだと頭のジャンプ1回が静的動的に無駄なだけで、あとはASMのコードと同性能
_asm_で書くより可読性は良いから、cでの実装にはこれがベストかと。
>>973 それがstrncpy()の奇妙な仕様。なので、余計ではない。
976 :
931 :2012/12/22(土) 12:37:11.14
え〜?? ほんとだ。わざわざそのように断ってある。なんでこんなことに なってるんだろう? 末尾nullだけでは困る事情がかつてあったのだろうか。
977 :
931 :2012/12/22(土) 13:08:23.06
>>974 をfor( ; (*s=*t); s++,t++ ) ; と書くと、素直版と同じコードになっちゃうんですね。
forで、頭JMPで実行条件判定に飛び込むパターンも見たことあるのですが、何が
決め手になるのかよく判らないなあ。
978 :
931 :2012/12/28(金) 04:30:02.13
strcat( d, s ) の中身:strcpy(d+strlen(d),s); return( d ); の展開が↓ push H push D pop H push H push H call LAUTO4 call strlen mov C,L mov B,H call LAUTO4 DAD B POP D call strcpy call LAUTO2 pop B pop B ret コールが5回もあるの(*o*) あんまりだ!
979 :
931 :2012/12/28(金) 04:36:00.53
ASMにしてみたのがこれ: 合ってるよね? strcat_: ; char *strcat(char *s, const char *t) { push H ; 第1引数を保存 mov A,M inx H ora A jnz $-3 ; 末尾を探す dcx H ; 末尾アドレスに戻す call strcpy_ ; その位置にcopy pop H ; 第1引数を復元(HL=返却値) ret
>>979 call して pop hl する代わりに、pop af して jmp してはどうだろう。
あ、なんだ、保存する必要さえなかったか。
>>979 速度優先なら、PUSH H〜POP HはBC に退避〜復帰させた方が早い。
但しstrcpy()の中で破壊されないこと前提になるから保守性は低下する。
strcpy()も展開した方がいいな、速度優先なら。
失業したおっさんらに質問です OS創りたいのですが 何から始めれば良いでしょう
マジレスするが、まずは失業しておかないと、創る時間とれないよ
失業せずにOSを作れないようなら、シングルタスクのOSを作る頭脳しかない。
989 :
デフォルトの名無しさん :2012/12/28(金) 13:27:11.77
今日の大喜利会場はここですか?
990 :
979 :2012/12/29(土) 04:06:22.83
>>980 動作変わっちゃいませんか?返却値は目的stringの頭ですけど、
strcpyする時は目的stringの末尾ですよね。
>>982 速度だけ優先ならそうですね。libであることを考慮すると速度・サイズ両面で
納得のゆく落とし所、ということで979にしました。 同サイズで速度ちょっと改善版:
strcat_: ; char *strcat(char *s, const char *t) {
push H ; 第1引数を保存
xra A
cmp M
inx H
jnz $-2 ; 末尾を探す
dcx H ; 末尾アドレスに戻す
call strcpy_ ; その位置にcopy
pop H ; 第1引数を復元(HL=返却値)
ret
徹底するなら速度版とサイズ版2種のlibを用意するのがイイですね。
991 :
979 :2012/12/29(土) 04:13:24.07
発端は、「libは、コンパイラ開発メーカーの(自分より頭のイイ)人が書くのだから、 速度・サイズ両面で充分練られた物だろう」 と思いこんでいたのが違った、という話。 乗除算のルーチンなんかはきっちりコンパクトでしたけどね。 stringがこんだけルーズだと、printf系なんか読んだら憤死するかも(^o^)
992 :
デフォルトの名無しさん :2012/12/29(土) 05:53:01.81
うめますね(^o^)
993 :
デフォルトの名無しさん :2012/12/29(土) 05:53:36.75
うめ
994 :
デフォルトの名無しさん :2012/12/29(土) 08:01:12.51
うめ
996 :
デフォルトの名無しさん :2012/12/29(土) 08:38:16.29
うめ
JR $-2
うめ
うめ
76
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。