漏れは今までにC、C++、Pascal、HSP、JS、VBなど
数々の言語を極めてきたがやはり一番手にしっくりくる言語は機械語だ。
だから、機械語のことなら何でも質問しろ!
ただプログラムのコードなんかは長くなるがな。 あ、ASMの話でもいいよ。
機械語なら俺に質問しろ!その2
■ このスレッドは過去ログ倉庫に格納されています
2012/12/29(土) 08:00:24.36
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/
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で書いたレベルだろうしなぁ。
printf()系はCで書いたレベルだろうしなぁ。
2012/12/29(土) 10:33:43.28
この時代の組み込み用コンパイラのライブラリなんてサンプルプログラム感覚だろう。
ソースが付いてるのは好きに直せって意味だし。
ソースが付いてるのは好きに直せって意味だし。
2012/12/29(土) 11:16:36.63
2012/12/29(土) 12:19:41.81
ライフボート(笑)
2012/12/29(土) 12:51:30.13
板違いだろ
昔のPC板に行けよ
昔の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 や適当なパディング詰めておく事で
アドレスを指定しやすくするなどの工夫が思いつくのだが
今なら 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文字出力の関数だけが違って、フォーマッターの機能は共通に使えるように
うまく階層分けされていました。
素直なcで書かれてます。fmtio2.lというのがOS依存のprintf系実装。
1文字出力の関数だけが違って、フォーマッターの機能は共通に使えるように
うまく階層分けされていました。
2012/12/30(日) 06:27:41.56
いきなりsprintfとか行っちゃうの?
例えばUNIXだったらwrite(2)を叩くぐらいから始めるのでは。
ところで機械語と言ったらアセンブリじゃなくていきなりバイナリ打ち込み?
実行ファイルのフォーマットの理解とかからスタートなん?
例えばUNIXだったらwrite(2)を叩くぐらいから始めるのでは。
ところで機械語と言ったらアセンブリじゃなくていきなりバイナリ打ち込み?
実行ファイルのフォーマットの理解とかからスタートなん?
2012/12/30(日) 09:01:55.91
組み込みなら、アドレスマッピングを意識するだけ。
2012/12/30(日) 19:15:15.42
>>17
いきなり打ち込みじゃないならアセンブラスレにでも行けばいい。
実行形式ファイルを丸々作る必要はなく、
char main[] = { ...
とかでもいいだろうし、デバッガで実行中にメモリを書き換えてもいいだろう。
いきなり打ち込みじゃないならアセンブラスレにでも行けばいい。
実行形式ファイルを丸々作る必要はなく、
char main[] = { ...
とかでもいいだろうし、デバッガで実行中にメモリを書き換えてもいいだろう。
2012/12/30(日) 19:19:03.02
2012/12/30(日) 21:27:00.35
パーミッション?プリフェッチ?
2012/12/31(月) 11:41:39.50
石の好き好きだろう
データRAMはインストラクションフェッチ対象外、
と聞いたときは、カルチャーショックをうけたもんさ
NULLが0じゃない系があるときいたときもね(関連)
データRAMはインストラクションフェッチ対象外、
と聞いたときは、カルチャーショックをうけたもんさ
NULLが0じゃない系があるときいたときもね(関連)
2012/12/31(月) 11:45:26.21
2012/12/31(月) 16:14:58.73
2012/12/31(月) 16:28:57.67
2012/12/31(月) 18:42:50.82
>>24
本人ではないが、「決めつける」というのは「どのような系でも可能であると想定する」
ということでは。
実際これが駄目だと思われるOSの例を思いつくけども。
特に断りもなくさらっと書くなら汎用な方法を書くべきではないかと。
本人ではないが、「決めつける」というのは「どのような系でも可能であると想定する」
ということでは。
実際これが駄目だと思われるOSの例を思いつくけども。
特に断りもなくさらっと書くなら汎用な方法を書くべきではないかと。
2013/01/02(水) 16:00:26.27
>>25
> ↑の2つだけど、どっちもRAM上のコードを実行する話じゃないの?
一つ目の例は ROM になるかどうかは実行環境次第でしょ。
そして、RAM だとすると 19, 24 がどう悪いの?
19, 24 に書いてないことで非難されても困るんだけど。
>>26
> 特に断りもなくさらっと書くなら汎用な方法を書くべきではないかと。
俺はそうは思わないけど、君が汎用的な方法を書くことを非難したりはしないからどうぞどうぞ。
俺は、あれでもこれでもいい、という言い方をしたつもりであって、
あれかこれでなければならない
という言い方をしたつもりはないんだよね。
沢山あるやり方の中から、毛色の違う二つを例示したつもりであって、網羅したつもりではない。
「網羅したつもりのように見える」という話であれば、 24 に書いたようにどう書けばよかったか教えてほしい。
「網羅すべきだ」というなら、すべきことをしなかったというのは認めるが、俺にはそんなつもりはないから、網羅したい誰かがやればいい。
> ↑の2つだけど、どっちもRAM上のコードを実行する話じゃないの?
一つ目の例は ROM になるかどうかは実行環境次第でしょ。
そして、RAM だとすると 19, 24 がどう悪いの?
19, 24 に書いてないことで非難されても困るんだけど。
>>26
> 特に断りもなくさらっと書くなら汎用な方法を書くべきではないかと。
俺はそうは思わないけど、君が汎用的な方法を書くことを非難したりはしないからどうぞどうぞ。
俺は、あれでもこれでもいい、という言い方をしたつもりであって、
あれかこれでなければならない
という言い方をしたつもりはないんだよね。
沢山あるやり方の中から、毛色の違う二つを例示したつもりであって、網羅したつもりではない。
「網羅したつもりのように見える」という話であれば、 24 に書いたようにどう書けばよかったか教えてほしい。
「網羅すべきだ」というなら、すべきことをしなかったというのは認めるが、俺にはそんなつもりはないから、網羅したい誰かがやればいい。
2013/01/02(水) 16:12:33.07
2013/01/02(水) 16:15:56.61
2013/01/02(水) 17:33:55.52
おまえもな
2013/01/03(木) 11:12:59.82
機械語っていうから低レベル(技術のレイヤーの)なことにすごく詳しい人が
書き込んでるのかと思ったらそうでもないのか。
単に「数字の羅列でプログラムが書ける俺ってカッケー」みたいな感じ?
書き込んでるのかと思ったらそうでもないのか。
単に「数字の羅列でプログラムが書ける俺ってカッケー」みたいな感じ?
2013/01/03(木) 11:15:52.36
2013/01/03(木) 11:23:06.67
>>32
>リンカスクリプトでもなんでも好きに書けばいいし、ROM に焼いてしまえば const つけなくても ROM だろう。
char main[] なんてHEXファイルにも現れないもんどーやってROMに焼くの?
配列そのものと配列の初期値と勘違いしてないか?
>リンカスクリプトでもなんでも好きに書けばいいし、ROM に焼いてしまえば const つけなくても ROM だろう。
char main[] なんてHEXファイルにも現れないもんどーやってROMに焼くの?
配列そのものと配列の初期値と勘違いしてないか?
2013/01/03(木) 11:53:39.47
>>33
どっからどこまで焼くべきかなんて自分で分かるんだから好きに焼けばいい。
> 配列そのものと配列の初期値と勘違いしてないか?
そんなん環境によると思うが、環境に合わせたコードを書けばいいだろう。
だいたい、俺はどこでも動くと言った覚えはないし、そもそも >20 に対して「決めつけてるつもりはない」という意味の
返信をしているんだから、スタートアップが _main にジャンプした場合にそこが必ず実行可能だと主張していない
と解釈してもらって当然じゃないかと思ってるから、そうではないというなら説明してもらいたい。
そして、配列の初期値をコピーした _main を実行したとしても、コピーの必要のないグローバル変数の _main を実行
したとしても、どちらとも矛盾する主張をここまでにしたつもりはないよ。
で、 char main[] = { ... の場合に、配列の初期値なんてものを作って、実行時にコピーする環境が実在するの?
作れば作れるんだから実在するのかも知れないけど。
これ、俺はグローバル変数のつもりだったんだけど、もしかして、ローカル変数ならばって話をしてる?だとしたら
下らないことにつき合わせてごめんね。
どっからどこまで焼くべきかなんて自分で分かるんだから好きに焼けばいい。
> 配列そのものと配列の初期値と勘違いしてないか?
そんなん環境によると思うが、環境に合わせたコードを書けばいいだろう。
だいたい、俺はどこでも動くと言った覚えはないし、そもそも >20 に対して「決めつけてるつもりはない」という意味の
返信をしているんだから、スタートアップが _main にジャンプした場合にそこが必ず実行可能だと主張していない
と解釈してもらって当然じゃないかと思ってるから、そうではないというなら説明してもらいたい。
そして、配列の初期値をコピーした _main を実行したとしても、コピーの必要のないグローバル変数の _main を実行
したとしても、どちらとも矛盾する主張をここまでにしたつもりはないよ。
で、 char main[] = { ... の場合に、配列の初期値なんてものを作って、実行時にコピーする環境が実在するの?
作れば作れるんだから実在するのかも知れないけど。
これ、俺はグローバル変数のつもりだったんだけど、もしかして、ローカル変数ならばって話をしてる?だとしたら
下らないことにつき合わせてごめんね。
2013/01/03(木) 11:58:21.96
マシン同士の会話が始まっちゃったんで
どっちかが焼き切れるのを待とうや
どっちかが焼き切れるのを待とうや
2013/01/03(木) 12:07:40.19
2013/01/03(木) 12:14:04.96
>>34
>で、 char main[] = { ... の場合に、配列の初期値なんてものを作って、実行時にコピーする環境が実在するの?
ローダーがRAM上にプログラム読み込んで実行する環境しか知らんみたいね。
>で、 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
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
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
2013/01/04(金) 15:33:17.32
>>34
char main[]のアドレスが実行可能かどうかもアレだけど、
そもそもこれってリンクの段階でリンカはシンボル名しか見てなくてそれが関数
なのか配列なのかはお構いなしってことだよね。
普通Cの処理系ってそういうものなんだっけ? 例えば配列だとリンクできないような
処理系はないのかな?
char main[]のアドレスが実行可能かどうかもアレだけど、
そもそもこれってリンクの段階でリンカはシンボル名しか見てなくてそれが関数
なのか配列なのかはお構いなしってことだよね。
普通Cの処理系ってそういうものなんだっけ? 例えば配列だとリンクできないような
処理系はないのかな?
2013/01/04(金) 15:48:11.68
>>44
処理系に拠るんじゃないかな。
Cだと最初の初期化ルーチンで初期化を行った後にmain()を呼び出すけど、
リロケータブルオブジェクトには大抵セグメント情報が付いてて、コードセグメントに
配置された初期化ルーチンからデータセグメントのmain[]を呼び出せない
アーキテクチャは普通にあるから、それをリンカがエラーとするか、データセグメントに
配置されたmain[]のアドレスを単なる値としてリンクを成功させるかは処理系に
拠る筈。安全の面では前者が望ましいのは勿論。
処理系に拠るんじゃないかな。
Cだと最初の初期化ルーチンで初期化を行った後にmain()を呼び出すけど、
リロケータブルオブジェクトには大抵セグメント情報が付いてて、コードセグメントに
配置された初期化ルーチンからデータセグメントのmain[]を呼び出せない
アーキテクチャは普通にあるから、それをリンカがエラーとするか、データセグメントに
配置されたmain[]のアドレスを単なる値としてリンクを成功させるかは処理系に
拠る筈。安全の面では前者が望ましいのは勿論。
2013/01/04(金) 18:44:29.48
2013/01/04(金) 18:55:24.26
2013/01/04(金) 21:42:16.52
2013/01/05(土) 08:39:35.88
クリックするだけで感染、みたいなのが多かった時期にソースを読んでると、
コード内にマシン語がデータとして居るのは、珍しくはない光景だったんだな
組み込みじゃないけど
コード内にマシン語がデータとして居るのは、珍しくはない光景だったんだな
組み込みじゃないけど
2013/01/05(土) 15:10:12.18
>>41 ごめん、LSIC-80の8085用オプションで。
2013/01/05(土) 15:22:09.39
>>49
いわゆるトランポリンコードを実行するにはスタックとかヒープに実行属性が
付いてないとできないけど、今はセキュリティ上の問題になる。
でも古いコードだとそういうテクニックを使ってたりするのがあるから、互換性を
保つには闇雲に実行属性を落とせなかったり。
ユーザーの皆さん、古いアプリのサポートを打ち切るのは単に新しいバージョン
を買うように仕向けている訳じゃないんですよ、みたいなw
いわゆるトランポリンコードを実行するにはスタックとかヒープに実行属性が
付いてないとできないけど、今はセキュリティ上の問題になる。
でも古いコードだとそういうテクニックを使ってたりするのがあるから、互換性を
保つには闇雲に実行属性を落とせなかったり。
ユーザーの皆さん、古いアプリのサポートを打ち切るのは単に新しいバージョン
を買うように仕向けている訳じゃないんですよ、みたいなw
2013/01/05(土) 15:37:34.76
>>50
> LSIC-80の8085用オプション
8085って8080から拡張された入出力と割り込み機能をサポートする命令が2つ増えただけで
公式には8080と大して命令変わってないと思ったけど、LSI C-80って8085用の特別な機能
でもあんの?
> LSIC-80の8085用オプション
8085って8080から拡張された入出力と割り込み機能をサポートする命令が2つ増えただけで
公式には8080と大して命令変わってないと思ったけど、LSI C-80って8085用の特別な機能
でもあんの?
2013/01/06(日) 06:05:16.68
アセンブリフェーズがNR80だから、正確には8080のコード吐くんですね。
SIMとRIMはニーモニックが認められないので、DC 20h/30h で書きます。
_LCC80ファイルの中身見直したら、-i8080 -RN で8085固有の指定はありませんでした。
SIMとRIMはニーモニックが認められないので、DC 20h/30h で書きます。
_LCC80ファイルの中身見直したら、-i8080 -RN で8085固有の指定はありませんでした。
2013/01/06(日) 19:45:24.08
非公開命令でも吐いたら面白いのになあ。仕事では使えんけど。
http://home.comcast.net/~kvaughn65D/UnDocum_8085_Instructions.pdf
http://home.comcast.net/~kvaughn65D/UnDocum_8085_Instructions.pdf
2013/01/07(月) 06:41:05.63
私が自分用に作ったメモにもこのインストラクションは載ってました。
8080から改良するときに、ちょっと凝ったプログラミングをできるように
という思想が感じられますね。
このページ、活字が小さくて見づらい。だれかtextにしてくれないかな。
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のバグ疑ってもいいかな。
(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のバグ疑ってもいいかな。
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のバグ疑ってもいいかな。
うーんわからない。とある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のバグ疑ってもいいかな。
■ このスレッドは過去ログ倉庫に格納されています
