機械語なら俺に質問しろ!その2

■ このスレッドは過去ログ倉庫に格納されています
2012/12/29(土) 08:00:24.36
漏れは今までにC、C++、Pascal、HSP、JS、VBなど
数々の言語を極めてきたがやはり一番手にしっくりくる言語は機械語だ。

だから、機械語のことなら何でも質問しろ!
ただプログラムのコードなんかは長くなるがな。 あ、ASMの話でもいいよ。
2デフォルトの名無しさん
垢版 |
2012/12/29(土) 08:35:37.10
STAX B
2012/12/29(土) 09:25:57.44
The previous thread is...
http://toro.2ch.net/test/read.cgi/tech/1035288252/
2012/12/29(土) 10:08:23.50
糞スレ勃てんなボケが!
2012/12/29(土) 10:10:05.75
LSI C-80のランタイムかぁ。掛け算はアセンブラでがちに書いているだろうけど、
printf()系はCで書いたレベルだろうしなぁ。
2012/12/29(土) 10:33:43.28
この時代の組み込み用コンパイラのライブラリなんてサンプルプログラム感覚だろう。
ソースが付いてるのは好きに直せって意味だし。
2012/12/29(土) 11:16:36.63
関連スレ

アセンブラ
http://toro.2ch.net/test/read.cgi/tech/1314512680/l50
2012/12/29(土) 12:19:41.81
ライフボート(笑)
2012/12/29(土) 12:51:30.13
板違いだろ
昔のPC板に行けよ
2012/12/29(土) 13:26:37.91
ARMかMIPSあたりの質問カモーン
2012/12/29(土) 14:30:49.57
このスレッドは天才チンパンジー「アイちゃん」が
言語訓練のために立てたものです。

アイと研究員とのやり取りに利用するスレッドなので、
関係者以外は書きこまないで下さい。

                  京都大学霊長類研究所
2012/12/29(土) 17:08:42.56
バイナリエディタで Hello, world! と表示するプログラムを作った頃が懐かしい
今なら nop や適当なパディング詰めておく事で
アドレスを指定しやすくするなどの工夫が思いつくのだが
2012/12/29(土) 19:59:52.06
人造人間キカイダー
2012/12/29(土) 22:32:23.16
ピーガーピービョンビョン
2012/12/29(土) 22:45:52.35
ほんにょごにょん
2012/12/30(日) 04:45:59.92
>>5 fmtio.lというのがsprintfの実装でした。源流はunixですね。
素直なcで書かれてます。fmtio2.lというのがOS依存のprintf系実装。
1文字出力の関数だけが違って、フォーマッターの機能は共通に使えるように
うまく階層分けされていました。
2012/12/30(日) 06:27:41.56
いきなりsprintfとか行っちゃうの?
例えばUNIXだったらwrite(2)を叩くぐらいから始めるのでは。

ところで機械語と言ったらアセンブリじゃなくていきなりバイナリ打ち込み?
実行ファイルのフォーマットの理解とかからスタートなん?
2012/12/30(日) 09:01:55.91
組み込みなら、アドレスマッピングを意識するだけ。
2012/12/30(日) 19:15:15.42
>>17
いきなり打ち込みじゃないならアセンブラスレにでも行けばいい。
実行形式ファイルを丸々作る必要はなく、
char main[] = { ...
とかでもいいだろうし、デバッガで実行中にメモリを書き換えてもいいだろう。
2012/12/30(日) 19:19:03.02
>>19
>char main[] = { ...
>とかでもいいだろうし、デバッガで実行中にメモリを書き換えてもいいだろう。

RAM上のコードはプログラムとして実行できると決め付けてないか?
2012/12/30(日) 21:27:00.35
パーミッション?プリフェッチ?
2012/12/31(月) 11:41:39.50
石の好き好きだろう

データRAMはインストラクションフェッチ対象外、
と聞いたときは、カルチャーショックをうけたもんさ
NULLが0じゃない系があるときいたときもね(関連)
2012/12/31(月) 11:45:26.21
>>17,19
非組み込みであっても、平時はコンパイラ、アセンブラも活用するが、
デバッグ時や日常雑事でバイナリエディタでコード開いて、
ちょちょいっといじったりするのはマシン語のノウハウの領域
2012/12/31(月) 16:14:58.73
>>20
手段はいくつもあるという話をしただけで、決めつけている文章には見えないんだけど。
どう書けばよかったか教えてくれる?
2012/12/31(月) 16:28:57.67
>>24
>手段はいくつもあるという話をしただけ

>>19に書かれてる手段というと

・char main[] = { ...
・デバッガで実行中にメモリを書き換え

↑の2つだけど、どっちもRAM上のコードを実行する話じゃないの?
2012/12/31(月) 18:42:50.82
>>24
本人ではないが、「決めつける」というのは「どのような系でも可能であると想定する」
ということでは。
実際これが駄目だと思われるOSの例を思いつくけども。
特に断りもなくさらっと書くなら汎用な方法を書くべきではないかと。
2013/01/02(水) 16:00:26.27
>>25
> ↑の2つだけど、どっちもRAM上のコードを実行する話じゃないの?
一つ目の例は ROM になるかどうかは実行環境次第でしょ。
そして、RAM だとすると 19, 24 がどう悪いの?
19, 24 に書いてないことで非難されても困るんだけど。

>>26
> 特に断りもなくさらっと書くなら汎用な方法を書くべきではないかと。
俺はそうは思わないけど、君が汎用的な方法を書くことを非難したりはしないからどうぞどうぞ。

俺は、あれでもこれでもいい、という言い方をしたつもりであって、
あれかこれでなければならない
という言い方をしたつもりはないんだよね。
沢山あるやり方の中から、毛色の違う二つを例示したつもりであって、網羅したつもりではない。
「網羅したつもりのように見える」という話であれば、 24 に書いたようにどう書けばよかったか教えてほしい。
「網羅すべきだ」というなら、すべきことをしなかったというのは認めるが、俺にはそんなつもりはないから、網羅したい誰かがやればいい。
2013/01/02(水) 16:12:33.07
>>27
>一つ目の例は ROM になるかどうかは実行環境次第でしょ。

const 付いてなきゃ RAM 以外ありえんのじゃないの?
2013/01/02(水) 16:15:56.61
>>27
>俺は、あれでもこれでもいい、という言い方をしたつもりであって、

狭い知識でしか語ってないから馬鹿にされてんだよいい加減気付け
2013/01/02(水) 17:33:55.52
おまえもな
2013/01/03(木) 11:12:59.82
機械語っていうから低レベル(技術のレイヤーの)なことにすごく詳しい人が
書き込んでるのかと思ったらそうでもないのか。
単に「数字の羅列でプログラムが書ける俺ってカッケー」みたいな感じ?
2013/01/03(木) 11:15:52.36
>>28
リンカスクリプトでもなんでも好きに書けばいいし、ROM に焼いてしまえば const つけなくても ROM だろう。
これも網羅したつもりはないからね。

>>29
俺は馬鹿にするなとは主張してないから、好きなだけ馬鹿にしたらいいし、君の広い知識も披露していくといいよ。
2013/01/03(木) 11:23:06.67
>>32
>リンカスクリプトでもなんでも好きに書けばいいし、ROM に焼いてしまえば const つけなくても ROM だろう。

char main[] なんてHEXファイルにも現れないもんどーやってROMに焼くの?
配列そのものと配列の初期値と勘違いしてないか?
2013/01/03(木) 11:53:39.47
>>33
どっからどこまで焼くべきかなんて自分で分かるんだから好きに焼けばいい。

> 配列そのものと配列の初期値と勘違いしてないか?
そんなん環境によると思うが、環境に合わせたコードを書けばいいだろう。
だいたい、俺はどこでも動くと言った覚えはないし、そもそも >20 に対して「決めつけてるつもりはない」という意味の
返信をしているんだから、スタートアップが _main にジャンプした場合にそこが必ず実行可能だと主張していない
と解釈してもらって当然じゃないかと思ってるから、そうではないというなら説明してもらいたい。
そして、配列の初期値をコピーした _main を実行したとしても、コピーの必要のないグローバル変数の _main を実行
したとしても、どちらとも矛盾する主張をここまでにしたつもりはないよ。

で、 char main[] = { ... の場合に、配列の初期値なんてものを作って、実行時にコピーする環境が実在するの?
作れば作れるんだから実在するのかも知れないけど。
これ、俺はグローバル変数のつもりだったんだけど、もしかして、ローカル変数ならばって話をしてる?だとしたら
下らないことにつき合わせてごめんね。
2013/01/03(木) 11:58:21.96
マシン同士の会話が始まっちゃったんで
どっちかが焼き切れるのを待とうや
2013/01/03(木) 12:07:40.19
>>34
>で、 char main[] = { ... の場合に、配列の初期値なんてものを作って、実行時にコピーする環境が実在するの?

ROM化前提ならそれが普通。
2013/01/03(木) 12:14:04.96
>>34
>で、 char main[] = { ... の場合に、配列の初期値なんてものを作って、実行時にコピーする環境が実在するの?

ローダーがRAM上にプログラム読み込んで実行する環境しか知らんみたいね。
2013/01/03(木) 14:27:54.77
実家から戻ってきてみたら、まだやってたぜこれ

そんなことよりおまえらことよろな
2013/01/04(金) 04:05:14.23
ん、今年も宜しく。
2013/01/04(金) 05:01:31.35
LSIC-85 で、stpcpy見つけてうまくいったから、RX200で使おうとしたら、無かった。
LSIC.man 見たら、MS/DOSでしか使えないって書いてあった(w
2013/01/04(金) 05:27:58.05
>LSIC-85 で、

新製品?
2013/01/04(金) 05:44:46.63
>>40
glibcやnewlibにもあるしそんな珍しいもんでもないと思うが。
http://www.gnu.org/software/libc/manual/html_node/Copying-and-Concatenation.html#index-stpcpy-502
http://sourceware.org/newlib/libc.html#stpcpy
2013/01/04(金) 05:47:13.65
http://pubs.opengroup.org/onlinepubs/9699919799/functions/stpcpy.html
2013/01/04(金) 15:33:17.32
>>34
char main[]のアドレスが実行可能かどうかもアレだけど、
そもそもこれってリンクの段階でリンカはシンボル名しか見てなくてそれが関数
なのか配列なのかはお構いなしってことだよね。
普通Cの処理系ってそういうものなんだっけ? 例えば配列だとリンクできないような
処理系はないのかな?
2013/01/04(金) 15:48:11.68
>>44
処理系に拠るんじゃないかな。
Cだと最初の初期化ルーチンで初期化を行った後にmain()を呼び出すけど、
リロケータブルオブジェクトには大抵セグメント情報が付いてて、コードセグメントに
配置された初期化ルーチンからデータセグメントのmain[]を呼び出せない
アーキテクチャは普通にあるから、それをリンカがエラーとするか、データセグメントに
配置されたmain[]のアドレスを単なる値としてリンクを成功させるかは処理系に
拠る筈。安全の面では前者が望ましいのは勿論。
■ このスレッドは過去ログ倉庫に格納されています