■ このスレッドは過去ログ倉庫に格納されています
8086 vs. Z80 vs. 6809 vs. 6502 その10
- 1 :ナイコンさん:2014/08/10(日) 15:25:26.31 .net
- 8086(8088)・Z80・6809・6502のうち、どのCPU(MPU)が優れているか議論するスレッドです。
CPU(MPU)アーキテクチャや周辺デバイス制御など
基本的に「石」に関連する議論なら、ほぼ何でもアリです。
■過去スレ
8086 vs. Z80 vs. 6809 vs. 6502 その9 (再び)
http://hello.2ch.net/test/read.cgi/i4004/1365951318/
8086 vs. Z80 vs. 6809 vs. 6502 その9 (短命)
http://ikura.2ch.net/test/read.cgi/i4004/1362833400/
8086 vs. Z80 vs. 6809 vs. 6502 その8
http://ikura.2ch.net/test/read.cgi/i4004/1333965297/
8086 vs. Z80 vs. 6809 vs. 6502 その7
http://ikura.2ch.net/test/read.cgi/i4004/1319314159/
8086 vs. Z80 vs. 6809 vs. 6502 その6
http://toki.2ch.net/test/read.cgi/i4004/1286766300/
8086 vs. Z80 vs. 6809 vs. 6502 その5
http://toki.2ch.net/test/read.cgi/i4004/1280380374/
8086 vs. Z80 vs. 6809 vs. 6502 その4
http://gimpo.2ch.net/test/read.cgi/i4004/1252639237/
8086 vs. Z80 vs. 6809 vs. 6502 その3
http://gimpo.2ch.net/test/read.cgi/i4004/1235851359/
8086 vs. Z80 vs. 6809 vs. 6502 その2
http://gimpo.2ch.net/test/read.cgi/i4004/1213527504/
8086 vs. Z80 vs. 6809 vs. 6502
http://bubble6.2ch.net/test/read.cgi/i4004/1165801265/
6809とZ80 part 2
http://bubble4.2ch.net/test/read.cgi/i4004/1093190685/
6809とZ80
http://bubble2.2ch.net/test/read.cgi/i4004/1008496410/
- 810 :ナイコンさん:2016/04/30(土) 18:40:09.93 .net
- >>806
> Z80でPCの値が取得したいならRSTやCALL使うのが手っ取り早いと思うんだけど、それじゃダメなのか?
手っ取り早いと言うよりそれしか方法がないだろ
どっちも固定番地を使うから完全リロケータブルにはならないって言うだけのこと
- 811 :ナイコンさん:2016/04/30(土) 18:40:12.22 .net
- > 出典 オーム社刊 パーソナルコンピュータのためのCP/M入門より
英語が読めないので一次資料が出せないというのは分かったw
- 812 :ナイコンさん:2016/04/30(土) 18:42:08.12 .net
- 6809や8086のソフトウェア割り込みを含む割り込みベクタは固定番地だが
Z80のシステムコールが固定番地でダメな理由がわからない。
- 813 :ナイコンさん:2016/04/30(土) 18:46:13.29 .net
- 根本的にできないと先に言っちゃったから、できることはすべてダメなんだろう。
レジスタ一つ使ったぐらいで「とても普通に書けないレベル」って言うぐらいだし。
- 814 :ナイコンさん:2016/04/30(土) 18:46:49.16 .net
- > まあNETで調べると使用可能としてるHPがあるから間違うのは仕方ないだろうけど
> リアルでCP/Mを使ったことが無いのが判ってしまうね。
リアルでCP/M使ったことない奴はマニュアルに予約とあるから使っちゃダメとか本気で信じてそうだなw
- 815 :ナイコンさん:2016/04/30(土) 18:49:27.72 .net
- "骨までしゃぶる"使い方とか想像の範囲外なんだろう
- 816 :ナイコンさん:2016/04/30(土) 19:09:11.17 .net
- >>810
> どっちも固定番地を使うから完全リロケータブルにはならないって言うだけのこと
システムが固定番地を占有するってだけで、その上で動作するプログラムは
完全リロケータブルでしょ。特定の領域がプログラムで使用されないということに
特別な意味はないよね。
- 817 :ナイコンさん:2016/04/30(土) 19:16:16.04 .net
- 完全リロケータブルという用語まで作り出したか。アロケートを管理する部分、システム共通ルーチンまでリロケータブルを要求してくるとは。
もうおまえの勝ちでいいよ。誰もおまえには勝てないよ。いくらでも後出しで仕様出してくるんだからw
- 818 :ナイコンさん:2016/04/30(土) 19:24:32.42 .net
- > どっちも固定番地を使うから完全リロケータブルにはならないって言うだけのこと
システム呼び出しを例えば0038Hにしてそれを呼び出す命令をRST命令に限定し、
M1サイクルでRST 38Hを判定してバンク切り替えをする機構を用意すれば
固定番地を使用してもプログラムは64kBどこにでも配置できるしお前の言う
"完全リロケータブル"になるよ。
- 819 :ナイコンさん:2016/04/30(土) 19:29:28.58 .net
- > どっちも固定番地を使うから完全リロケータブルにはならないって言うだけのこと
MS-DOSのEXEは0000:0000〜FFFF:FFFFすべてのアドレスにロードされる
わけではないので完全リロケータブルじゃない、くらいのバカ主張
- 820 :ナイコンさん:2016/04/30(土) 19:52:55.11 .net
- 670 : ナイコンさん2016/04/28(木) 13:54:32.53
>Z80だとリロケータブルなコードがものすごく書きにくい
普通に書けるだろ。この前提でなぜレスが進むんだ。馬鹿なのか。
- 821 :ナイコンさん:2016/04/30(土) 19:59:47.96 .net
- > サブルーチン番号を渡す必要あるのでレジスタがひとつつぶれる
> とても普通に書けるってレベルじゃないわな
- 822 :ナイコンさん:2016/04/30(土) 20:22:36.29 .net
- 「リロケータブルなコード」の中から「リロケータブルなコードの中にある」サブルーチンをCALLするってどうやるんだ?
自己書き換え?
それだとやっぱりPCの値が必要で、PCの値を得るには・・・
- 823 :ナイコンさん:2016/04/30(土) 20:23:42.15 .net
- PUSH IX
JP (HL)
- 824 :ナイコンさん:2016/04/30(土) 20:30:48.01 .net
- それで逝けるのか・・・
IXとHLの求め方が結局PCの値をとってきてって手間がかかるのか。
メンドイ・・
- 825 :ナイコンさん:2016/04/30(土) 20:34:30.95 .net
- 面倒ならマクロでも作っとけ。
- 826 :ナイコンさん:2016/04/30(土) 20:53:39.54 .net
- 面倒なら8086でも使っとけ。
- 827 :ナイコンさん:2016/04/30(土) 20:56:29.66 .net
- いちいちPCとってきて計算してとかかったりー。
ケアレスミスの類だが、127バイト以上の距離のジャンプとかもしちゃいそうだ。
8086のセグメントに慣れてると正直「やってられっかぁ!」って言うレベルにかったりー
- 828 :ナイコンさん:2016/04/30(土) 21:29:11.25 .net
- >いちいちPCとってきて計算してとかかったりー。
>ケアレスミスの類だが、127バイト以上の距離のジャンプとかもしちゃいそうだ。
マクロアセンブラ知らんのかな?
- 829 :ナイコンさん:2016/04/30(土) 21:31:49.77 .net
- >>816-817
言い訳してるところ申し訳ないけど、システムかなんか知らんけど固定番地のルーチンが必要なんだよね?
それさえ認めてくれればあとはどうでもいいよ
- 830 :ナイコンさん:2016/04/30(土) 21:38:35.37 .net
- >言い訳してるところ申し訳ないけど、システムかなんか知らんけど固定番地のルーチンが必要なんだよね?
番地固定のナントカなんてどんなシステムにもあると思うけどそれ言うと言い訳になるのかな? 理解できない話だな
- 831 :ナイコンさん:2016/04/30(土) 21:40:01.94 .net
- >>829
固定番地が完全に排除されたシステムってなんか例挙げてちょ 5個くらいでいいよ
- 832 :ナイコンさん:2016/04/30(土) 21:52:26.66 .net
- >>829
もちろん必要だよ。当然だね。どこにアロートされたか分からんものを呼びようがないからね。
アドレス管理してるところは固定じゃないと間接的に呼びようがない。当たり前だね。
- 833 :ナイコンさん:2016/04/30(土) 21:59:45.80 .net
- >>828
マクロアセンブラなら128バイト以上の距離の相対ジャンプが自動的に作られるのかい?
- 834 :ナイコンさん:2016/04/30(土) 22:05:46.53 .net
- 絶対ジャンプのアドレスを自己書換でもしとけよ。
8086の条件ジャンプも128バイト以上飛べないし。そのときはどうやってるのかと。
- 835 :ナイコンさん:2016/04/30(土) 22:17:15.21 .net
- >>833
>マクロアセンブラなら128バイト以上の距離の相対ジャンプが自動的に作られるのかい?
そういうのが可能なマクロアセンブラは普通に存在するけどそれが何?
- 836 :ナイコンさん:2016/04/30(土) 22:30:35.28 .net
- > マクロアセンブラなら128バイト以上の距離の相対ジャンプが自動的に作られるのかい?
ジャンプ命令の最適化なんて8bitの頃のマクロのないアセンブラでもあった程度の機能だけどなあ? この人馬鹿なのかな?
- 837 :ナイコンさん:2016/04/30(土) 23:39:03.17 .net
- >>811
判りやすい資料をと思ったが御希望のようなので。
http://www.cpm.z80.de/manuals/cpm22-m.pdf 6-26
>>814
リスクを犯してまで使う必要は無いから素直に安全なRST 08H〜28Hを使うな。
ちなみにCP/M互換と言ってるMSX-DOSではRST 30Hには機能が与えられているから
覚えておいた方が良いよ。
- 838 :ナイコンさん:2016/04/30(土) 23:49:57.13 .net
- > ちなみにCP/M互換と言ってるMSX-DOSではRST 30Hには機能が与えられているから
> 覚えておいた方が良いよ。
インタースロットコールはMSX-DOSの機能じゃないぞ
- 839 :ナイコンさん:2016/04/30(土) 23:51:59.83 .net
- >>837
> 素直に安全なRST 08H〜28Hを使うな。
君の大好きなMSX-DOSのデバッガってCP/MのRST 38Hの代わりにその辺使ってね?
- 840 :ナイコンさん:2016/05/01(日) 01:12:38.29 .net
- >>838
手元のMSX-DOSの資料では
000CH JP RDSLT
0014H JP WRSLT
001CH JP CALSLT
0024H JP ENASLT
0030H JP CALLF (RST 30H)
とインタースロットコールをサポートしているが。
反論をするならば調べてからした方が良いよ。
- 841 :ナイコンさん:2016/05/01(日) 01:15:01.90 .net
- BIOSの機能とDOSのそれの区別がつかない人ねw
- 842 :ナイコンさん:2016/05/01(日) 01:46:05.98 .net
- BIOSのエントリなだけだよなあ。
MSX datapack volume1「第3部 MSX-DOS」見てもファンクションコールや
FCBの解説はあるけどインタースロットコールについては「BIOSと同じ」
以上の説明がないし。
- 843 :ナイコンさん:2016/05/01(日) 01:54:17.71 .net
- > ちなみにCP/M互換と言ってるMSX-DOSではRST 30Hには機能が与えられているから
> 覚えておいた方が良いよ。
「MSX-DOSではRST 30Hを使用しているから」だったら良かったのにね。
- 844 :ナイコンさん:2016/05/01(日) 02:03:36.77 .net
- ではMSX-DOSのシステムスクラッチエリア(CP/Mでの0ページに相当)に誰がUserの為に
わざわざインタースロットコールのエントリーアドレスを設定してるんだろうね?
MSX-DOSがその機能を提供するために設定してるんじゃないのかね?
- 845 :ナイコンさん:2016/05/01(日) 02:24:41.95 .net
- MSX-DOSって既にPC98+MS-DOS全盛時代だろ。おまえら貧乏だったんだな。
- 846 :ナイコンさん:2016/05/01(日) 02:42:26.02 .net
- 98、X68、FM-TOWNS、DOS/V機、全部持っててもMSX持ってるだけで貧乏人のレッテル貼られる時代。
- 847 :ナイコンさん:2016/05/01(日) 03:13:23.74 .net
- > ではMSX-DOSのシステムスクラッチエリア(CP/Mでの0ページに相当)に誰がUserの為に
> わざわざインタースロットコールのエントリーアドレスを設定してるんだろうね?
え? Userの為??
MSX-DOS自身がBIOS使うからに決まってるじゃん。Datapackにも書いてあるぞ?
- 848 :ナイコンさん:2016/05/01(日) 06:49:51.45 .net
- >>831-832
ごめんねー
システムの話しはしてないからそう言う反応はいらないっす
まあシステムの話しにしないと悔しくて眠れない
って言うのはわかったよ w
- 849 :ナイコンさん:2016/05/01(日) 07:24:05.33 .net
- なにしろ、持ってたマシンが日立のS1だったもんで・・・
- 850 :ナイコンさん:2016/05/01(日) 08:15:22.61 .net
- Z80なら無理してリロケータブルなコードを書くより、
最初にセルフリロケートを実行する方が良いんじゃないかな、
リロケート情報の分コードサイズが増えたとしても、
非効率なリロケータブルコードよりは小さくなりそうな気がするんだが。
もちろんOSのローダがやればそういう問題も無く、もっと良いんだけど。
- 851 :ナイコンさん:2016/05/01(日) 10:07:25.38 .net
- 機械語なんて単純なコードは勝手にリロケータブルになってんだろ。
- 852 :ナイコンさん:2016/05/01(日) 11:34:48.78 .net
- DIGITAL RESEARCH TM CP/M Operating System Manual
http://www.cpm.z80.de/manuals/cpm22-m.pdf
■317Page
PRL:
Page relocatable program. A page relocatable program is stored on disk with a PRL
filetype. Page relocatable programs are easily relocated to any page boundary and
thus are suitable for execution in a nonbanked MP/M system.
MP/Mは8ビットOSね。DESPOOLみたいなチャイルド系とかCP/M地震も再配置可能だったような。
- 853 :ナイコンさん:2016/05/01(日) 12:09:42.60 .net
- >>850
実行ファイルに、リローケション・テーブル付けてそれを元に再配置する
実際、それが歴史の答えだよ
Windowsの.exe / .dll 等もそういう仕組みになってる
セルフじゃなくて、リロケーション自体ははOSがやってくれるけど
ファイルにはリローケション・テーブルがくっ付いている。
Z80でPCさせ取得できれば、それ以外は目糞鼻糞の議論
結局、誰も提示出来ないようだな
- 854 :ナイコンさん:2016/05/01(日) 13:29:45.68 .net
- >>850
どんだけ周回遅れの話してんの?
- 855 :ナイコンさん:2016/05/01(日) 14:05:27.33 .net
- >>854
先頭横入り、ズルズル
- 856 :ナイコンさん:2016/05/01(日) 14:36:08.17 .net
- >>652
>それなら実行ファイルにコード本体とは別にリロケート情報を持って置いて、
>それを使ってローダーが再配置すれば解決する話だけどな。
- 857 :ナイコンさん:2016/05/01(日) 15:05:17.94 ID:PD909S4bN
- もう既出かもしれないが
ttps://groups.google.com/forum/#!msg/comp.os.cpm/hCIqluCYRGg/tlTDBE3QP50J
ttps://groups.google.com/forum/#!topic/comp.os.cpm/9BVctCgStB8
> LD HL,0E9E1h ;E1h=POP HL, E9h=JP (HL)
> LD (0008h),HL
> RST 08h
>REL0 EQU $
>
>Which would put the value of the PC into HL. The code could now
>be based relative to location REL0, for which the address would be
>in HL.
これ短くて好き。
- 858 :ナイコンさん:2016/05/01(日) 14:53:32.59 .net
- >>853
> Z80でPCさせ取得できれば、それ以外は目糞鼻糞の議論
Z80のIX、IYレジスタを使ってベースアドレスを渡せば、
>>707 必死こいてPC取得とかアホの極みだろw なんだそのコードw
とまで言えるくらい優れた方法があって、それを使えば
> 実行ファイルに、リローケション・テーブル付けてそれを元に再配置する 実際、それが歴史の答えだよ
そんなことをする必用も無くなる、
らしいんだよね、それが本当ならちょっと凄くね?
- 859 :ナイコンさん:2016/05/01(日) 14:56:28.83 .net
- > > Z80でPCさせ取得できれば、それ以外は目糞鼻糞の議論
>
> Z80のIX、IYレジスタを使ってベースアドレスを渡せば、
> >>707 必死こいてPC取得とかアホの極みだろw なんだそのコードw
> とまで言えるくらい優れた方法があって、それを使えば
>
> > 実行ファイルに、リローケション・テーブル付けてそれを元に再配置する 実際、それが歴史の答えだよ
> そんなことをする必用も無くなる、
>
> らしいんだよね、それが本当ならちょっと凄くね?
>>858がキチガイすぎて何言いたいんだかわからん
- 860 :ナイコンさん:2016/05/01(日) 15:01:38.79 .net
- 単にコードサイズ、速度の問題。再配置計算、ベースアドレス計算で比較するだけ。そんなの仕様による。
ベースアドレス渡しは根本的にできない連呼してた無能SEみたいに次々と後出し仕様ださないかぎり、
仕様が出ればがどっちが効率か判断できる。仕様、要件次第。
- 861 :ナイコンさん:2016/05/01(日) 15:15:22.27 .net
- >>859
ごめん、引用が多すぎて読みにくかったな、まとめると、
・渡されたベースアドレスを使ったリロケータブルコードは、自前でPCを取得して行うリロケータブルコードよりもかなり優れている
その手法を使えば
・リローケション・テーブルによる再配置をしなくても十分に効率的なコードを記述できる
ということみたいよ。
- 862 :ナイコンさん:2016/05/01(日) 15:23:45.60 .net
- >>861
> 渡されたベースアドレスを使ったリロケータブルコードは、自前でPCを取得して行うリロケータブルコードよりもかなり優れている
えっ誰かそんな馬鹿なこと言ってる? >>858にもそんなこと書かれてないよな?
> その手法を使えば
> ・リローケション・テーブルによる再配置をしなくても十分に効率的なコードを記述できる
えっ誰かそんな馬鹿なこと言ってる? >>858にもそんなこと書かれてないよな?(2回目)
結論: >>861は馬鹿
- 863 :ナイコンさん:2016/05/01(日) 15:39:05.96 .net
- >>860
ベースアドレス渡しは根本的に出来ない、
とは言われてなくて、
ベースアドレス渡しは根本的に「意味が無い」、なぜならPC取得とコードがほとんど変わらないから
と言われてる。
>>718 >>772 >>773 >>779 とか。
そもそもレジスタに入れれば良いだけなんだから「渡せない」とか意味不明。
仮にベースアドレスが渡されなくても、プログラムの先頭でPCを取得して、
そこから自前でベースアドレスを求めてレジスタに入れればいいだけなので渡す意味も特に無い。
さらに必用な都度PCを取得すればいいだけなので、ベースアドレスを保持して置く意味も無い。
- 864 :ナイコンさん:2016/05/01(日) 15:48:43.59 .net
- > さらに必用な都度PCを取得すればいいだけなので、ベースアドレスを保持して置く意味も無い。
レジスタに余裕があり、ベースアドレスからの相対アドレスを計算する
コストをある程度小さくしたいのであればベースアドレスを保持して置く
ことに意味はあるぞ。
- 865 :ナイコンさん:2016/05/01(日) 15:49:25.05 .net
- >>862
普通は馬鹿なことだと思うよね。
それが居るんだよ、ベースアドレス君とかベースアドレス爺とか呼ばれてる奴。
- 866 :ナイコンさん:2016/05/01(日) 15:51:21.98 .net
- >>865 こいつです。
- 867 :ナイコンさん:2016/05/01(日) 15:52:09.94 .net
- >>865
まだいたのか。恥ずかしくなって逃げたと思ってた。
- 868 :ナイコンさん:2016/05/01(日) 16:03:38.44 ID:PD909S4bN
- ld hl,pcか
add hl,pc
あたりを用意しておいてくれればよかったのにね。
- 869 :ナイコンさん:2016/05/01(日) 16:23:12.14 .net
- >>864
あらかじめ相対値としてPCからの相対値を持って置けば、
計算コストの面でもベースアドレスは必要ないと思うけど。
- 870 :ナイコンさん:2016/05/01(日) 16:24:56.15 .net
- >>732 のような恥を晒してものうのうと出来る、それが団塊というものです。
- 871 :ナイコンさん:2016/05/01(日) 16:43:46.74 .net
- >>869
システムコール等でPC値を取得するよりはレジスタに保存してある値を
参照する方がコストは低かろう。
- 872 :ナイコンさん:2016/05/01(日) 17:03:37.78 .net
- >>871
(11) RST 38H
0038:
(10) POP HL
(4) JP (HL)
計 (25)クロック
と
(15) PUSH IX
(10) POP HL
計 (25)クロック
だと速度に差は無いな、バイト数も前者の方が有利だね。
- 873 :ナイコンさん:2016/05/01(日) 17:10:57.26 .net
- (8) LD D, IXH
(8) LD E, IXL
計 (16)クロック
ならこっちの方が速いかな。バイト数は負けているが。
- 874 :ナイコンさん:2016/05/01(日) 17:16:57.37 .net
- (10) LD SP, IX
計 (10)クロック
一番速いのがこれかな。SPを使うのが玉に瑕だが。
- 875 :ナイコンさん:2016/05/01(日) 17:22:14.20 .net
- > (15) PUSH IX
> (10) POP HL
> 計 (25)クロック
> だと速度に差は無いな、
HL以外のレジスタにも対応できるという点では利点はあるね。
- 876 :ナイコンさん:2016/05/01(日) 17:30:23.54 .net
- >>873
それは未定義命令かな?
>>874
SPを使うのがありなら、SPは常にベースアドレス保持用に予約すれば
LD HL,MSG
ADD HL,SP
だけで実効アドレスを計算できるねw
- 877 :ナイコンさん:2016/05/01(日) 17:33:44.89 .net
- IX(かIY)をプログラムの先頭番地の格納に専用すると、プログラムの先頭付近を
データ領域に使用してそれへのアクセスを比較的低コストで行える、というのは
考えられるな。
- 878 :ナイコンさん:2016/05/01(日) 17:48:29.92 .net
- なにまだリロケータブルやってんの?
「リロケータブルなコードは書ける」でFAだろ。
モニタっつかOSの仕様までいちゃもんつけてまで「できねー」「かけねー」やってんの?
ところでさ、+127バイト以上の距離の「相対ジャンプ」ってどう実現するんだ?
マクロアセンブラとやらが展開した後のコードがちゃんと「リロケータブル」になってんの?
CP/MについてたASMしか使ったこと無いから想像付かん。
- 879 :ナイコンさん:2016/05/01(日) 17:51:12.41 .net
- こういうことだよね
JP (IX) IX:BASE_ADR
・・・・
DS 128
BASE_ADR:
JR ENTRY
DS 125
ENTRY:
ローカル変数としてアリっぽいけど、LD r,(IX+d) とか使ったら途端に
非難轟々になりそう。
- 880 :ナイコンさん:2016/05/01(日) 18:08:18.52 .net
- リロケータブルコードの場合データアクセスも難問なんだよな、
6809ならゼロページを普通に使えるが、
Z80だと(IX+n)(Z80最遅命令かと思われる)を使わざるを得ないんじゃないかな…
- 881 :ナイコンさん:2016/05/01(日) 18:17:42.95 .net
- >>878
多段ジャンプ。8086でも同じ。
- 882 :ナイコンさん:2016/05/01(日) 18:22:42.85 .net
- >>878
大抵はリロケータブルロングジャンプになるわけではなく、
JR Z,LONGJMP
が
JR NZ,SKIP
JP LONGJMP
SKIP:
になるだけじゃないかと、それでも無いよりは大分使いやすいと思うけどw
リロケータブルロングジャンプ自体はPC取得して〜で可能だろうから、
それをサポートした特殊なアセンブラが実在しなかったとも言い切れないが。
- 883 :ナイコンさん:2016/05/01(日) 18:40:19.71 .net
- ベースアドレスは渡せない言ってた糞ガキがまた暴れてるのか。
- 884 :ナイコンさん:2016/05/01(日) 18:46:15.17 .net
- 最後にはベースアドレス+相対位置の計算が必要で面倒で使えないという理由だったみたい。
- 885 :ナイコンさん:2016/05/01(日) 18:55:18.20 .net
- え? レジスタ一個消費するからダメって言ってたよ。
- 886 :ナイコンさん:2016/05/01(日) 19:02:07.24 .net
- 相対ロングジャンプ(全レジスタ、フラグを保存)
PUSH HL
RST 38H ;HL←PC
L1:
PUSH AF
PUSH DE
LD DE,LONGJMP - L1
ADD HL,DE
POP DE
POP AF
EX (SP),HL
RET
で良いかな?
- 887 :ナイコンさん:2016/05/01(日) 19:52:21.49 .net
- 相対ロングコール(全レジスタ、フラグを保存)
>>731 への答え版
Entry:
...
PUSH HL
PUSH IX
POP HL ;HL←ベースアドレス
PUSH AF
PUSH DE
LD DE,RETADDR - Entry
ADD HL,DE
POP DE
POP AF
EX (SP),HL ;戻りアドレスをスタックへ積む(同時にHLを復帰)
PUSH HL
PUSH IX
POP HL ;HL←ベースアドレス
PUSH AF
PUSH DE
LD DE,L1 - Entry
ADD HL,DE
POP DE
POP AF
EX (SP),HL ;呼び出しアドレスをスタックへ積む(同時にHLを復帰)
RET ;呼び出しアドレスへジャンプ
RETADDR:
...
L1:
...
ret
- 888 :ナイコンさん:2016/05/01(日) 19:54:08.16 .net
- >>880
普通にスタックフレームを使ってもいいし、いかようにでも。
>>879
125じゃなくて126までいけるか
- 889 :ナイコンさん:2016/05/01(日) 20:20:32.89 .net
- 簡単に書けるって言っちゃった割には出てきたコードが >>732 w
もうできるできないにするしかなくて必死になってるだけだろ
> マクロアセンブラとやらが展開した後のコードがちゃんと「リロケータブル」になってんの?
これは俺も興味あるわ
そんな賢いアセンブラあったっけ?
- 890 :ナイコンさん:2016/05/01(日) 20:21:48.55 .net
- >>889
どした? 急に思い出したように興奮してからに。
- 891 :ナイコンさん:2016/05/01(日) 20:39:23.86 .net
- http://hanabi.2ch.net/test/read.cgi/i4004/1458450955/467
> キミは歴史を勉強する気があるのかないのかどっちだ? ないなら出て行け。
- 892 :ナイコンさん:2016/05/01(日) 20:42:43.99 .net
- 他スレでも馬鹿にされたのか。落ち着けよ。
- 893 :ナイコンさん:2016/05/01(日) 20:58:23.45 .net
- >>878
cp/mのasm.comはアブソリュートアセンブラ。m$のMacro80とかはアセンブラとリンカーに
分かれている二段構成。Intel謹製のアセンブラはM$のリンカーの先にロケーターという
絶対番地コードに落とすユーティリティがあって、いわゆるHEXファイルを生成しロムライター
にダウンロードしてロム焼きする。いずれにせよ、アセンブラが吐き出すコードは中間コード。
ラベルに対応するアドレスはリンカ或いはロケーターを通すまで決定されない。それゆえ
リ・ロケータブルだと言われてた。
- 894 :ナイコンさん:2016/05/01(日) 22:15:00.61 .net
- 出来ることを証明するのは簡単だけどできないことを証明するのは容易ではないから
できると主張してる人が先に証拠を出すべき
- 895 :ナイコンさん:2016/05/01(日) 22:33:58.58 .net
- ここにもレス乞食が
- 896 :ナイコンさん:2016/05/02(月) 11:41:01.63 .net
- > できると主張してる人が先に証拠を出すべき
これがリロケータブルのコードが書けるかどうかって言うなら「書ける」とさんざんこのスレにも出てるだろ。
実務でZ80使ったこと無い俺でも判ることが何で理解できないのかねぇ・・・
しかたない、Z80未経験の俺が纏めてやるよ。(経験者にお願い:間違ってたり足りないところあったら補足してくれ)。
ただし、リロケータブルなコードが「OS等の管理プログラムから呼出しされ機能する、一連りのコードとそのコードのみが参照、更新するデータからなるユーザープログラム」と言う解釈とする。
コレには当然「OS下で管理され、ロードと起動はリロケータブルなコードを書くプログラマの責任範疇外である」「リロケータブルコードが実行される環境は既定のものが存在する(プログラマが干渉できないという意味で)」も含まれる。
以後の条件後出しは許さん。
Z80で「位置に依存する命令」ってのは、ちょと調べれば判るが6種類ある(レジスタrは8ビット16ビットは「レジスタには変わりないから」と1種類とカウント、JPもJP ccの仲間だから、とすれば5種類)。
下のim16は「16ビット即値」ね。
CALL im16
JP im16
JP cc,im16
LD (im16),r
LD r,(im16)
RST x
このたった6種類の命令が使われてなければ、それは「完全にリロケータブルなコード」だ、メモリ上のどこにおいてもOK。
どこに、といっても固有アドレスを使うRST命令や、(「OSはこれ」と特に言われてないが)OSの縛りもあるから実環境にあわせた制限は当然出てくるが。
リロケータブルコードの中で、PCの位置が欲しいならOSにCALLやRST使ってPCを返すサービスファンクションとかシステムコールを用意すればいいし、呼び出す側で16ビットレジスタにアドレスに入れて呼び出してやってもいい。
OS呼出しだめ、アドレス渡しだめ、というなら、それは「絵の具も筆も使わずにキャンパスに絵を描け」と言ってるに等しい、ただの言いがかりだ。
- 897 :ナイコンさん:2016/05/02(月) 12:19:33.26 .net
- つまりできないってことでいいのかな?
- 898 :ナイコンさん:2016/05/02(月) 12:56:54.56 .net
- 「完全リロケータブル」の定義がないから言い逃れはいくらでもできるのです(キリっ!
- 899 :ナイコンさん:2016/05/02(月) 13:16:12.62 .net
- >>896
LD A,(im16)
は
PUSH HL
LD HL,im16
LD A,(HL)
POP HL
と、その6種類を使わないコードに置換できるけど、
そうしたところでリロケータブルにはならないよ。
- 900 :892:2016/05/02(月) 13:24:55.18 .net
- >>899
前後の流れでの位置依存までは頭になかった。
LD HL,im16
の時点でim16がPC相対なりOSから渡されたベースアドレスからの相対なら、
LD A,(HL)
ではリロケータブルと言う発想しかなかったんで。
> 種類の命令が使われてなければ、それは「完全にリロケータブルなコード」だ
が間違っていると言うか、不十分だったかぁ。
うぅむ、「リロケータブルなコード」にするためには除外しなきゃいけないものが他にもありそうだなぁ。
- 901 :ナイコンさん:2016/05/02(月) 13:55:36.19 .net
- >>896
> このたった6種類の命令が使われてなければ、それは「完全にリロケータブルなコード」だ、メモリ上のどこにおいてもOK。
なるほど
ret
は確かにリロケータブルだな
お前賢いな w
- 902 :ナイコンさん:2016/05/02(月) 14:00:15.37 .net
- >>896
要するに
> OS呼出しだめ、アドレス渡しだめ
なら、書けないんだろ
- 903 :ナイコンさん:2016/05/02(月) 14:11:10.93 .net
- > 要するに
>> OS呼出しだめ、アドレス渡しだめ
>なら、書けないんだろ
そこまで言ったら、世の中全て、どんなCPUであろうとリロケータブルのコードが書けないことになる。
「リロケータブルではない」「リロケータブルである」の条件決めないままできないできない言ってるのは、ただのいちゃもん。
チンピラの所業だね。
そもそも「う゛〜!ボクチンの意見否定する奴ゆ゛る゛せ゛ね゛ぇ゛!」って後だしばっかしてる低脳だけだし、できないとかほざいてるの。
- 904 :ナイコンさん:2016/05/02(月) 14:38:21.23 .net
- 効率度外視すれば
1. 実行中のPCの値を取得
2. その値に対してオフセット計算する
3. 計算されたアドレスのメモリーに対して読み書きする
4. 計算されたアドレスにジャンプする(PCに代入する)
の機能があればリロケータブルなコードは書けるだろ
Z80 は
> OS呼出しだめ、アドレス渡しだめ
なら 1. を実現できないってだけのこと
- 905 :ナイコンさん:2016/05/02(月) 15:06:08.93 .net
- >効率度外視すれば
これはコーディング時に大層な負担が掛かるのでは。
そんな努力を払ってまでリロケータブルなコードを
書かなきゃイケナイのか。
- 906 :ナイコンさん:2016/05/02(月) 15:11:59.52 .net
- >>904-905は馬鹿
- 907 :ナイコンさん:2016/05/02(月) 15:12:30.99 .net
- 別に書かなくていいよ。世の中はにレジスタ一つ使っただけで絶望してもう書けないなんて言う人もいるぐらいだし。
キミは無理しなくていい。
- 908 :ナイコンさん:2016/05/02(月) 15:19:53.56 .net
- >以後の条件後出しは許さん。
Z80基準を8080基準にしてちょ。
- 909 :ナイコンさん:2016/05/02(月) 15:27:58.82 .net
- >>905
それは書ける書けないとは別の話
>>906
馬鹿としか書けないなら黙ってろ
- 910 :ナイコンさん:2016/05/02(月) 16:37:50.20 .net
- >>909は阿呆
総レス数 1007
237 KB
新着レスの表示
掲示板に戻る
全部
前100
次100
最新50
read.cgi ver.24052200