1 名前:デフォルトの名無しさん [2006/05/24(水) 01:43:34 ] アセンブラ全般に関するスレッドです。 【前スレ】 アセンブラ… ヽ(゚∀゚)ノフォーウ! pc8.2ch.net/test/read.cgi/tech/1132761638/ 過去ログは>>2 辺り
191 名前:あや [2006/06/25(日) 13:18:40 ] こんにちは! 今学校でMIPSのシミュレータを勉強してます★ それで、「N掛けるNの掛け算表表示プログラム」 を出力するプログラム(Nは入力して与える)を書けという課題を出されたのですが、 全くわかりません>< 誰か助けてください! 先生がくれたメインルーチン部分は
192 名前:あや [2006/06/25(日) 13:19:28 ] #timesTable.asm-- N掛けるNの掛け算表表示プログラム、Nは入力して与える。 #使用レジスタ $v0 - syscallパラメータ 及び 戻り値 # $a0 - syscallパラメータ 及び サブルーチンprintValue呼び出し用引数1 # $a1 - サブルーチンprintValue呼び出し用引数2 # $s0 - 掛け算用の変数1 # $s1 - 掛け算用の変数2 # $s2 - カウントダウンループ制御用変数、$s0と対で、$s0が1増えると$2が1減る # $s3 - カウントダウンループ制御用変数、$s1と 対で、$s1が1増えると$3が1減る # $s4 - いくつまで表を出力するかをいれておくための変数 # $t0からt4までをテンポラリレジスタとして利用
193 名前:あや [2006/06/25(日) 13:20:44 ] .text main: li $v0,5 #整数入力のためにシステムコール番号 syscall #5を$v0に格納 move $s4 $v0 #大きさを$s4に格納する li $s0,1 move $s2,$s4 #外側の変数を初期化する loop1: li $s1,1 move $s3,$s4 #内側の変数を初期化する loop2: move $a0 $s0 move $a1 $s1 jal printValue #値を出力するサブルーチンを呼び出す jal print SP addi $s1,$s1,1 #掛ける数を増やす addiu $s3,$s3,-1 #ループ変数を減らす bne $s3,$zero,loop2 #ループ変数が0になるまでループする jal printfCRLF #改行を出力する addi $s0,$s0,1 #掛ける数を増やす addiu $s2,$s2,-1 #ループ変数を減らす bne $s2,$zero,loop1 #ループ変数が0になるまでループする li $v0,10 syscall #プログラム終了 です。誰かわかる人いませんか?
194 名前:マイク ◆yrBrqfF1Ew mailto:sage [2006/06/25(日) 14:12:45 ] >全くわかりません>< >誰か助けてください! 俺もよくわからないから 今度デートしようよ。
195 名前:あや [2006/06/25(日) 14:25:13 ] わからないならやだーー笑。
196 名前:デフォルトの名無しさん mailto:sage [2006/06/25(日) 14:25:54 ] あやちゃんのフルネームは 綾小路源五郎
197 名前:あや [2006/06/25(日) 15:12:20 ] みんな使えない!! パソコンに関してはすごいのかと思ったらぜんぜんじゃんか!
198 名前:マイク ◆yrBrqfF1Ew mailto:sage [2006/06/25(日) 15:16:01 ] #printValueの中身は引数かけて表示 #printSPはスペース表示 #printCRLFは改行表示 .data SPACE: .asciiz " " CRLF: .asciiz "\r\n" .text printValue: mult $t0, $a0, $a1 li $v0, 1 move $a0 $t0 syscall jr $ra printSP: li $v0, 4 la $a0, SPACE syscall jr $ra printCRLF: li $v0, 4 la $a0, CRLF syscall jr $ra
199 名前:デフォルトの名無しさん mailto:sage [2006/06/25(日) 15:37:21 ] お題はプログラムを出力するプログラムじゃないの?
200 名前:デフォルトの名無しさん mailto:sage [2006/06/25(日) 16:16:58 ] >>197 馬鹿だなあ お前のようなネカマに使われたくないだけだよ(w
201 名前:あや [2006/06/25(日) 19:30:05 ] >198 ありがとうございます♡→ܫ←♡ まだ動かないですけど、かなり助かりました! mult $t0, $a0, $a1 ^ のところでsyntax errorが出るんですよね〜↓ なんでだろう? でもマイクさんすごいです!!
202 名前:デフォルトの名無しさん mailto:sage [2006/06/25(日) 19:53:52 ] ♡→ܫ←♡
203 名前:デフォルトの名無しさん mailto:sage [2006/06/25(日) 19:59:27 ] → ← ܫ ♡ ♡ ܫ ♡
204 名前:あや [2006/06/25(日) 20:32:54 ] (´^ิu^ิ`)
205 名前:デフォルトの名無しさん mailto:sage [2006/06/25(日) 21:06:24 ] 「mult」ってアセンブラ命令なのか?
206 名前:デフォルトの名無しさん mailto:sage [2006/06/25(日) 21:30:25 ] >190 お前は俺の言っている意味が全然解ってない。 メモリアクセス>>(超えられない壁)>>HDDアクセス>>>回線 だと言っている。 リクエスト数が多いなら、IOアクセス量の問題だから なおの事アセンブラ化での高速化では解決しない。 更に言うなら、そんなシステムをデバッグの困難なアセンブラで書き起す事自体がネタとしか思えない。
207 名前:マイク ◆yrBrqfF1Ew mailto:sage [2006/06/25(日) 21:43:13 ] >>201 じゃmultをmulに変えてみてくれ。 >でもマイクさんすごいです!! 感謝の気持ちは電話番号でのみ受け取るよ。
208 名前:デフォルトの名無しさん mailto:sage [2006/06/25(日) 23:53:31 ] IA-32でのCMPとTESTの使い分け方を教えてください。 とりあえず今は全部CMPにしていますが…
209 名前:デフォルトの名無しさん mailto:sage [2006/06/26(月) 00:07:20 ] 引き算とand演算の違い。
210 名前:デフォルトの名無しさん [2006/06/26(月) 02:49:00 ] アセンブラ遅かったら使う意味無いじゃん!(><) 騙された!
211 名前:デフォルトの名無しさん mailto:sage [2006/06/26(月) 10:32:54 ] 今のクピュはアッセンをエミュで実行してるからCの方が早いよ
212 名前:デフォルトの名無しさん mailto:sage [2006/06/26(月) 14:23:35 ] >>206 206は>>190に書かれている日本語を理解してない。 >ボトルネックはリクエストに対するアパッチの応答。 と書いてある。 なぜ >リクエスト数が多いなら、IOアクセス量の問題だから と言う話になるのだ? 206はそもそもWEBサーバーを動かした事が無いのか? >デバッグの困難なアセンブラで書き起す事 デバッグが困難なのはつくりが悪いからであってアセンブラのせいじゃ無い。
213 名前:デフォルトの名無しさん mailto:sage [2006/06/26(月) 15:04:22 ] リクエスト数の多さって、結局データ転送量の問題になる気がするけど? 具体的に何処を高速化したいのかわからん。 マルチスレッドのリアルタイム性ならOS書き換えるかCPU変えるor増やすしかないし、 「アパッチの作りが悪い」と言いたいだけなら該当箇所修正しる。 今主流のシステムでアセンブラ化で高速化出来るのはメモリアクセスの効率と演算の最適化で、 ランダムアクセスと転送が主になるwebサーバは高速化できない。 それと、もう余りにもアホらしくて突っ込む気も失せ気味だが、 高級言語と低級言語の開発効率とメンテナンス性の違いが理解出来てないなら ホントにプログラマやめたほうがええよ。
214 名前:デフォルトの名無しさん mailto:sage [2006/06/26(月) 15:21:59 ] リクエスト数増えたらマシン増やして負荷分散だろ それとも負荷分散装置でも作ってるのか?
215 名前:デフォルトの名無しさん mailto:sage [2006/06/26(月) 15:53:57 ] 携帯用のサイトなので、データー量はしれてるのだけど、広告媒体が動いた瞬間にアクセスが急に増えたり 昼の休み時間や夕方にアクセスが集中する。平均的には大したリクエスト数ではないのだけど>>190 に 書いたようにピークがとにかくすごい。ピークに合わせてマシン増やすのは誰でも出来るが 専用の最適化されたWEBサーバーを立てれば、多分マシン1台で10サイトくらいは余裕で行ける見積もりなので 他社との差別化が出来る。中小企業にはブレードサーバーなんて置けない所もあるのだよ。 アパッチのつくりが悪い訳じゃ無い。高機能すぎて不要な機能の為に速度が犠牲になってるだけ。
216 名前:デフォルトの名無しさん mailto:sage [2006/06/26(月) 15:56:47 ] PMがGO出すわけねぇし、どうせ学生の遊びだろ。
217 名前:デフォルトの名無しさん mailto:sage [2006/06/26(月) 16:00:50 ] >>216 学生乙
218 名前:デフォルトの名無しさん mailto:sage [2006/06/26(月) 16:48:54 ] >ランダムアクセスと転送が主になるwebサーバは高速化できない。 知ったかぶり乙
219 名前:デフォルトの名無しさん mailto:sage [2006/06/26(月) 17:22:22 ] >具体的に何処を高速化したいのかわからん。 日本語勉強汁!
220 名前:デフォルトの名無しさん mailto:sage [2006/06/26(月) 19:48:28 ] 趣味でやるなら、まあ好きにやれ。健闘を祈る。 仕事でやるならメンテする人間の冥福を祈る。
221 名前:デフォルトの名無しさん mailto:sage [2006/06/26(月) 20:00:55 ] >>219 「応答」が具体的だと思ってるならそれは間違い。
222 名前:デフォルトの名無しさん mailto:sage [2006/06/26(月) 20:52:09 ] >>215 そのためにホスティングサービスやASPって物があると思うんだが ピークの合わないサイトを組み合わせて手の空いた時間は別のサイトに処理能力を廻す見たいな感じで そこら辺はデータセンタ/ASP運用の肝って所だな あとは中小企業でブレードサーバ置くなんて考えがそもそもおかしい それをあえて自前でやろうって考えは別に止める気は無いが まずはWebProg板へ行ってぼろ糞に叩かれて来い
223 名前:デフォルトの名無しさん mailto:sage [2006/06/26(月) 23:32:03 ] 俺も206と殆ど同意見だな。 WEBアプリケーションをアセンブラで作ろうという奴の気がしれない。
224 名前:デフォルトの名無しさん mailto:sage [2006/06/27(火) 02:13:49 ] サーバをWEBサイトとほざいた>>183 とWEBアプリケーションと抜かした>>223 さーて不思議な符合ですね。
225 名前:デフォルトの名無しさん mailto:sage [2006/06/27(火) 04:36:34 ] このスレには2人しか居ないから
226 名前:デフォルトの名無しさん mailto:sage [2006/06/27(火) 05:15:32 ] いや、3人いる。俺とお前と大五郎だ。
227 名前:デフォルトの名無しさん mailto:sage [2006/06/27(火) 05:20:53 ] 昨日からアセンブリ弄り始めた私を含めて4人だな。
228 名前:デフォルトの名無しさん mailto:sage [2006/06/27(火) 05:47:34 ] アセンブラじゃなくて、マシン語でプログラム書いている酔狂もいるらしいな。
229 名前:デフォルトの名無しさん mailto:sage [2006/06/27(火) 12:35:43 ] 明日からアセンブリ弄り始める私を含めて5人だな。
230 名前:デフォルトの名無しさん mailto:sage [2006/06/27(火) 12:46:05 ] 明後日からアセンブリ弄り始める私を含めて6人だな。
231 名前:デフォルトの名無しさん mailto:sage [2006/06/27(火) 12:46:07 ] 俺はもう卒業するから4人だな
232 名前:デフォルトの名無しさん mailto:sage [2006/06/27(火) 13:24:23 ] メールが届いた。 >1.流出したお客様情報の内容 > 2003年12月18日までにインターネット接続サービス「DION」にご契約 > されたお客様に関する同年同日時点の以下の情報 > (1)お名前、ご住所、ご連絡先電話番号 : 3,996,789名様分 > (2)上記(1)のうち、性別、生年月日、ご連絡先メールアドレスも含ま > れていたもの > ・性別 : 26,493名様分 > ・生年月日 : 98,150名様分 > ・ご連絡先メールアドレス : 447,175名様分 > > ■ご契約のDIONメールアドレス(※)、パスワード、口座番号等の信用 > 情報、通信記録は流出していません。 自鯖で済む物を、貧弱でセキュリティ大甘の連鯖使うなんて俺には出来ん。 7人。
233 名前:デフォルトの名無しさん mailto:sage [2006/06/27(火) 20:02:43 ] 今日は早上がりの漏れ様が経験の無い>>215 にアドバイスしておく。 ドコモやボダのゲイトウェイはかなり低速(auのは知らん)。 なので、多くの携帯が1台のサーバにアクセスしてくると、プロトコルスタックや サーバアプリ(←これは作りにもよるが、それなりに高速だとして)の性能限界に 達する前にTCPコネクション数(多くの場合3万弱くらいか)を使い切ってしまう という事態が起きる。 ので、ZenでOSを分けるとかするのでなければ、十分高速であればそれ以上 カリカリにチューニングしてもあまり意味は無い。 ・・・それは別として自分で作るくらいなら tux とか IIS の方が良いような気もする。
234 名前:デフォルトの名無しさん [2006/06/27(火) 22:40:24 ] 汗んブラで書くんだったらカーネルドライバとかプロトコル部だね 本気でパフォーマンス稼ぐつもりならFPGAで2層以上をオフロード つーかL5ロードバランサ使えww
235 名前:デフォルトの名無しさん mailto:sage [2006/06/28(水) 18:02:23 ] FPGAなんぞ遅延でかいから速度あがらん ASICでいいよ
236 名前:デフォルトの名無しさん mailto:sage [2006/06/28(水) 21:25:05 ] BASICでインジャネ
237 名前:デフォルトの名無しさん mailto:sage [2006/06/28(水) 22:43:03 ] LISPマスィーン
238 名前:デフォルトの名無しさん mailto:sage [2006/06/29(木) 01:08:27 ] >>233 アドバイスありがとうございます。 ページキャッシュが使えない事もあり、現状では300アクセス/秒程度しかさばけないのですが この時のCPU負荷が100パーセント近いので、まずはIOやTCPコネクションよりもこちらを改善する予定です。 とりあえずCで簡単なサーバーを書いて動かせばCPU負荷が極端に減り、10サイト位はいけそうな雰囲気はあります。 ZenはTCPコネクションの問題回避では無く、複数のサイトを動かす為にメンテのしやすさから導入したかったのですが zen1.1ではアパッチはまともに動かなかった気がします。最新版では大丈夫なのでしょうか? >>234 TCPスタック迄はとりあえず弄るつもりは無いです。 HDLで実現できれば面白いですね。制限付きのNTPサーバーなんかは有るみたいで、触発はされたのですが実力がorz
239 名前:デフォルトの名無しさん mailto:sage [2006/06/29(木) 08:36:55 ] スレ違いのWEBサーバの話題終了ー。 以降通常運営でお送りいたします。
240 名前:デフォルトの名無しさん mailto:sage [2006/06/29(木) 12:01:14 ] nasmのEQUと%defineって何が違うの?
241 名前:デフォルトの名無しさん mailto:sage [2006/06/29(木) 12:37:06 ] 下のように乗算のプログラムを完成させたいのですがさっぱりわかりませんorz 誰かボスケテ start: add $1, $0, $0 ; $1: address of X addi $2, $0, 16 ; $2: counter = 16 add $3, $0, $0 ; $3: product Z lw $4, 0($1) ; $4: X, load X to $4 addi $1, $1, 4 ; address + 4 ... loop: ... add $3, $3, $4 ; Z = Z + X shift: ... addi $2, $2, -1 ; counter-- bne $2, $0, loop ; go to loop if counter != 0 sw $3, 0($1) ; store Z finish: j finish ; dead loop
242 名前:デフォルトの名無しさん mailto:sage [2006/06/29(木) 12:53:05 ] >>241 一度2進数の掛け算を筆算で書いてみな
243 名前:デフォルトの名無しさん mailto:sage [2006/06/29(木) 18:16:49 ] 13(10) x 10(10) = 130(10) 1101(2) = 13(10) x 1010(2) = 10(10) ---------------- 11010(2) 1101000(2) ---------------- 10000010(2) = 130(10)
244 名前:デフォルトの名無しさん [2006/07/02(日) 11:15:33 ] 質問なのですが C言語の for(t=1;t<9;t++) をアセンブラで書くとどうなるのでしょうか?
245 名前:デフォルトの名無しさん mailto:sage [2006/07/02(日) 11:53:02 ] >>244 mov eax,1 L1: cmp eax,8 jg L2 inc eax jmp L1 L2:
246 名前:デフォルトの名無しさん mailto:sage [2006/07/02(日) 12:10:27 ] xor ax,ax mov cx,8 a: inc ax loop a
247 名前:デフォルトの名無しさん mailto:sage [2006/07/02(日) 12:45:17 ] >>244 XOR GR7,GR7 ST GR7,t JUMP L02 L01 ・・・ ・・・ LD GR7,t LAD GR7,1,GR7 ST GR7,t L02 LAD GR1,9 CPA GR7,GR1 JMI L01 ・・・
248 名前:デフォルトの名無しさん [2006/07/02(日) 12:49:08 ] >>245 さん ありがとうございます eaxというのは変数と解釈して良いのでしょうか? あと各命令は eaxを1とおく <L1> 8と比較してeaxが以上ならば <L2>へ飛ぶ eaxが小さければ <L1>を実行する <L2> というかんじでしょうか
249 名前:デフォルトの名無しさん mailto:sage [2006/07/02(日) 13:08:25 ] jgは「以上」じゃなくて「より大きい」だよ。
250 名前:デフォルトの名無しさん mailto:sage [2006/07/02(日) 13:11:10 ] > eaxというのは変数と解釈して良いのでしょうか? おーい。 だいたい、「アセンブラで書け」というなら、プロセッサ書けよ。
251 名前:デフォルトの名無しさん [2006/07/02(日) 13:14:22 ] H8/3664 です
252 名前:デフォルトの名無しさん mailto:sage [2006/07/02(日) 13:15:59 ] >>247 × XOR GR7,GR7 ○ LAD GR7,1 だな。
253 名前:デフォルトの名無しさん mailto:sage [2006/07/02(日) 13:54:03 ] >>251 組み込みCPU関係は電気・電子板で聞いたほうがいいかも。
254 名前:デフォルトの名無しさん [2006/07/02(日) 14:15:00 ] ありがとうございました
255 名前:デフォルトの名無しさん mailto:sage [2006/07/03(月) 03:47:29 ] >>244-249 なんでCPU指定されてないのに会話が続いてたんだろう
256 名前:デフォルトの名無しさん mailto:sage [2006/07/03(月) 05:03:24 ] なんでもいいからアセンブリ書きたい気分だったんだろ
257 名前:デフォルトの名無しさん mailto:sage [2006/07/03(月) 06:11:59 ] CPUの指定がない場合は回答側が好きなCPUを選べます。
258 名前:デフォルトの名無しさん [2006/07/03(月) 22:49:18 ] NASM MASM TASM どれを使ってますか
259 名前:デフォルトの名無しさん mailto:sage [2006/07/03(月) 22:50:43 ] GAS 一択。
260 名前:デフォルトの名無しさん mailto:sage [2006/07/03(月) 22:55:03 ] TASM。
261 名前:デフォルトの名無しさん [2006/07/03(月) 22:56:42 ] GASでCOMを作成できますか
262 名前:デフォルトの名無しさん mailto:sage [2006/07/03(月) 22:59:01 ] NASM MASM LASM GAS
263 名前:デフォルトの名無しさん [2006/07/04(火) 00:19:44 ] YASM
264 名前:デフォルトの名無しさん mailto:sage [2006/07/04(火) 02:21:01 ] >>263 休むな。
265 名前:デフォルトの名無しさん [2006/07/04(火) 03:16:08 ] NASMを使っているけど、コンパイルするまでの手間がだるい。 中間ファイル作成→ALinkでコンパイル この手間を無くしたい。 MASMって使用者が多いと思うけど、上記項目を一括して出来るの? 出来るなら乗り換えようかな。
266 名前:デフォルトの名無しさん mailto:sage [2006/07/04(火) 03:48:31 ] >>265 batファイルを作ればいいような。
267 名前:デフォルトの名無しさん mailto:sage [2006/07/04(火) 07:18:52 ] 近頃の若いもんはmakeもしらんのか
268 名前:デフォルトの名無しさん mailto:sage [2006/07/04(火) 08:39:59 ] 統合環境に組み入れられるだろ。 つーか make でいいよな?
269 名前:デフォルトの名無しさん mailto:sage [2006/07/04(火) 09:39:11 ] DOSの頃はMASMやTASMを愛用してたけど、 Win環境に移ってからこっちインラインアセンブラしか書かなくなったなぁ。
270 名前:デフォルトの名無しさん mailto:sage [2006/07/04(火) 11:41:38 ] makeはいちいちMakefileを書くのが面倒だろう なのでbat ・・・フルアセンブリ・1ファイル完結の話だよな? そうじゃないなら俺もMakefile書くが
271 名前:デフォルトの名無しさん mailto:sage [2006/07/04(火) 17:40:39 ] アセでそんなにでかいプロジェクトなんてやらないし どうせ全ビルドでも一瞬で終わるんだ 数行書くごとに全ビルドでもまったく苦にならんw
272 名前:デフォルトの名無しさん mailto:sage [2006/07/04(火) 19:57:12 ] nasm.exe(-f win32)で作成したobjはld.exeでもリンクできるなぁ‥‥ めどいならgccでリンク。 それはそうと、nasmのセクション宣言で共有属性をつけることは出来ない? とりあえずFMOで共有メモリを実現している。 gasなら .section .sdata,"rws" って書けば共有属性が付くけど。
273 名前:デフォルトの名無しさん mailto:sage [2006/07/06(木) 00:06:20 ] SHのプロジェクト預かったのだがコンパイラ先生が生成したアセンがまったくわからんのです。シミュレータぶんまわしてもそこがわからんorz タヂケkt SuperH RISC engine C/C++ Compiler (V.8.00.05) EX). Address ML Assembler 00007E66 D23D MOV.L @(H'00F4:8,PC),R2 以下考察 Inst Dest Displacement b1101 0010 0011 1101 h d 2 3 d 構文のDisplacemnetは下位2bit分(1/4としている)を省略し記述になっているようだ Destinationは簡単にR2を2としているだけ MOV.L @(disp,PC),Rnの解説(仕様書抜粋) ディスプレースメントは8bitまで(H'1-FF) LONG WORD 拡張×4 最大:b1111111100:0x1020 WORD 拡張×2 最大:b0111111110:0x 510 としている よってDisplacementはH'03D0 PCは下位2bitをマスクする H'00007E66 & H'FFFFFFFC よってH'7E64 R2 = PC + Displacement = H'8234となる? しかし実際は シムではR2 = H'00003774 ドボヂテ(TロT)
274 名前:デフォルトの名無しさん mailto:sage [2006/07/06(木) 01:32:32 ] >>273 Displacementは、普通±を考慮すると思うのだが。 8bitのDisplacementだと、bit7が1だと「−」になるとか…。 SHは触ったことが無いので間違っていたらゴメン。
275 名前:デフォルトの名無しさん mailto:sage [2006/07/06(木) 02:33:04 ] @は即値じゃなくて、間接アドレッシングじゃないのか?
276 名前:デフォルトの名無しさん mailto:sage [2006/07/06(木) 02:49:31 ] 考察ってのはどういうことなの?ちゃんとマニュアルに命令形式が載ってるでしょ。 >b1111111100:0x1020 >b0111111110:0x 510 ってのもおかしいし。 R2=Read_Long( (0x00007E66 & 0xFFFFFFFC) + (0x3D<<2) ) = Read_Long( 0x7E64+0xF4 ) = Read_Long(0x7F58) アドレス0x7F58にあるLong値がR2に入る。 ttp://japan.renesas.com/ から「SuperH RISC engine ファミリ」>「ドキュメント」で 日本語のソフトウェアマニュアルにたどり着けるから、それ読むといいよ。
277 名前:デフォルトの名無しさん mailto:sage [2006/07/06(木) 04:11:21 ] 誰もドキュンの意見は聞いてません 帰れ
278 名前:デフォルトの名無しさん [2006/07/06(木) 11:37:38 ] add, sub, and, or, lw, sw, beq, bne, j, addi, andi, ori, sll, srl, sra これだけの命令で16or32ビット同士の数字の掛け算のプログラムを作れますか?
279 名前:278 [2006/07/06(木) 11:59:57 ] /* multiplication.c: Unsigned 16-bit x 16-bit */ main(){ int x = 0x0000c9ae; int y = 0x0000f6e5; int z = mul(x, y); printf("%08x * %08x = %08x\n", x, y, z); } int mul(int x, int y){ int a, b, c; int i; // counter a = x; b = y; c = 0; // production for(i = 0; i < 16; i++){ // for 16 bits if((b & 1) == 1){ // LSB of b is 1 c += a; // c = c + a } a = a << 1; // shift a 1-bit left b = b >> 1; // shift b 1-bit right } return(c); // return production } ちなみにC言語で書くとこうなるらしいです
280 名前:デフォルトの名無しさん mailto:sage [2006/07/06(木) 12:19:20 ] ふと思ったが、何でもできる最小限の命令セットってどのくらいだろう。 メモリのリードライト、条件ジャンプ、あと加算? そういやBrainFuckが何でもできるんだったな。
281 名前:デフォルトの名無しさん mailto:sage [2006/07/06(木) 12:33:54 ] チューリングマシンとか、RAM とかの話になると思うけど、 多分 定数 1 加算 0 判定 間接参照 程度で大丈夫じゃないかな?
282 名前:デフォルトの名無しさん mailto:sage [2006/07/06(木) 12:45:22 ] 分岐はいるだろう
283 名前:デフォルトの名無しさん mailto:sage [2006/07/06(木) 13:17:01 ] PCに加算できれば分岐は要らない
284 名前:デフォルトの名無しさん mailto:sage [2006/07/06(木) 13:20:26 ] レジスタから指定したアドレスの内容を減算し、 結果をレジスタとアドレスにストアする。 これでどんなプログラムでも書けるらしい。 実用的にはPCやレジスタにもアドレスを付け、 1番地と2番地に書くと3番地に加算結果、4番地に減算結果、etc というハードにすると、MOVE命令だけでOK 1命令CPUのすごいところは、命令デコーダが不要なことだ!
285 名前:デフォルトの名無しさん mailto:sage [2006/07/06(木) 14:33:41 ] >>284 その分コーディングで効率を上げないと無駄が増える
286 名前:デフォルトの名無しさん mailto:sage [2006/07/06(木) 15:47:42 ] >>278 シフト命令の他に回転命令が無いと面倒臭くなるな。
287 名前:デフォルトの名無しさん mailto:sage [2006/07/06(木) 17:53:21 ] 出来る出来ないは別にして最低限無いと人間が記述する時に不便or不都合が生じる、 という最低限な命令セットの話で。
288 名前:デフォルトの名無しさん mailto:sage [2006/07/06(木) 18:00:35 ] RISC系CPUの初期モデルの命令セットでも見れば? まあ、x86とかでもアセンブラレベルでの命令の種類はそう多くはないんだが。
289 名前:デフォルトの名無しさん mailto:sage [2006/07/06(木) 19:28:36 ] 俺なら真っ先にHALTとNOPとブレークポイント例外を入れるね。
290 名前:デフォルトの名無しさん [2006/07/06(木) 19:52:24 ] >>289 「最低限」必要か?
291 名前:デフォルトの名無しさん mailto:sage [2006/07/06(木) 19:59:05 ] >>290 HALTが無いとチューリングマシンとして成り立たないのでは?