- 1 名前:デフォルトの名無しさん mailto:sage [2012/12/29(土) 08:00:24.36 ]
- 漏れは今までにC、C++、Pascal、HSP、JS、VBなど
数々の言語を極めてきたがやはり一番手にしっくりくる言語は機械語だ。 だから、機械語のことなら何でも質問しろ! ただプログラムのコードなんかは長くなるがな。 あ、ASMの話でもいいよ。
- 41 名前:デフォルトの名無しさん mailto:sage [2013/01/04(金) 05:27:58.05 ]
- >LSIC-85 で、
新製品?
- 42 名前:デフォルトの名無しさん mailto:sage [2013/01/04(金) 05:44:46.63 ]
- >>40
glibcやnewlibにもあるしそんな珍しいもんでもないと思うが。 www.gnu.org/software/libc/manual/html_node/Copying-and-Concatenation.html#index-stpcpy-502 sourceware.org/newlib/libc.html#stpcpy
- 43 名前:デフォルトの名無しさん mailto:sage [2013/01/04(金) 05:47:13.65 ]
- pubs.opengroup.org/onlinepubs/9699919799/functions/stpcpy.html
- 44 名前:デフォルトの名無しさん mailto:sage [2013/01/04(金) 15:33:17.32 ]
- >>34
char main[]のアドレスが実行可能かどうかもアレだけど、 そもそもこれってリンクの段階でリンカはシンボル名しか見てなくてそれが関数 なのか配列なのかはお構いなしってことだよね。 普通Cの処理系ってそういうものなんだっけ? 例えば配列だとリンクできないような 処理系はないのかな?
- 45 名前:デフォルトの名無しさん mailto:sage [2013/01/04(金) 15:48:11.68 ]
- >>44
処理系に拠るんじゃないかな。 Cだと最初の初期化ルーチンで初期化を行った後にmain()を呼び出すけど、 リロケータブルオブジェクトには大抵セグメント情報が付いてて、コードセグメントに 配置された初期化ルーチンからデータセグメントのmain[]を呼び出せない アーキテクチャは普通にあるから、それをリンカがエラーとするか、データセグメントに 配置されたmain[]のアドレスを単なる値としてリンクを成功させるかは処理系に 拠る筈。安全の面では前者が望ましいのは勿論。
- 46 名前:デフォルトの名無しさん mailto:sage [2013/01/04(金) 18:44:29.48 ]
- >>36
いや、俺の普通は ROM から直接実行する環境。 >>37 逆じゃないの? >>44 全ての処理系/実行環境で有効だと主張したつもりはないので、 説明不足だと言って非難するなら、そこは甘受しよう。
- 47 名前:デフォルトの名無しさん mailto:sage [2013/01/04(金) 18:55:24.26 ]
- >>46
> >>37 > 逆じゃないの? > で、 char main[] = { ... の場合に、配列の初期値なんてものを作って、実行時にコピーする環境が実在するの? じゃあ君の普通の環境では、const 宣言もない main[] が ROM に配置されんの?
- 48 名前:デフォルトの名無しさん mailto:sage [2013/01/04(金) 21:42:16.52 ]
- >>45
手持ちのMac OS Xでやってみたら、リンクはできました。char main[]は データセグメントにある。 実行するとmainにジャンプした時点で死亡。実行属性が付いてないので。 mainが呼ばれる前に実行属性を付ける処理を呼ぶとmainを実行できたw >>46 自分は基本PCのOSしか知らないんですが、元の話で暗黙のうちに想定している 環境は何ですか? やはりプラットフォーム依存性が高いかと。 組み込み系とか興味はあります。 というわけで話を膨らませてみたつもりw
- 49 名前:デフォルトの名無しさん mailto:sage [2013/01/05(土) 08:39:35.88 ]
- クリックするだけで感染、みたいなのが多かった時期にソースを読んでると、
コード内にマシン語がデータとして居るのは、珍しくはない光景だったんだな 組み込みじゃないけど
- 50 名前:デフォルトの名無しさん mailto:sage [2013/01/05(土) 15:10:12.18 ]
- >>41 ごめん、LSIC-80の8085用オプションで。
- 51 名前:デフォルトの名無しさん mailto:sage [2013/01/05(土) 15:22:09.39 ]
- >>49
いわゆるトランポリンコードを実行するにはスタックとかヒープに実行属性が 付いてないとできないけど、今はセキュリティ上の問題になる。 でも古いコードだとそういうテクニックを使ってたりするのがあるから、互換性を 保つには闇雲に実行属性を落とせなかったり。 ユーザーの皆さん、古いアプリのサポートを打ち切るのは単に新しいバージョン を買うように仕向けている訳じゃないんですよ、みたいなw
- 52 名前:デフォルトの名無しさん mailto:sage [2013/01/05(土) 15:37:34.76 ]
- >>50
> LSIC-80の8085用オプション 8085って8080から拡張された入出力と割り込み機能をサポートする命令が2つ増えただけで 公式には8080と大して命令変わってないと思ったけど、LSI C-80って8085用の特別な機能 でもあんの?
- 53 名前:デフォルトの名無しさん mailto:sage [2013/01/06(日) 06:05:16.68 ]
- アセンブリフェーズがNR80だから、正確には8080のコード吐くんですね。
SIMとRIMはニーモニックが認められないので、DC 20h/30h で書きます。 _LCC80ファイルの中身見直したら、-i8080 -RN で8085固有の指定はありませんでした。
- 54 名前:デフォルトの名無しさん mailto:sage [2013/01/06(日) 19:45:24.08 ]
- 非公開命令でも吐いたら面白いのになあ。仕事では使えんけど。
home.comcast.net/~kvaughn65D/UnDocum_8085_Instructions.pdf
- 55 名前:デフォルトの名無しさん mailto:sage [2013/01/07(月) 06:41:05.63 ]
- 私が自分用に作ったメモにもこのインストラクションは載ってました。
8080から改良するときに、ちょっと凝ったプログラミングをできるように という思想が感じられますね。 このページ、活字が小さくて見づらい。だれかtextにしてくれないかな。
- 56 名前:デフォルトの名無しさん [2013/01/08(火) 15:45:46.76 ]
- うーんわからない。とあるUNIX(x86_64)のプログラムだけど、
(gdb) i r rax 0x00 rdi 0x800f5539034375816080 rip 0x800c7cff90x800c7cff9 (gdp) x/i 0x800c7cff9 0x800c7cff9 mov (%rdi),%rax (gdb) x/xg 0x800f55390 0x800f55390 0x0000000800f5bf98 (gdb) stepi (gdb) i r rax 0x800f5bfcc34375843788 rdi 0x800f5539034375816080 rip 0x800c7cffc0x800c7cffc なんでraxが0x800f5bf98にならずに0x800f5bfccになるの? テストプログラムで mov (%rdi),%rax を実行させても正しく間接参照する。C2Dのバグ疑ってもいいかな。
- 57 名前:デフォルトの名無しさん mailto:sage [2013/01/08(火) 16:01:03.11 ]
- あっとタブが飛んだ 再投稿
うーんわからない。とあるUNIX(x86_64)のプログラムだけど、 (gdb) i r rax 0x00 rdi 0x800f55390 34375816080 rip 0x800c7cff9 0x800c7cff9 (gdp) x/i 0x800c7cff9 0x800c7cff9 mov (%rdi),%rax (gdb) x/xg 0x800f55390 0x800f55390 0x0000000800f5bf98 (gdb) stepi (gdb) i r rax 0x800f5bfcc 34375843788 rdi 0x800f55390 34375816080 rip 0x800c7cffc 0x800c7cffc なんでraxが0x800f5bf98にならずに0x800f5bfccになるの? テストプログラムで mov (%rdi),%rax を実行させても正しく間接参照する。C2Dのバグ疑ってもいいかな。
- 58 名前:デフォルトの名無しさん mailto:sage [2013/01/08(火) 16:11:02.74 ]
- >>57
なんで最後に >(gdb) x/xg 0x800f55390 も一回やらんの?
- 59 名前:デフォルトの名無しさん mailto:sage [2013/01/08(火) 16:17:03.34 ]
- 変わってなかったのでコピペしませんでした。
(gdb) x/xg 0x800f55390 0x800f55390 0x0000000800f5bf98
- 60 名前:デフォルトの名無しさん mailto:sage [2013/01/08(火) 16:18:59.10 ]
- 念のために逆アセのバグも疑ってみない?
- 61 名前:デフォルトの名無しさん mailto:sage [2013/01/08(火) 16:28:15.43 ]
- それも疑ってみてました。正しいようです
(gdb) x/3xb 0x800c7cff9 0x800c7cff9 0x48 0x8b 0x07 テストプログラム (gdb) x/4i aaa 0x4006f0 <aaa>: mov %rdi,-0x8(%rsp) 0x4006f5 <aaa+5>: mov -0x8(%rsp),%rdi 0x4006fa <aaa+10>: mov (%rdi),%rax 0x4006fd <aaa+13>: retq (gdb) x/3xb 0x4006fa 0x4006fa <aaa+10>: 0x48 0x8b 0x07 違うコンパイラでコンパイルしてみたらコンパイルが終了しない...
- 62 名前:デフォルトの名無しさん mailto:sage [2013/01/08(火) 16:44:41.08 ]
- >>61
>違うコンパイラでコンパイルしてみたらコンパイルが終了しない... C2Dのバグかも?w
- 63 名前:デフォルトの名無しさん mailto:sage [2013/01/08(火) 17:06:08.41 ]
- プログラムで合成されたCソースで、コンパイラへの負荷がかなり高い部分があって、
cc1がCPU利用率100%に張り付いて終了しない。 スラッシング起こすほどのメモリは使ってないようだけど。小一時間放置してみる
- 64 名前:デフォルトの名無しさん mailto:sage [2013/01/08(火) 17:10:58.31 ]
- 理解できない現象を何でも自分以外のせいにするのは素人。
- 65 名前:デフォルトの名無しさん mailto:sage [2013/01/08(火) 17:22:11.70 ]
- コンパイルの山場は通過した模様。
たかだが50000行くらいのソースのコンパイルに20分くらいかかった。
- 66 名前:デフォルトの名無しさん mailto:sage [2013/01/08(火) 17:25:44.71 ]
- >>61
>違うコンパイラでコンパイルしてみたら C2Dのバグ疑うかってのに、同じCPU違うコンパイラで偶々動いたとしてそれでいい訳?
- 67 名前:デフォルトの名無しさん mailto:sage [2013/01/08(火) 17:38:49.14 ]
- 行きつく先がC2Dかはわからないけど、動く条件と動かない条件絞っていかないと
原因にたどり着けないでしょ。 問題の個所は別の呼び出しでは問題なく通っているので、 原因がC2Dと仮定するとえれー複雑な条件が必須なはずでお手上げかもだけど。 実は「おめーがx64のアセンブラ知らねーのが原因、その命令は他のレジスタも 参照してる」とかいう罵声も期待してたけど、飛んでこないところをみるとそう じゃなかったらしい。 ちなみにシングルスレッドなので別スレッドが書き換えてるもないです。(多分)
- 68 名前:デフォルトの名無しさん mailto:sage [2013/01/08(火) 17:43:19.05 ]
- >>67
>ちなみにシングルスレッドなので別スレッドが書き換えてるもないです。(多分) プロセッサのバグ疑うんならOSも疑うべきだろ
- 69 名前:デフォルトの名無しさん mailto:sage [2013/01/08(火) 17:47:02.78 ]
- >>67
>行きつく先がC2Dかはわからないけど、動く条件と動かない条件絞っていかないと >原因にたどり着けないでしょ。 別のコンパイラ試すってのは条件絞ってることにはならんよ。
- 70 名前:デフォルトの名無しさん mailto:sage [2013/01/08(火) 18:00:40.95 ]
- やり方によってはなるよ。
- 71 名前:デフォルトの名無しさん mailto:sage [2013/01/08(火) 18:05:39.70 ]
- ならないよ
- 72 名前:デフォルトの名無しさん mailto:sage [2013/01/08(火) 18:10:49.10 ]
- 別のコンパイラを試した → 動いた → 前のコンパイラが原因
とはならない。可能性のひとつとして考えられるというだけ。 前のコンパイラが原因の可能性のひとつであるということは別のコンパイラを試す前と変わらない。
- 73 名前:デフォルトの名無しさん mailto:sage [2013/01/08(火) 18:22:00.06 ]
- コンパイラ変えてコンパイルしなおすだけだったら、そうだろうね。
やってる本人が出来るといってる方法でやってるんだからいいじゃん。
- 74 名前:デフォルトの名無しさん mailto:sage [2013/01/08(火) 18:48:48.76 ]
- やってる方法がトンチンカンだから書いてるプログラムがクソであることは容易に想像がつく
- 75 名前:デフォルトの名無しさん mailto:sage [2013/01/08(火) 19:03:04.86 ]
- 自分が想像できない事に言いがかり付けない方がいいよ。
ゴミクズみたいのが絡んできたし、これ以上有益な情報得られない だろうから退散します。 結果わかったら報告しに戻ってくるかも。
- 76 名前:デフォルトの名無しさん mailto:sage [2013/01/08(火) 19:07:41.55 ]
- 最後までクズでした
- 77 名前:デフォルトの名無しさん mailto:sage [2013/01/08(火) 19:10:51.57 ]
- 説明の責任は質問する側にあることが解ってないお子様なんだろう
|

|