1 名前:デフォルトの名無しさん [2007/08/14(火) 17:18:08 ] アセンブラ全般に関するスレッドです。 【前スレ】 アセンブラ… ( ゚д゚)ウッウー pc11.2ch.net/test/read.cgi/tech/1174825173/
754 名前:デフォルトの名無しさん mailto:sage [2008/07/18(金) 11:40:04 ] 夕食ってどうやって作るんですか->一例を回答->それは調理だな
755 名前:デフォルトの名無しさん mailto:sage [2008/07/18(金) 16:51:24 ] CASLの問題のこと聞いてもおk?
756 名前:デフォルトの名無しさん mailto:sage [2008/07/18(金) 18:43:28 ] レスがどんなアセンブラでも構わないならいいんじゃね? っていうか専門スレないの?
757 名前:デフォルトの名無しさん mailto:sage [2008/07/18(金) 18:51:47 ] 情報処理試験のあれか、1バイトが16ビットだっけか。
758 名前:デフォルトの名無しさん [2008/07/18(金) 19:26:11 ] おいおい 1バイトは8ビットだろ・・・。
759 名前:デフォルトの名無しさん mailto:sage [2008/07/18(金) 19:32:52 ] 情報処理技術者試験出題範囲を見る限りでは、1語16ビットとは書いてあるが「バイト」という単語は出てこないっぽい。
760 名前:デフォルトの名無しさん mailto:sage [2008/07/18(金) 19:38:38 ] >>758 決まってるわけじゃないよ。多いだけ。
761 名前:デフォルトの名無しさん mailto:sage [2008/07/18(金) 22:23:51 ] >>760 このスレの住人ならそんなこと百も承知だろう
762 名前:デフォルトの名無しさん mailto:sage [2008/07/18(金) 22:36:07 ] ワードアドレッシングマシンなんだよな確か
763 名前:デフォルトの名無しさん mailto:sage [2008/07/18(金) 22:54:27 ] CASL でシフトによる割り算がまったく思いつきません。どなたかお手本をみせていただけませんか?
764 名前:デフォルトの名無しさん mailto:sage [2008/07/18(金) 23:21:16 ] >>763 とりあえず1ビット右シフトを考えてみて。
765 名前:デフォルトの名無しさん mailto:sage [2008/07/19(土) 02:29:36 ] 昔々あるところに、1byteが6bitや9bitのコンピュータがあってだな…
766 名前:デフォルトの名無しさん mailto:sage [2008/07/19(土) 04:10:28 ] >>765 自作?
767 名前:デフォルトの名無しさん mailto:sage [2008/07/19(土) 06:11:10 ] 基本的に1byteは8bitだけど8bitじゃない場合もあるんだっけ? マスタリングTCP/IPでは明確にするためにoctetを使う、みたいなのが書いてあった ちなみに1hydeは156cmで固定 学生の知識だから合ってるか分かんないけど
768 名前:デフォルトの名無しさん mailto:sage [2008/07/19(土) 09:59:51 ] PDP-10とかだな
769 名前:デフォルトの名無しさん mailto:sage [2008/07/19(土) 12:53:32 ] > 学生の知識だから合ってるか分かんないけど 156cmをどこで習うんだよ!
770 名前:デフォルトの名無しさん mailto:sage [2008/07/19(土) 13:36:10 ] >>763 34÷10 =0x22/0x0a =100010b/1010b 011 ──── 1010)100010 1010 ─── 01110 1010 ── 0100 =11bあまり100b =3あまり4
771 名前:デフォルトの名無しさん mailto:sage [2008/07/20(日) 10:47:02 ] 以下はメモリ上に格納された数値の合計を計算して持ち帰るサブルーチンSUMである。 www.dotup.org/uploda/www.dotup.org2018.txt これを元にメモリ上に格納された数値の最大値を見つけるサブルーチンMAXを作れ。見つけた最大値はメモリ上のANSの番地へ格納すること。 どなたかボスケテ
772 名前:デフォルトの名無しさん mailto:sage [2008/07/20(日) 10:55:43 ] ここは宿題スレじゃありません。
773 名前:デフォルトの名無しさん mailto:sage [2008/07/20(日) 10:58:50 ] ww
774 名前:デフォルトの名無しさん mailto:sage [2008/07/20(日) 11:06:58 ] CASLはほとんど忘れてるよ。 算術系の命令がなくてアドレスの計算命令で代用するのが ポイントだったのがよみがえった。
775 名前:デフォルトの名無しさん mailto:sage [2008/07/20(日) 12:53:42 ] なんすかその8086のLEAみたいな小技は
776 名前:デフォルトの名無しさん mailto:sage [2008/07/20(日) 13:29:09 ] 内部レジスタをけちってるんですよ。たしかCOMETを後付けで内部解説する教科書があったような気が。
777 名前:デフォルトの名無しさん mailto:sage [2008/07/20(日) 13:53:14 ] >>774 即値の加減算命令がないからLEAでなんとかすれ。 という話ですか。 つうか即値扱えるのってLEAだけしかないんだっけ? >>776 内部レジスタつうか命令デコーダがものすげーシンプルになる命令セット。 だった気がする。 その割にGRが5個とか半端なのがよくわからん。
778 名前:デフォルトの名無しさん mailto:sage [2008/07/20(日) 15:36:31 ] CASL命令の基本がレジスタとメモリ間の演算で、加算減算もレジスタとメモリ。 そなものでレジスタ間の演算がわりとめんどい。 LAD GR1,0,GR0 // MOV R1, R0 LAD GR0,1,GR0 // ADD R0, 1 LD GR1,0,GR0 // MOV R1, [R0] 比較演算は代替手段がないので片方を必ずメモリに落とす必要がある。
779 名前:デフォルトの名無しさん mailto:sage [2008/07/20(日) 16:04:32 ] 6809を考えれば‥‥。
780 名前:デフォルトの名無しさん mailto:sage [2008/07/20(日) 16:36:25 ] 09は掛け算が意外にもレジスタ間なんだよな。
781 名前:デフォルトの名無しさん mailto:sage [2008/07/20(日) 20:25:29 ] どこが意外なんだか。
782 名前:デフォルトの名無しさん mailto:sage [2008/07/20(日) 20:35:59 ] あのニーモックの中では特異に思えたんだけど、他のCPUじゃ当たり前かな?
783 名前:デフォルトの名無しさん mailto:sage [2008/07/21(月) 00:20:30 ] Addressを取れるOP codeが余ってなかったから必然 しかし遡るなら6809なんて中途半端なんじゃなくて PDP-8とかHITAC-10とかもっと昔の制御用コンピュータだろ
784 名前:デフォルトの名無しさん mailto:sage [2008/07/21(月) 01:00:46 ] 63C09は・・・忘れた(w
785 名前:デフォルトの名無しさん [2008/07/22(火) 01:06:43 ] ジャンプ命令について質問です。 いま、以下のような命令があるとします。 BRA _main この命令ではmainの前に_(アンダーバー)が付いています。 この命令と、次の命令 BRA main では、どのような違いがあるのでしょうか?
786 名前:デフォルトの名無しさん mailto:sage [2008/07/22(火) 01:13:10 ] ラベルが違う。
787 名前:デフォルトの名無しさん mailto:sage [2008/07/22(火) 02:26:35 ] もしC言語のソースをコンパイルした結果を見ての質問ならこう。 「キミの使っているCコンパイラが扱うオブジェクトフォーマットの仕様は 関数名の前にアンダースコア(_)を付ける仕様だった。」 C言語なら必ず付くわけでもなく、アセンブリ言語だから必ず_から始まらなければ ならないわけでもなく、何か特殊な効果を狙って_を付けた表記にしているわけでも ない。
788 名前:デフォルトの名無しさん mailto:sage [2008/07/22(火) 12:59:27 ] ついでに言うと、C言語のソースで A という名前の関数を作ったとして BRA A ってコードを吐くと、BRA命令のオペランドにAレジスタは指定出来ないとか、ラベルAは不正な名前、とかのエラーになるかもしれん。 なので、なにかしら法則を決めてアセンブラの予約語とぶつからないようにしてあげる必要が有る。 ということで _ をつける規則を採用したコンパイラがそこにある、ってわけだ。
789 名前:デフォルトの名無しさん mailto:sage [2008/07/23(水) 01:31:36 ] ホスト(z/OS)下でアセンブラを触ることになりました。 が、ソースを見てもさっぱりです。 命令とかを解説しているサイトや参考書ってありません?
790 名前:デフォルトの名無しさん mailto:sage [2008/07/23(水) 08:46:31 ] >>789 z/OSだったらIBMに聞けよ :-)
791 名前:デフォルトの名無しさん mailto:sage [2008/07/25(金) 12:18:08 ] いったいどこをいじるんだろう・・・
792 名前:デフォルトの名無しさん mailto:sage [2008/07/25(金) 21:14:48 ] JWasm、バージョン上がってたんで何か少し本格的なものをアセンブルしたくなって CDSD-STDで試してみたんだけど、妙なところでエラーが出た。 これなんでだか誰かわかります? 他にMWSAでも試そうかと思ったけど、あれコマンドラインじゃシンボル使えなかったんだな。
793 名前:デフォルトの名無しさん mailto:sage [2008/07/27(日) 17:39:27 ] BYTE PTR DS:[EAX+8]の意味を教えていただけませんでしょうか? BYTE PTR [EAX+8]なら分かるのですが。 何故セグメントレジスタが出てくるのか分かりません。 また、MASMの良書も教えていただければ幸いです。 よろしくお願いいたします。
794 名前:デフォルトの名無しさん mailto:sage [2008/07/27(日) 17:42:02 ] 結果を比較してみればいいのに
795 名前:デフォルトの名無しさん mailto:sage [2008/07/27(日) 18:15:30 ] >BYTE PTR [EAX+8] これを本当に理解していれば、DS:も理解出来るはず。
796 名前:デフォルトの名無しさん mailto:sage [2008/07/27(日) 18:47:30 ] >>793 リニアアドレスを算出するには セグメント + オフセット だけど、どの『セグメント』を使うのかはCPUが暗黙の内に決めてる。 例えば、マシン語命令はCSで示すセグメントからフェッチしてくる・・とか。 でも>>793 の上の命令のように、『セグメント:オフセット』と明示的に セグメントを指定すると、暗黙のセグメント指定をそのセグメントで『上書き』出来る。 「セグメント オーバライド」辺りでググれ。
797 名前:デフォルトの名無しさん mailto:sage [2008/07/27(日) 19:03:29 ] まずCPUの名前を書かなきゃわからんだろう。 86とレジスタ名前が似ているだけかもしれんぞ。
798 名前:デフォルトの名無しさん mailto:sage [2008/07/27(日) 20:38:45 ] 個人的には動作モードのほうが気になる
799 名前:デフォルトの名無しさん mailto:sage [2008/07/27(日) 21:17:23 ] ありがとうございました。 なんとなく分かった気がします。 根本的なことが分かっていない気がするのではじめからきちんと勉強したいのですが なにか良いサイト、書籍などありませんでしょうか?
800 名前:デフォルトの名無しさん mailto:sage [2008/07/27(日) 21:45:55 ] >>799 Intel限定で良いなら「はじめて読む486」はどうよ?
801 名前:デフォルトの名無しさん mailto:sage [2008/07/27(日) 21:47:48 ] >>800 いや、これはプロテクトモード入門でしょうね。リアルモードでの経験+Cの経験があればOKですが。
802 名前:デフォルトの名無しさん mailto:sage [2008/07/27(日) 22:07:58 ] >>800 図解コンピュータシリーズの「図解 32ビットマイクロコンピュータ80386の使い方」とかも良いね。
803 名前:デフォルトの名無しさん mailto:sage [2008/07/28(月) 05:47:39 ] 教えられた書籍を買ってみます。 皆さんどうもありがとうございました。
804 名前:デフォルトの名無しさん mailto:sage [2008/07/28(月) 13:47:50 ] 便乗質問ですがx86_64用で上記みたいな感じの書籍はありますか? 最悪英語でもいいです。
805 名前:デフォルトの名無しさん mailto:sage [2008/07/28(月) 14:26:59 ] インテルが公開してる技術資料はどう? www.intel.co.jp/jp/download/index.htm
806 名前:デフォルトの名無しさん mailto:sage [2008/07/28(月) 16:11:58 ] 86系だったら特権モードのことをがっちりやりたいか、 ユーザーモードだけでいいかでアプローチは変わってくる。 ユーザーモードだけなら、cl /FA でコンパイルして、 そのソースを読んだり変更してアセンブルするといいかも。 生っぽい機械語がいいならリアルモードがわかりやすいが今更DOSもないよな。
807 名前:デフォルトの名無しさん mailto:sage [2008/07/29(火) 20:48:31 ] アセンブリの学習をしたいと考えていますが、以下の条件でお勧めの アセンブラ(GAS/NASM/MASMなど)をご教授いただければ幸いです。 ・開発も実行もx86環境。 ・WindowsとLinux環境、両方を利用しており、WindowsにはCygwinが導入されている。 ・出来るだけ両方の環境で学習したく、特定環境に依存するアセンブラ本体・文法は避けたい。 早い話、「これから始めれば無難」というものをお願いします。 ちなみに、手元にはMASMベースで解説してある以下の書籍があります。 『高級言語プログラマのためのアセンブラ入門 林晴比古著 ソフトバンククリエイティブ刊』
808 名前:デフォルトの名無しさん mailto:sage [2008/07/29(火) 21:14:26 ] そういえばJWasmにlinux向けのサンプルが増えてたけど、 MASM互換のアセンブラで一体なにするつもりなんだろう?
809 名前:デフォルトの名無しさん mailto:sage [2008/07/29(火) 21:39:33 ] >>807 アセンブラってのはどうせバイナリと紙一重なんだから あまり特定の処理系に依存してどうこう、というのは少ない。 (まぁ技巧的なマクロはそれなりに違うけどね) むしろ、Linux ならシステムコールとか、gccの関数インタフェースとか そこらへんがわかる資料をネットで見つけることが大事じゃないかと思う。 Cygwinでいい本は知らない。 GAS は gcc に -S オプションを付けて出力させたものが参考になる。 NASM は付属のドキュメントを読んで参考にできるのなら使える。
810 名前:デフォルトの名無しさん mailto:sage [2008/07/29(火) 22:15:45 ] 細かい記法がわからない時は、逆汗使ってみた事があったな。
811 名前:デフォルトの名無しさん mailto:sage [2008/07/29(火) 22:28:17 ] www.ibm.com/developerworks/jp/linux/library/l-gas-nasm.html このあたりの比較を見ていたら、オペランドの書き方などアセンブラ依存の文法がありそうだったので、 どれから覚えた方がいいかな、という意図の質問でした。 >>809 さんのレスを見ると、Cなどの他の上級言語の一部にアセンブリを使い 特定OS上で動作するアプリケーション開発レベルの話だと思いましたが、 IPL開発などのレベルではあまり関係ないような気もしました。 >>807 にてWindowsやLinuxと書いたのは、あくまでも開発環境としてのOSということで 理解頂ければ幸いです。分かりづらい質問を失礼しました。 「GAS、NASM、MASM、入門者に勧めるとしたらどれ?」ということでひとつ・・・
812 名前:デフォルトの名無しさん mailto:sage [2008/07/29(火) 22:33:35 ] Windowsメインならmasmかnasm、Linux or GCCメインならgas。 別にどっちでもいいが、たまにコンパイラの出力読むときによく使うコンパイラが吐くアセンブリソース読めたほうがいい程度の話で。
813 名前:デフォルトの名無しさん mailto:sage [2008/07/29(火) 22:35:36 ] >>812 なるほど、専らgcc環境なのでgasを使ってみようと思います。 的確なご指摘、ありがとうございました。
814 名前:デフォルトの名無しさん mailto:sage [2008/07/29(火) 22:43:45 ] そういえばYASMってgasの代替にはなるの? それとも只似た記法が使えるだけ?
815 名前:デフォルトの名無しさん mailto:sage [2008/07/29(火) 22:59:42 ] nasmと比べた事はあるんだけと、org周りのよくわからない挙動がなんかすっきりしてたのは覚えてるんだよな。
816 名前:デフォルトの名無しさん mailto:sage [2008/07/31(木) 19:45:12 ] masmとnasmってどう違うのですか?
817 名前:デフォルトの名無しさん mailto:sage [2008/07/31(木) 19:49:47 ] 見た目からして違うんじゃないか?
818 名前:デフォルトの名無しさん mailto:sage [2008/08/02(土) 00:15:08 ] あっそ
819 名前:デフォルトの名無しさん mailto:sage [2008/08/02(土) 00:42:19 ] さすがにmasm/nasm共通ソースなんてのは観たことないぞ。 プリプロセッサ駆使すれば出来るんだろうか?
820 名前:デフォルトの名無しさん mailto:sage [2008/08/02(土) 04:34:23 ] そんなんマクロ定義でどうにでもなるべ。 実際にやろうとは思わんが。
821 名前:デフォルトの名無しさん mailto:sage [2008/08/02(土) 08:47:29 ] 逆汗の作成に挑戦してるんだけど、 jmp命令とか出てきたらその都度、jmp先アドレスに飛びながらバイナリ読んでいかなきゃだめ? 試しに某exeを頭から順番に読み込んでみたら、jmp先アドレスが命令の先頭じゃなくて途中をさしちゃってるんだけども・・ 別の逆汗でも同じ結果になるんだけど、難読化かなにか?
822 名前:デフォルトの名無しさん mailto:sage [2008/08/02(土) 09:31:32 ] >>821 命令の途中にデータ埋め込んでるだけだろ。 jmp main msg db 'hello world', 0dh, 0ah, '$' main: mov dx, offset msg
823 名前:デフォルトの名無しさん mailto:sage [2008/08/02(土) 09:52:43 ] >>821 やってみておかしかったら、JMP 先の整合を付けてみる、でよい。たいていは
824 名前:デフォルトの名無しさん mailto:sage [2008/08/02(土) 10:59:49 ] その方向でとりあえずやってみる。ありがとう
825 名前:デフォルトの名無しさん mailto:sage [2008/08/02(土) 20:15:55 ] NASMの構造体がうまく使えません、教えてください! WIN32N.INCを使ってAPIの時間を取得しようとして section .text global start start: move eax,my_time push eax call GetLocalTimeA section .data my_time: ISTRUC SYSTEMTIME at SYSTEMTIME.wYear,dw 0 at SYSTEMTIME.wMonth,dw 0 at SYSTEMTIME.wDayOfWeek,dw 0 at SYSTEMTIME.wDay,dw 0 at SYSTEMTIME.wHour,dw 0 at SYSTEMTIME.wMinute,dw 0 at SYSTEMTIME.wSecond,dw 0 at SYSTEMTIME.wMilliseconds,dw 0 IEND みたいな感じで書いたのですが、 mov eax,my_time のところが error: parser: instruction expected となってしまいました。 何が問題で、どうすれば解決できるのでしょうか?
826 名前:デフォルトの名無しさん mailto:sage [2008/08/02(土) 20:23:23 ] moveってなってない?
827 名前:デフォルトの名無しさん mailto:sage [2008/08/02(土) 23:10:10 ] >>826 ありがとうございます 私って馬鹿ですね
828 名前:デフォルトの名無しさん mailto:sage [2008/08/02(土) 23:47:58 ] >>821 命令の途中? 俺はIDAでしてる
829 名前:デフォルトの名無しさん mailto:sage [2008/09/09(火) 12:04:28 ] アセンブラの勉強するのならやはり、はじめて読む8086を買って勉強するのがベストなんでしょうか? それとも、独習アセンブラや>>68 の本のほうが良いのでしょうか?
830 名前:デフォルトの名無しさん mailto:sage [2008/09/09(火) 12:20:56 ] 8086の勉強をするなら、俺ならはじめて読む8086を勧めるけど。
831 名前:829 mailto:sage [2008/09/09(火) 12:33:16 ] 8086にも興味はありますが、アセンブラの文法について学びたいと思ってます。
832 名前:デフォルトの名無しさん mailto:sage [2008/09/09(火) 13:05:58 ] マクロとか型とかはアセンブラ毎に違うので、一般的に学ぶ方法はない。 いい教科書も無いと思う。
833 名前:デフォルトの名無しさん mailto:sage [2008/09/09(火) 13:07:07 ] 文法はアセンブラによって異なる C言語のような決まりがあるわけではない MASM/NASM/TASM/GASなど色々あるからそれに合う本を探せ
834 名前:829 mailto:sage [2008/09/09(火) 13:19:39 ] >>832-833 有難うございます。実際に見て理解しやすそうな本を購入することにします。
835 名前:デフォルトの名無しさん mailto:sage [2008/09/09(火) 13:42:15 ] アセンブラで実際組むわけじゃなくどんな動作してるのか 見たいって程度ならCASLで十分じゃないか? 資料も豊富だし
836 名前:デフォルトの名無しさん mailto:sage [2008/09/09(火) 14:20:41 ] いまどきワードアドレッシングなアーキテクチャはおすすめしがたい
837 名前:デフォルトの名無しさん mailto:sage [2008/09/09(火) 14:29:48 ] なんで?
838 名前:デフォルトの名無しさん mailto:sage [2008/09/09(火) 23:45:31 ] >>831 文法って、 > 命令 レジスタ,メモリ; ぐらいじゃない? 命令のこと?
839 名前:デフォルトの名無しさん mailto:sage [2008/09/10(水) 02:09:47 ] >>838 正直セグメント絡みの方言が色々あってわけわからなくね?
840 名前:デフォルトの名無しさん mailto:sage [2008/09/10(水) 08:18:25 ] 疑似命令のバリエーションとか、 即値やレジスタ名の記法とか、 いろいろ違うけど? ソースとデスティネーションの順序が違うというのもあるか。
841 名前:デフォルトの名無しさん mailto:sage [2008/09/10(水) 08:44:36 ] キャッシュとか絡んでくると・・・
842 名前:デフォルトの名無しさん mailto:sage [2008/09/10(水) 09:03:59 ] アキュムレータ丸出し、暗黙のレジスタ参照、直交性の無いアドレッシングですね、wkrms
843 名前:デフォルトの名無しさん mailto:sage [2008/09/10(水) 16:31:58 ] >>839 全然
844 名前:デフォルトの名無しさん mailto:sage [2008/09/10(水) 17:03:23 ] >>843 一体いくつのアセンブラ使えるのさ?
845 名前:デフォルトの名無しさん mailto:sage [2008/09/11(木) 05:55:11 ] >>839 セグメントなんてもう10年近く意識したことないが。 もうDOSの.EXEなんて作れねえな。 >>840 違うCPUだと思えば別に問題ない。
846 名前:デフォルトの名無しさん mailto:sage [2008/09/11(木) 09:38:50 ] ASSUMEの具体的な効果とかもう覚えてない
847 名前:デフォルトの名無しさん mailto:sage [2008/09/11(木) 13:44:13 ] USINGは覚えてる?
848 名前:デフォルトの名無しさん [2008/09/17(水) 02:06:26 ] バイトでアセンブラやるんだけど アセンブラて何
849 名前:デフォルトの名無しさん mailto:sage [2008/09/17(水) 05:09:10 ] 馬鹿たれ、たとえバイトでもそんな質問がでてくるようなレベルの人間雇ったりしねえよ。
850 名前:デフォルトの名無しさん mailto:sage [2008/09/17(水) 07:44:45 ] 工場のラインに並んで部品を組み立てる仕事じゃない?
851 名前:デフォルトの名無しさん mailto:sage [2008/09/17(水) 10:49:10 ] なるほど確かにアセンブルする人だな。
852 名前:デフォルトの名無しさん mailto:sage [2008/09/17(水) 13:30:16 ] そっちの分野ではアッセンブルって言うけど、ここは黙っておこう。
853 名前:デフォルトの名無しさん mailto:sage [2008/09/17(水) 14:03:39 ] 斡旋ぶるぶる?
854 名前:デフォルトの名無しさん mailto:sage [2008/09/17(水) 21:58:55 ] 汗バイブ