M.Kamada 様こんにちは。
先日過去のデータを漁っていたときに見つけたのですが
X68OOO Noo!!
で始まる形式のファイルのデコーダってご存知無いでしょうか?
MZL さん、こんにちは。
> X68OOO Noo!!
> で始まる形式のファイルのデコーダってご存知無いでしょうか?
わかりませんです。わかる方はフォローをお願いします。
拡張子や中身の種類(画像とか)がわかるともう少し探しやすいと思います。
>>1
MZL です。
> 拡張子や中身の種類(画像とか)がわかるともう少し探しやすいと思います。
どうやらテキストファイルを圧縮または暗号化したもののようで
中身はちらほらと元のテキストと思しきパーツがちりばめられています。
ちなみに拡張子は .doc でした (意味無いじゃん)。
日記のほうで『プロテクト技術解剖学』をピックアップいただきありがとうございます.
最近盛り上がっているいる素因数分解は公開鍵暗号のキーテクノロジ(?)でもあるので、ほほほぉ、などと眺めております.それにしても、アルゴリズムもさることながら、最近はパソコンレベルでもここまで演算ができるのかと…。などと感心してしまいます.
(昇)さん、こんにちは。
> 日記のほうで『プロテクト技術解剖学』をピックアップいただきありがとうございます.
どういたしまして。
実はまだ現物を見ていないのですが、
手に入ったらまた何か書きますね。
> 最近盛り上がっているいる素因数分解は公開鍵暗号のキーテクノロジ(?)でもあるので、ほほほぉ、などと眺めております.
あ、私のは単なる趣味ですので。
> それにしても、アルゴリズムもさることながら、最近はパソコンレベルでもここまで演算ができるのかと…。などと感心してしまいます.
パソコンレベルでも、というよりも、この手の演算は
パソコンでやるほうが主流になっているように思います。
CPU を遊ばせておくのももったいないですし。
こんばんは。
(64*10^n+53)/9 型の素数は見つからないのに、(16*10^n-61)/9 型の素数は沢山 (?) ありますね。
ちょっと調べたら、n=1, 6, 48, 102, 192, 366, 1002 の時に多分素数になるようです。
それでは失礼します。
哲さん、こんにちは。
> (64*10^n+53)/9 型の素数は見つからないのに、(16*10^n-61)/9 型の素数は沢山 (?) ありますね。
理由がこれだけかどうかわかりませんが、
代数的に考えると個々の素因数の出現頻度は限られており、
(16*10^n-61)/9 のほうが小さい素因数が同じ数に集中して
現れるので素数が多くなるのではないかと思います。
こんばんは。
系列の表が公開されたということで、早速その中から 1 つ拾って分解しました。
(64*10^100+53)/9/83/239 =
67838213495270775000029029252126840673<38> *
52842951754093581599808028211530416669511326155578778996017<59>
それでは失礼します。
哲さん、こんばんは。
> 系列の表が公開されたということで、早速その中から 1 つ拾って分解しました。
すばやひ。(^^;
> (64*10^100+53)/9/83/239 =
> 67838213495270775000029029252126840673<38> *
> 52842951754093581599808028211530416669511326155578778996017<59>
あらら、97 桁もあったのにあっさりと…
ありがとうございます。検証の上、リストを更新しました。
>>1
こんにちは。
今回は 2 つの系列から 1 つずつ拾って分解しました。
(16*10^84-61)/9 =
756600723901820421121949766505399991678987<42> *
2349690823198933964135445765680242530617633<43>
(64*10^110+53)/9/3 =
2893127983106535322296101126866226743812761611968656413<55> *
81931058156132903212222953108519541156199436710593940603<56>
それでは失礼します。
>>2
哲さん、こんにちは。
> 今回は 2 つの系列から 1 つずつ拾って分解しました。
ありがとうございます。
ますますデッカイのが出てますねー。(^^;
>>3
こんばんは。
今回は素因数分解しようとして見事に失敗したものを含みます。
(64*10^98+53)/9/3/317263 =
2710065611669718533001316546342690787137<40> *
275687438249130740149164966821108918202785098309543969<54>
(64*10^103+53)/9/7/11/3467/1792366084603<13> =
148616209456908826177190395908183710155106110849893738382084866292756631938052581292921<87>
下の p87 は表では合成数ということになっていますが、mpqs4linux が最大公約数を求めるフェーズで何故かコケるので APRT-CLE で判定したら素数でした。
さらに (64*10^n+53)/9 の系列で n=105, 106, 109, 132, 134, 142, 167, 199 で合成数となっている数も APRT-CLE で素数と判定されました。乞確認。
それでは失礼します。
>>4
哲さん、こんばんは。
> 下の p87 は表では合成数ということになっていますが、mpqs4linux が最大公約数を求めるフェーズで何故かコケるので APRT-CLE で判定したら素数でした。
> さらに (64*10^n+53)/9 の系列で n=105, 106, 109, 132, 134, 142, 167, 199 で合成数となっている数も APRT-CLE で素数と判定されました。乞確認。
あらら、こんなにたくさん。ありがとうございます。
最初に小さい素因数を排除した段階で残りを一旦合成数と仮定して
作業を始めたので、その名残だと思います。
リストは手作業で更新しているので他にも間違いがあるかも知れません。
>>5
こんにちは
こちらで最近素因数分解が取り上げられているのを見て、
ecm-gmp をインストールしてみましたところ、
(64*10^117+53)/9 mod 89875493496406619338541 == 0 なる
23 桁の素因数が見つかりました。
>>6
こんばんは。
ついでに下記の結果も加えておいてください。
[171]
(16*10^91-61)/9/11/23/23 =
12876290977178756970996047<26> *
237267543416547860781980234475213396141517058226065266888729247<63>
(16*10^100-61)/9/13 =
55286350879878282337818061874857<32> *
24735243794487494621487788772935861198378042673830517244659559794431<68>
(16*10^129-61)/9/7/11/11/439/9587423/11862063049<11> =
162703661782563931426151<24> *
258386666102291034681870637469344303139728717957217645153666455373251731432264075331<84>
[717]
(64*10^104+53)/9/3/3/3025111 =
4646127361478373336901817104339<31> *
5621633514033298730270232373228771572697404804559738813992009234097<67>
(64*10^135+53)/9/11/239 =
583354276368348239613413747<27> *
4636758668504360385753236819635365522974407369310460020199753070369153703602153265078023555368000115985459<106>
それでは失礼します。
>>6
Y. Hanatani さん、こんにちは。
> こちらで最近素因数分解が取り上げられているのを見て、
> ecm-gmp をインストールしてみましたところ、
> (64*10^117+53)/9 mod 89875493496406619338541 == 0 なる
> 23 桁の素因数が見つかりました。
ありがとうございます。
小さい素因数が残り少なくなるにつれて、
GMP-ECM でも素因数がなかなか見つからなくなってきました。
未知の素因数を最初に発見した人はちょこっとラッキー。(^^;
>>7
哲さん、こんばんは。
> ついでに下記の結果も加えておいてください。
いつもありがとうございます。
>>9
(16*10^207-61)/9 の素因数のひとつ
9048304351615529959999 (22digits) を見つけました。
残りの因子は合成数のようです。
20 桁代はもう残ってないのではないかと思っていましたが…
夜な夜な ecm を回していた甲斐がありました。
>>10
Y. Hanatani さん、こんにちは。
> (16*10^207-61)/9 の素因数のひとつ
> 9048304351615529959999 (22digits) を見つけました。
ありがとうございます。
> 残りの因子は合成数のようです。
> 20 桁代はもう残ってないのではないかと思っていましたが…
> 夜な夜な ecm を回していた甲斐がありました。
20 桁台の前半はそろそろなくなってもいい頃だと思うのですが、
ECM は気まぐれなので、またひょっこり出てくるかも知れませんね。
>>11
幾つか素因数が見つかったので報告します。
(16*10^139-61)/9 = 11 * 601 * 5653 * 11721571 * 173908413895577<15> * 41905101224716768849<20> *
7123909525202177297570459<25> * <66>
(64*10^130+53)/9 = 11 * 67 * 4813 * 1050713 * 3036571 * 5699496121811<13> * 720671207366725631<18> *
829988483908342604237133093299<30> * <79>
(16*10^144-61)/9 = 189467 * 1083923 * 121013687 * 754174919 * 3979082437789453<16> *
106945245805206203945351953<27> * <75>
(64*10^227+53)/9 = 3 * 11 * 2692643 * 32148341487588916037785781<26> *
181503117655874306714926957<27> * <169>
(16*10^238-61)/9 = 13 * 127 * 5657 *
46430180224264648553519<23> * <209>
(16*10^250-61)/9 = 13 * 1117 * 3001 * 68960274559011859<17> *
105187359738922024391561<24> * <203>
(16*10^161-61)/9 = 3 * 11 * 223 * 293 * 241667 * 347838697 * 463516751 * 9405191432179<13> *
118572847683009651860426161<27> * <94>
>>12
こんばんは。分解結果を 1 つ。
by mpqs4linux 0.61
(64*10^118+53)/9/17/71/179/877/15546722392914624145433<23> =
36804824607493699624427683931388558688781429<44>
655894476999064437055701414186258862934394001<45>
ご存知とは思いますが、このタイプの数には特殊数体篩法 (SNFS) が適用できます。
ECM で新たな素因数が見つからなくて残りの合成数が大きい場合に有効でしょう。
実装の在処にはこのサイトからリンクが張られているのであえて書きませんが。
おそらく公開されていて素人にも簡単手軽に使える世界最速の実装でしょう。
使える多項式が 5 次式のみという縛りがありますが、この 2 つの系列の数なら多項式の係数が 3e3 を超えることはないはずです。
ということで、n<=130 程度の完全分解は現実的です。頑張ってください。
それでは失礼します。
>>12
Y. Hanatani さん、こんばんは。
> 幾つか素因数が見つかったので報告します。
うわ。これはまたゾロゾロと…ありがとうございます。
>>13
数体ふるい法はまだ理解できていないところがあって、
代数の本なんかを引っ張りださないと、という感じです。
PowerPC や SPARC 上で動く二次ふるい法や数体ふるい法のプログラムがあればよいのですが、
今のところそれらの存在を知らないので楕円曲線法のみで分解しています。
あまり掲示板に素因数ばかり載せるのもどうかと思いますので、
今後は大きなの (30 桁以上) が見つかったときだけ、書き込みます。
(16*10^146-61)/9 = 3 * 3 * 19 * 146890314509<12> * 1275008940157<13> * 13203685413461<14> * 1535375128727451317<19> * 1436014684780513730348145587<28> * <63>
(16*10^151-61)/9 = 11 * 11 * 29 * 29 * 1639052759<10> * 127259957021<12> * 4691097589091<13> * 8845358547510784479949<22> * [<92>]
(16*10^238-61)/9 = 13 * 127 * 5657 * 46430180224264648553519<23> * 254357642020012614687158935739<30> * [<180>]
(64*10^148+53)/9 = 19 * 29 * 739 * 1396523 * 1479913 * 51349048391867140770561613<26> * [<106>]
(64*10^157+53)/9 = 7 * 11 * 31 * 2309 * 5755989064165303169309<22> * 3983829526435379614386593<25> * 469074176045951899217<21> * <85>
(64*10^181+53)/9 = 7 * 7 * 11 * 11 * 1459 * 8293 * 19157 * 21870259553<11> * 57593571329269832561664997067<29> * <128>
(64*10^192+53)/9 = 13 * 88883 * 5941609 * 1191008658284365721903<22> * <159>
(64*10^200+53)/9 = 3 * 197 * 409 * 268480211 *571928806571317915240679<24> * [<164>]
(64*10^234+53)/9 = 13 * 1181 * 7451 * 1471598307214747<16> * 3052073285905649<16> * 172548225862787861<18> * 2699321912890730492306803<25> * [<155>]
>>15
Y.Hanatani さん、こんにちは。
> 数体ふるい法はまだ理解できていないところがあって、
> 代数の本なんかを引っ張りださないと、という感じです。
あぅぅ、私は大学のノートを引っ張り出しても未だに…。
円周率の計算もそうなのですが、自分が理解できていない
アルゴリズムで計算するよりもちゃんと理解してから使った
ほうが結果が出たときの感動が大きいと思うので、なんとか
理解したいのですが…。
> あまり掲示板に素因数ばかり載せるのもどうかと思いますので、
> 今後は大きなの (30 桁以上) が見つかったときだけ、書き込みます。
お気遣いありがとうございます。
分解結果のご報告はメールでも OK です。
最終的にリストに反映されることに変わりありませんので。
>>16
こんにちは。1 つ。
(16*10^103-61)/9/11/337/244021 =
591000852246729578096482950405701019799<39> *
33253669605348907854656824307226049743772768002763036507<56>
それでは失礼します。
>>17
哲さん、こんにちは。
> (16*10^103-61)/9/11/337/244021 =
> 591000852246729578096482950405701019799<39> *
> 33253669605348907854656824307226049743772768002763036507<56>
ありがとうございます。
現在、(16*10^1002-61)/9 の素数判定を実行中。
>>18
こんにちは。1 つ。
(64*10^119+53)/9/3/11/89/1601/30859/348406813/1681642841<10> =
2376617737536393653702961258394523<34> *
3519497020374748402221295454823938291008096271084547330361<58>
1003 桁の素数判定が APRTCLE で 7 日ですか。意外と速いという印象です。
それでは失礼します。
>>19
哲さん、こんにちは。
> 1 つ。
いつもありがとうございます。
> 1003 桁の素数判定が APRTCLE で 7 日ですか。意外と速いという印象です。
そうですね。1000 桁を越える数を試したのは初めてだったので
何日かかるか予測せずに始めてしまったのですが、このくらいの
期間で終わってよかったです。
1 日目の夕方始めて 7 日目の朝終わっていたので実質 6 日弱でした。
単独で走らせればもう少し早く終わったと思います。
はじめまして。
元電くら読者なので、なんだか懐かしい気がします ^^
X68 も先日 EXPERT の電源が故障し何とか直しましたが、もう 10 年
ものなんですね・・・SASI の HDD に不良フラスタ1つないのは
奇跡なのかも。
ところで X68-WIN 間のファイルやり取りですが、ロングファイル名も
小文字も大丈夫ですが、ファイル名の 8Byte 目に全角文字の先頭 Byte
がくると Win では全く認識できないようです。このおかげで MO の
データ移行が面倒でなりません ^^;
Furutaka さん、こんにちは。
> X68 も先日 EXPERT の電源が故障し何とか直しましたが、もう 10 年
> ものなんですね・・・SASI の HDD に不良クラスタ1つないのは
> 奇跡なのかも。
奇跡かも。
SASI のハードディスクが動いているというだけでも
驚く人は多いと思います。
> ところで X68-WIN 間のファイルやり取りですが、ロングファイル名も
> 小文字も大丈夫ですが、ファイル名の 8Byte 目に全角文字の先頭 Byte
> がくると Win では全く認識できないようです。このおかげで MO の
> データ移行が面倒でなりません ^^;
その手の落とし穴ってありますよね。
リネームするにしてもアーカイブしなおすにしても結局
X68k 側で手を加えなければならないので面倒だと思います。
とある人の名前を検索にかけたところこのページにたどり着きました。これから宜しくお願いします。
2002 年 10 月 22 日の虫食い算の解答プログラムを書いてみましたが、PentiumIII の 866MHz で 5 秒かかるので落第です。しかし折角なので公開します。
http://hyper6.amuser-net.ne.jp/~hamayan/20021022.ub
積の候補 90 個についてそれぞれ素因数分解を施す手法です。解答は 81766*78517(=6420021022) と出ました。
2002 年 10 月 13 日の 137 桁の数の素因数分解についてですが、この数は 7174189082561 という素因数を持ちますので、これを除いた 124 桁の数の素因数分解を行えば良いことになります。が、現在 PPMPQS 法ではない手法で計算機に分解させているところです。結果は 10 日~2 週間後に出る予定 (停電などがなければ) です。結果が出たら詳細を報告しますので、お楽しみに。
それでは失礼します。
哲さん、こんにちは。はじめまして。
> とある人の名前を検索にかけたところこのページにたどり着きました。これから宜しくお願いします。
こちらこそ、よろしくお願いします。
誰の名前かな…?
> 2002 年 10 月 22 日の虫食い算の解答プログラムを書いてみましたが、PentiumIII の 866MHz で 5 秒かかるので落第です。しかし折角なので公開します。
> http://hyper6.amuser-net.ne.jp/~hamayan/20021022.ub
> 積の候補 90 個についてそれぞれ素因数分解を施す手法です。解答は 81766*78517(=6420021022) と出ました。
正解です。
積を先に決めておいて素因数分解するというのは面白い手法だと
思います。
問題の桁数がもっと多くなると効果があるかも知れませんね。
この問題の場合は桁数がさほど多くなく、積の下位の数字が
わかっているので、乗数の候補を下位の数字から順に弾いてゆけば
少ないループ回数で解くことができます。
> 2002 年 10 月 13 日の 137 桁の数の素因数分解についてですが、この数は 7174189082561 という素因数を持ちますので、これを除いた 124 桁の数の素因数分解を行えば良いことになります。が、現在 PPMPQS 法ではない手法で計算機に分解させているところです。結果は 10 日~2 週間後に出る予定 (停電などがなければ) です。結果が出たら詳細を報告しますので、お楽しみに。
わぉ。13 桁の数で割り切れることを確認しました。
そして残った 124 桁の数は合成数。うーむ。
結果を楽しみにしております。
効率のよい素因数分解プログラムがありましたら是非教えてください。
>>1
こんばんは。局所的ですがリプライします。
> 効率のよい素因数分解プログラムがありましたら是非教えてください。
PPMPQS 法の実装として、mpqs4linux というプログラムがあります。下記の場所から入手できます。
ftp://ftp.math.uni-bonn.de/people/franke/mpqs4linux/mpqs4linux-0.61.tgz
名前の通りで、どうやら Linux 上でしか動かないみたいです。Cygwin で make しようとして失敗しました。もし Cygwin で動かすことができたらその方法を是非教えてください。
ですが、おそらく一般公開されている PPMPQS 法の実装としては世界最速でしょう。AthlonXP の 1700+ を 1 台だけ使って 110 桁の数を 5 日で分解することができました。
PPMPQS 法は素因数分解しようとする合成数の大きさによって凡その計算所要時間が決まりますが、見つけようとする素因数の大きさによって所要時間の決まる手法もあります。
そのタイプのアルゴリズムで現在最も効率が良いとされているのが ECM です。これの実装として、GMP-ECM というプログラムがあります。下記の場所から入手できます。
http://www.loria.fr/~zimmerma/records/ecmnet.html
これも一般公開された実装で世界最速でしょう。35 桁程度までの素因数ならば速いパソコンで 24 時間ほど動かせば大抵見つかるとされています。
実はこのプログラムが (64*10^136+53)/9 (=c137) の 13 桁の素因数 (p13) を見つけてくれました。もっとも
p13 - 1 = 2 * 2 * 2 * 2 * 2 * 2 * 5 * 307 * 1531 * 47699
なのでこの素因数なら p-1 法でも見つけてくれそうですが。
なお、ECM であまり実験せずに c124(=c137/p13) を別プログラムにかけたものですから、今から GMP-ECM に c124 をかければそのプログラムの計算が終了する前に新たな素因数が見つかる可能性があります。
ちなみに現在最も効率が良いとされている素因数分解アルゴリズムはこの中に記載されていません。それについてはまたの機会にすることにします。
それでは失礼します。
>>2
哲さん、こんにちは。
プログラムのご紹介をありがとうございます。
> PPMPQS 法の実装として、mpqs4linux というプログラムがあります。下記の場所から入手できます。
> ftp://ftp.math.uni-bonn.de/people/franke/mpqs4linux/mpqs4linux-0.61.tgz
これは知りませんでした。
> 名前の通りで、どうやら Linux 上でしか動かないみたいです。Cygwin で make しようとして失敗しました。もし Cygwin で動かすことができたらその方法を是非教えてください。
gasp を呼び出すところでつっかえました。
うちの Cygwin には gasp が入っていないようです。何故かな…
動いたらご報告します。
> そのタイプのアルゴリズムで現在最も効率が良いとされているのが ECM です。これの実装として、GMP-ECM というプログラムがあります。下記の場所から入手できます。
> http://www.loria.fr/~zimmerma/records/ecmnet.html
これは以前ダウンロードだけしてまだ試していませんでした。
> 実はこのプログラムが (64*10^136+53)/9 (=c137) の 13 桁の素因数 (p13) を見つけてくれました。
さっそく試してみたところ、p13 が 14 秒くらいで見つかりました。
これは速いかも。
ECM のパラメータの決め方を研究しなければ…。
たしかに酷いっす。>JAVAスクリプト
基本的に全角アルファベットはあんまり好みじゃないです。まあ好みの問題ですが。
ちなみに JavaScript は「Java が由来のスクリプト言語」ではなかったはずです。
C++ を参考に作ったスクリプト言語で、最初の名前は LiveScript だったと聞いたことがあります。
そんで Java が世の中に出るのと同じ頃だったのと、C++ を参考にしている点で Java と一緒なので (?)、
便乗して JavaScript という名前を付けたんだったような。
正確かどうかあやしいですが、大筋はあってるはずです。
Fukai さん、こんにちは。
> ちなみに JavaScript は「Java が由来のスクリプト言語」ではなかったはずです。
あぅ、一語抜けていました。
「一応 Java が名前の由来のスクリプト言語」です。
ご指摘ありがとうございます。
http://e-words.jp/w/JavaScript.html
ここの「Java 言語をベースに…」という記述もどうかと…。
シャープがガラス基板の上にZ80を作ったそうです。
http://pcweb.mycom.co.jp/news/2002/10/22/09.html
はんかつさん、こんにちは。
> シャープがガラス基板の上にZ80を作ったそうです。
> http://pcweb.mycom.co.jp/news/2002/10/22/09.html
あちこちで話題になっていますね。
本当に動いているのだということを示すために MZ-80C を実際に
動かして見せたというところが素晴らしいと思います。
見た目はレトロでも中身は最先端。
ふと、大学の学園祭を思い出してしまいました。
>>1
> シャープがガラス基板の上にZ80を作ったそうです。
なんというか、ロマンのようなものを感じます。いい話だぁ~。
> 本当に動いているのだということを示すために MZ-80C を実際に
> 動かして見せたというところが素晴らしいと思います。
確かに。ただ展示するだけじゃなくて、そこでゲーム動かしてみせるってのはステキですね。
> いきなり数秒も動くのは凄いような。
> がんばってレリーズしてください。
モニタソフトは CQ の「作りながら学ぶ 68000」から パックンして
RS-232 は、「OH!MZ 87/5」の記事をそのままパックンして
自分で書いた回路は アドレスデコーダと /TA 遅延くらいですから
ほんとは、即・動作! っていきたいところですが…
しっかり、「フ」リーズ しております。
「レ」リーズするのは…いつになることやら…
僕が VC++6 での最適化を諦めた理由
(CPU セレロン 650MHz)
static int foo(char *p)
{
char *q;
q = p;
if ( *q++ != '{' ) {
return -1;
}
while ( 1 ) {
if ( *q == '\0' ) {
return -1;
}
if ( *q++ == '}' ) {
if ( *q != '}' ) {
break;
}
}
}
return q - p;
}
static int goo(char *p)
{
char *q;
q = p + 1;
while ( 1 ) {
if ( *q == '\0' ) {
return -1;
}
if ( *q++ == '}' ) {
if ( *q != '}' ) {
break;
}
}
}
return q - p;
}
int main(void)
{
int i;
char *p;
p = "{123456789012345678901234567890}";
for ( i = 0; i < 1000000; i++ ) {
foo( p );
goo( p );
}
return 0;
}
関数 ヒット
時間 % カウント 関数
----------------------------------------------
396.412 29.0 1000000 _foo (tst_test.obj)
494.316 36.2 1000000 _goo (tst_test.obj)
ゆうき喬史さん、こんにちは。
> 396.412 29.0 1000000 _foo (tst_test.obj)
> 494.316 36.2 1000000 _goo (tst_test.obj)
処理が少ない関数のほうが時間がかかっているということでしょうか。
どんなコードになっているのか見てみたいです。
>>1
鎌田さん、こんにちは。
> > 396.412 29.0 1000000 _foo (tst_test.obj)
> > 494.316 36.2 1000000 _goo (tst_test.obj)
>
> 処理が少ない関数のほうが時間がかかっているということでしょうか。
そうなんです、プロファイルとって、100 万回単位で呼ばれてる
処理があったので、少しでも短くしようと、if 文を削除したら、
かえって遅くなってしまうという・・・
いったい俺にどうしろと。
> どんなコードになっているのか見てみたいです。
みるかぎり、おかしなことにはなってないんですが・・・
今度また該当部分のアセンブラコードをアップします。
ところで、gcc では、どんな結果になるんでしょうか。
>>1
ども、ゆうき喬史です。
> どんなコードになっているのか見てみたいです。
以下、アセンブラソースです。
_foo PROC NEAR
mov edx, DWORD PTR _p$[esp-4]
mov cl, BYTE PTR [edx]
lea eax, DWORD PTR [edx+1]
cmp cl, 123
je SHORT $L65683
$L65720:
or eax, -1
ret 0
$L65683:
mov cl, BYTE PTR [eax]
test cl, cl
je SHORT $L65720
inc eax
cmp cl, 125
jne SHORT $L65683
cmp BYTE PTR [eax], 125
je SHORT $L65683
sub eax, edx
ret 0
_foo ENDP
_goo PROC NEAR
mov edx, DWORD PTR _p$[esp-4]
lea eax, DWORD PTR [edx+1]
$L65694:
mov cl, BYTE PTR [eax]
test cl, cl
je SHORT $L65727
inc eax
cmp cl, 125
jne SHORT $L65694
cmp BYTE PTR [eax], 125
jne SHORT $L65728
jmp SHORT $L65694
$L65727:
or eax, -1
ret 0
$L65728:
sub eax, edx
ret 0
_goo ENDP
遅い原因わかりました。
けど、どうしようもないというのもわかりました。
>>2
> ところで、gcc では、どんな結果になるんでしょうか。
こうなりました。わりと普通ですね。
とりあえず、余分な分岐命令を実行する必要はなさそうです。
.align 4
.def _foo; .scl 3; .type 32; .endef
_foo:
movl 4(%esp),%ecx
leal 1(%ecx),%edx
cmpb $123,(%ecx)
je L4
movl $-1,%eax
ret
.align 4
L4:
cmpb $0,(%edx)
je L7
movb (%edx),%al
incl %edx
cmpb $125,%al
jne L4
cmpb $125,(%edx)
je L4
movl %edx,%eax
subl %ecx,%eax
ret
.align 4
L7:
movl $-1,%eax
ret
.align 4
.def _goo; .scl 3; .type 32; .endef
_goo:
movl 4(%esp),%ecx
leal 1(%ecx),%edx
.align 4
L13:
cmpb $0,(%edx)
je L16
movb (%edx),%al
incl %edx
cmpb $125,%al
jne L13
cmpb $125,(%edx)
je L13
movl %edx,%eax
subl %ecx,%eax
ret
.align 4
L16:
movl $-1,%eax
ret
>>4
こんにちは、ゆうきです。
> > ところで、gcc では、どんな結果になるんでしょうか。
>
> こうなりました。わりと普通ですね。
> とりあえず、余分な分岐命令を実行する必要はなさそうです。
わざわざ、ありがとうございます。
やっぱり、gcc だと普通になるんですね。
VC++6 では、この他にも、命令削って遅くなったり、速度が
変わらなかったりがあって途方にくれてしまいました。
ども、すけです。
お騒がせしました…どーやら、「ハードが不安定」ということ
みたいです :<
その先もステップ動作させてみたら
「$FFF006A0 番地のリード状態」
「$FFF006A4 番地のリード状態」
「$FFF006A8 番地のリード状態」
…
と推移していきました…
『$FFF006A0 には、BRA 命令があるんですが
BRA 命令は実行されなかったものとみられます…』
「$FFF006A4 以降の内容は実行されているみたいです」
(外部回路の RS-232 用クロックの分周がキチンと指定した分周比で
出力されるので…)
っで、「まあ動くからいいかぁ」と思って通常動作させてみたら…
電源オンから数秒でフリーズしました
もっともハードがめちゃ不安定ということですから…
すべては、しっかりハードが動いてから ということですね。
う~ん、はずかちぃ~。(+o+)
>『$FFF006A0 には、BRA 命令があるんですが
> BRA 命令は実行されなかったものとみられます…』
>「$FFF006A4 以降の内容は実行されているみたいです」
$06A0 にジャンプしたのではなくて read しただけでしたか。
ライン read のような挙動にも見えますが、命令キャッシュが
OFF なのでそれはないはずですよね。
ジャンプ先が奇数ワードのときは 1 ワード手前からフェッチが
始まりますが、この場合は偶数ワードなのでその可能性もなし。
68040 には分岐キャッシュはないし…
> っで、「まあ動くからいいかぁ」と思って通常動作させてみたら…
> 電源オンから数秒でフリーズしました
いきなり数秒も動くのは凄いような。
がんばってレリーズしてください。
どうも、すけです。
ちょいと悩も事がありまして教えていただけると幸いです。
68040 についてなんですが‥
FFF0001A:61 00 06 88 ・・・・
というコードで $06A4 番地にジャンプすると思ってたら
$00007FC 番地 (スタック)に $FFF0001E を書き込んで
$06A0 番地に飛びたがるんでス…
$0688+$1C→$06A4 だとおもっていましたが ・・・・
こういうことってありえますか?
ハードが自作なので(って、cpu+sram+rom+ μ D8251 しかありませんが)・・・トンチンカンな質問かもしれませんが…
気が向いたら教えてください、
---------------------------------------------
(参考)
XC68040 に 4 個の ROM と RAM をつなげて…
RAM $00000000~$0001FFFF。
ROM $FFF00000~$FFF1FFFF。
ROM:(内容)
FFF00000:00 00 00 00 FF F0 00 08
FFF00008:20 7C 00 00 08 00 2E 48
FFF00010:70 00 4E 7B 08 01 4E 7B
FFF00018:00 02 61 00 06 88 ** **
********
(PRN ファイル)
X68k High-speed Assembler v3.09+87 Copyright 1990-94/96-99 Y.Nakamura/M.Kamada
Oct/14/02 16:46:03
<68040.s>
1 00000000 ;*********** main **************
2 00000000 .CPU 68040
3 00000000 main:
4 00000000 4E71 nop
5 00000002 4E71 nop
6 00000004 4E71 nop
7 00000006 4E71 nop
8 00000008 207C00000800 move.l #$00000800,a0
9 0000000E 2E48 move.l a0,a7
10 00000010
11 00000010 7000 move.l #0,d0
12 00000012 4E7B0801 movec d0,VBR
13 00000016 4E7B0002 movec d0,CACR
14 0000001A
15 0000001A 61000688_000006A4 bsr vecinz
(以下略)
すけさん、こんにちは
> FFF0001A:61 00 06 88 ・・・・
> というコードで $06A4 番地にジャンプすると思ってたら
>
> $00007FC 番地 (スタック)に $FFF0001E を書き込んで
> $06A0 番地に飛びたがるんでス…
>
> $0688+$1C→$06A4 だとおもっていましたが ・・・・
> こういうことってありえますか?
ROM の内容に間違いがなければソフトウェア的にはあり得ません。
最初の write の直後というのが気がかりですが、ハードウェアは
安定しているのでしょうか。
はじめまして。「俺ぽーたる」経由で 9 月 26 日の日記を拝見しました。
「スタイルシートオン」のスクリプトですが、ページで代替スタイルシートを用意している場合だと、もともと disabled=true である代替スタイルシートまでもが有効となってしまうので、表示が崩れる場合があるようです。と念のためご報告まで。
北村さん、こんにちは。
>「スタイルシートオン」のスクリプトですが、ページで代替スタイルシートを用意している場合だと、もともと disabled=true である代替スタイルシートまでもが有姑なってしまうので、表示が崩れる場合があるようです。と念のためご報告まで。
ご報告ありがとうございます。
少し改良してみました。
もう少し詳しく書いた方が良かったかな。
1.既出を「がいしゅつ」と読んでいた。
2.2ちゃんねるで「がいしゅつって、既出のことですか?」という書きこみを見る。
3.既出の読み方を調べて見る。
4.「きしゅつ」が正しい読み方だった。(ガーーーーン)
というプロセスを経ています。(w
> 自分の読み方と他の人の読み方が違うときは、
> どちらが正しいか辞書で調べて確認しましょう。
> いつも他の人が正しいとは限りません。
ええ、何事も鵜呑みにせず、自分で調べて見ることは、
大切だと思います。
対消滅って、「ついしょうめつ」って読むんですね。
いままで、「たいしょうめつ」って読んでいました。
ひとつ賢くなりました。
ちなみに、「既出」、「巣窟」も2ちゃんねる見るまで、
正しく読めていなかった人です。(w
KYOSKE さん、こんにちは。
> ちなみに、「既出」、「巣窟」も2ちゃんねる見るまで、
> 正しく読めていなかった人です。(w
自分の読み方と他の人の読み方が違うときは、
どちらが正しいか辞書で調べて確認しましょう。
いつも他の人が正しいとは限りません。
既出(きしゅつ)
巣窟(そうくつ)
花びらの向こう側に虫がいる…
ザキさん、こんにちは。
> 花びらの向こう側に虫がいる…
遅くなりましたが、正解を発表しました。
ザキさんの「花びら」と「虫」はあっていました。
虫の種類は正解者なしでした。
答えは…
サッパリ分かりません (/ ρ\)
ザキさん、こんにちは。
> 答えは…
> サッパリ分かりません (/ ρ\)
ヒントを出しておきました。
4005x5381=21550905 となりました。
□□□5
×□□□1
─────
□□□5
□□□□□
□□□□□
20025
────────
2□□□0905
神のお告げで、ここまでを速攻で決めると、
一撃で被乗数が判明し、あとは埋めてゆくだけとあいなりました。
*解の一位が5のため、被乗数か乗数の一位のどちらかが5。
*筆算の一行め?が、4桁のため、乗数の一位が5ではやりにくい。
ってな具合で。小学生的アプローチでなんとか。^^;
つちやさん、こんにちは。
> 4005x5381=21550905 となりました。
せーかいです。
>*解の一位が5のため、被乗数か乗数の一位のどちらかが5。
>*筆算の一行め?が、4桁のため、乗数の一位が5ではやりにくい。
>
> ってな具合で。小学生的アプローチでなんとか。^^;
清く正しい虫食い算の解き方だと思いマス。
A (4 n +3)=2+(-1/2)^(2n+1)
は。。。
A(4n+3)=2-(1/2)(-1/4)^n
でした ・・・・
----------------------------------
2 と、(-1/4) をながめていると
『統一』できそうなきがしてきたケド…
一般項 A(n)は ,n=0,1,2…として次の 4 式で表わされる。
A (4 n)=2(1-(-1/4)^n)
A (4 n +1)=2+(-1/4)^n
A (4 n +2)=2
A (4 n +3)=2+(-1/2)^(2n+1)
巧く、ひとつにまとめられそうであるが ・・・・