アセンブラの宿題質問スレ
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
2006/10/18(水) 00:04:05アセンブラ好きのお兄さんに尋ねるスレ。
・必ずCPUの名前を書くこと!
・情報を小出しにしない。書ける情報は全て書いた方が得だよ。
0369デフォルトの名無しさん
2007/03/02(金) 20:04:420370デフォルトの名無しさん
2007/03/03(土) 02:29:30オペコードマップ
ttp://home.earthlink.net/~tdickens/68hc11/68hc11_opcode_map.html
命令表
ttp://home.earthlink.net/~tdickens/68hc11/68hc11_opcode_map.html
どっちも英語ではあるけど、表だから問題なく読めるよね。
0371デフォルトの名無しさん
2007/03/03(土) 04:35:10ってことで、ここからオペコードマップにも命令リストにもアクセスできる。
ttp://home.earthlink.net/~tdickens/68hc11/docs_references.html
0373デフォルトの名無しさん
2007/03/04(日) 23:58:34今週は少し進みましたが、、、、、
逆アセンブラソフトほしいn
こういうソフト見つけましたが使えますかねー?
http://down.upsdn.net/html/1/1.html
0374デフォルトの名無しさん
2007/03/05(月) 10:51:160375デフォルトの名無しさん
2007/03/05(月) 10:52:01逆アスくらい自力でできるだろうよ。
って、元辿って読んだらリバースエンジニアリング目的かよ。
0376デフォルトの名無しさん
2007/03/05(月) 10:56:370377デフォルトの名無しさん
2007/03/07(水) 03:41:12修正お願いします。。
(3回目のLOOPでゼロフラグが立たない理由もお願いします)
ORG 8000H
XOR A
LD B,06H
LD C,0AH
LOOP: LD D,A
LD A,C
AND 01H
JP Z,SKIP
LD A,D
ADD A,B
LD D,A
SKIP: SLA B
SRA C
JP NZ,LOOP
LD A,D
LD (8200H),A
JP 0000H
END
0378デフォルトの名無しさん
2007/03/07(水) 04:04:51LOOP: LD D,A
LD A,C
↓
LD D,A
LOOP: LD A,C
JP Z,SKIPでZが立ってる時って、A=0だろ。そのままJP NZ,LOOP → LD D,A(D=0) になってるように思う。
あとSRA Cって10→5→2→1→0
0379デフォルトの名無しさん
2007/03/07(水) 06:06:590380デフォルトの名無しさん
2007/03/07(水) 06:17:370381デフォルトの名無しさん
2007/03/07(水) 11:38:130382デフォルトの名無しさん
2007/03/07(水) 11:49:44で、宿題は?
0383デフォルトの名無しさん
2007/03/07(水) 16:41:430384デフォルトの名無しさん
2007/03/07(水) 22:12:52ちなみに答えは12+24+48=84になってしまいます。
24を足しているのがおかしいのです。
3周目のAND 01Hで0010Hと0001HをANDした結果Zフラグが立って
スキップにいけば問題解決なんですが、スキップに飛びません。
Aレジスタの中身を見てみるとちゃんと0000HなのですがZフラグが
立ちません。今みてみるとHフラグは立っていました。
なぜZフラグが立たないのでしょうか
0385デフォルトの名無しさん
2007/03/07(水) 22:46:270386デフォルトの名無しさん
2007/03/07(水) 23:28:04CPU壊れてるんじゃね?
0387デフォルトの名無しさん
2007/03/07(水) 23:28:19Z80?
>>385
A=0で立たないフラグはもはやゼロフラグじゃないだろw
0388デフォルトの名無しさん
2007/03/08(木) 04:19:400389デフォルトの名無しさん
2007/03/08(木) 05:23:49アセンブルしたコードを貼って味噌。HEX出力でもバイナリダンプでもいいから。
#つーか、なんでjr使わないでjp使っているんだろ。
0390デフォルトの名無しさん
2007/03/08(木) 07:25:450391デフォルトの名無しさん
2007/03/08(木) 07:34:53#8080は互換性あるけど、8085は(8085で追加されたインストラクションが)互換性ないし。
0392390
2007/03/08(木) 07:59:33lstをそのまま貼ると崩れちゃうんで、スペースを全角に直して貼ってみます。
ORG 8000H
8000 AF XOR A
8001 0606 LD B,06H
8003 0E0A LD C,0AH
8005 57 LOOP: LD D,A
8006 79 LD A,C
8007 E601 AND 01H
8009 CA0F80 JP Z,SKIP
800C 7A LD A,D
800D 80 ADD A,B
800E 57 LD D,A
800F CB20 SKIP: SLA B
8011 CB29 SRA C
8013 C20580 JP NZ,LOOP
8016 7A LD A,D
8017 320082 LD (8200H),A
801A C30000 JP 0000H
801D END
0393390
2007/03/08(木) 08:22:45LOOP:時点での
D C B 足し算
1回目 0 1010 000110 足さない
2 0 0101 001100 足す
3 0Ch 0010 011000 足さない
4 0Ch 0001 110000 足す
足したあと、Cregを右シフトで0になるから
3Ch 0000 1100000
こういう展開を期待してるわけですよね?
0394デフォルトの名無しさん
2007/03/08(木) 08:39:560395デフォルトの名無しさん
2007/03/09(金) 04:37:18判らないけど、同じ8bitの掛け算で8085のclibに使われてるコードを貼っときますね。
レジスタ使い・8回loopするとかが違ってるけど、こちらはサイズ優先の工夫がされてるみたい。
MULAB: ; A*B-->A(8bit)
00F0 E5 push hl
00F1 67 mov h,a
00F2 AF xra a
00F3 0E08 mvi c,8
00F5 87 add a
00F6 29 dad h
00F7 D2FB00 jnc 00FB
00FA 80 inr b
00FB 0D dcr c
00FC C2F500 jnz 00F5
00FF E1 pop hl
0100 C9 ret
0396デフォルトの名無しさん
2007/03/09(金) 22:18:38やりたいことは>>393 さんの通りです。
正直どう修正すればいいのか分からずじまいでした。
手直しまでしてもらいましてありがとうございます!
今から参考にして直してみます
0397デフォルトの名無しさん
2007/03/10(土) 06:45:460398デフォルトの名無しさん
2007/03/11(日) 15:19:35たとえば、論理加算で、
ADDL GR1,=100 これはできますよね?
ADDL GR1,=#FFFF こんなように16進数を使うことはできるんですか?
0399デフォルトの名無しさん
2007/03/11(日) 15:28:55俺様がやってることが世界の全てとでも思ってるのか?w
0400デフォルトの名無しさん
2007/03/11(日) 17:29:57頭のゼロで「数値リテラルであってラベルでない」とアセンブラが認識できるから。
cみたいに0xで始まる書き方も許せばいいのにと個人的には思うけど、あまり見かけません。
0401デフォルトの名無しさん
2007/03/11(日) 17:39:43>0xで始まる書き方も許せばいい
これは逆に、c で0Ahや10bという書き方を許さないのが疑問なんだが。
0402デフォルトの名無しさん
2007/03/11(日) 17:44:04自分の身近な物が世の中の全てだと思う奴のことを「セカイ系」って言うらしいけど
最近確かにこういうセカイ系タイプって増えてるな。
リテラルの書き方なんてアセのメーカーによってマチマチじゃん。
マイコン系ならcでもビットワイズのリテラルを許すものもあるし。
0403デフォルトの名無しさん
2007/03/11(日) 17:55:43ここでいってるcはANSIだろう。
asmはいろいろだが。
0404デフォルトの名無しさん
2007/03/11(日) 18:15:52まあ、エスパーの漏れ様が答えてやると、
仕 様 く ら い 読 め
ってことだな。
2.5 機械語命令
adr
アドレスは,10 進定数,16 進定数,アドレス定数又はリテラルで指定する。
リテラルは,一つの10 進定数,16 進定数又は文字定数の前に等号(=)を付けて
記述する。CASL�Uは,等号の後の定数をオペランドとするDC 命令を生成し,そ
のアドレスをadr の値とする。
0405デフォルトの名無しさん
2007/03/11(日) 23:24:050406デフォルトの名無しさん
2007/03/11(日) 23:29:040407デフォルトの名無しさん
2007/03/12(月) 00:53:050408デフォルトの名無しさん
2007/03/13(火) 19:20:14ソースとデスティネーションが右左のどっちか、
リテラルとメモリのラベル、オフセットなどの区別の仕方はどうなってるのか、
そういうのは必ずマニュアルを見て確認してるぞ。
たまにアセンブラのマニュアル忘れてくれる営業さんがいるんだが、
インラインアセンブラとか使うときにどーしろっつーんじゃい。
アセンブラを勉強するなら、環境によってみんな文法が違うってことをまずはじめに覚えろ。
それができたら質問してよろしい。
簡単に言うと、「まず、どのCPUを使うのかを書け!わからなかったらアセンブラに手を出すな!!」
0409デフォルトの名無しさん
2007/03/14(水) 05:12:060410デフォルトの名無しさん
2007/03/14(水) 08:13:35dest/src の順番すらアセンブラによってまちまちだし。
0411デフォルトの名無しさん
2007/03/14(水) 14:46:230412デフォルトの名無しさん
2007/03/14(水) 15:22:060413デフォルトの名無しさん
2007/03/14(水) 18:21:20個人的にはソース・デストの順が好き。
0414デフォルトの名無しさん
2007/03/15(木) 04:40:28その後マイコンの時代になると→がメジャーになってきたね。
0415デフォルトの名無しさん
2007/03/15(木) 07:58:030416デフォルトの名無しさん
2007/03/15(木) 10:18:39store reg, mem
の類は同じニモニックセットでも矢印の向きが変わる典型って訳だな。
0417デフォルトの名無しさん
2007/03/16(金) 18:43:47左レジスタの方が感覚に合うなあ
0418デフォルトの名無しさん
2007/03/16(金) 20:31:120419デフォルトの名無しさん
2007/03/17(土) 22:15:52「右」「左」が区別できる奴なら普通わかると思うが。
一般的な言い回しとは思わないけど。
0420デフォルトの名無しさん
2007/03/17(土) 22:18:58左srcとか左destなら話も分かるが、左レジスタって一体何だよw
0421デフォルトの名無しさん
2007/03/17(土) 23:06:57/::::i::::、:::ヽ、:::::\:ヽ:\::::::ヽ:::、::ヽ::、:',
/::i|::l::ト、ヽ::、:::ヽ:、::::::\::ヽ::::l::::ヽ::i:::i:::!
/:/:!:::!:|::ヽ:\ヽ::::、:\::::ヽ:::ヽ!::::::i::|:::!::!
!ハ::|::::i::l:|心、:ヽ::\:ヽ_\、\:::ヽ:::|!::|:|i 駄目だ こいつ・・・
i、:!:|:、N{、ヒjヽゝ\ヾイ ヒj >、ヽi:、|!:|:l
ヽ:!::トヽ ̄ l! ` ` ̄´ |::l::|:|j:,!:! 早くなんとかしないと・・・
ト、::! u j |::/lj:::!リ
ヾ、 丶 - u リイ:|リ
リヽ ‐、ー- 、_ /イ:::i
rー'"ト:l゙、  ̄ ./ , |::!
/ ヘ ヾ ヽ、 _,. ' / |:
0422デフォルトの名無しさん
2007/03/18(日) 07:01:49たぶんCASLだろうけど、あれは気持ち悪い。
左src右destが一番美しい。
0423デフォルトの名無しさん
2007/03/18(日) 14:05:44思考の柔軟性がなさそうだから、アセンブラなんて変態的なものは
あきらめることをお勧めする。
0424デフォルトの名無しさん
2007/03/18(日) 14:39:45持ってないのはESP能力ねw
0425デフォルトの名無しさん
2007/03/18(日) 21:49:16○ 持ってないのは常識 + 話の流れを読む力
まあ、日本語が理解できないようだから ESP に頼る必要があるのかもしれないけど。 (w
0426デフォルトの名無しさん
2007/03/19(月) 01:04:42特定の石が腐ってるだけ。
なんでそれがわからない?
0427デフォルトの名無しさん
2007/03/19(月) 07:37:010428デフォルトの名無しさん
2007/03/19(月) 07:46:40mov 系の命令は 移動方向は同じ
mov src,dst と mov dst,src が混在する事はあまりない(絶対にないとはいえないが)
LD/ST系は、src/dstではなく、レジスタ/アドレッシング が固定。多くは左にレジスタ、右にアドレッシング
レジスタが1個や2個しかない場合は、
LDA STA のように命令にレジスタが含まれるものもある
ただ mov系とLD/ST系が混在する場合はありえるかも
0429デフォルトの名無しさん
2007/03/19(月) 07:51:37それに418が mov系の話と勘違いしてツッコミ中
0430デフォルトの名無しさん
2007/03/19(月) 07:57:16石が腐っているのではなく、適切に利用出来ないだけだろ。
PICでキャリーフラグが無くて辛かったり
高性能なDSPなのにインデックス修飾が出来なくて辛かったり、
そりゃコレくらい用意しとけよと思う事は山のようにあるけどな
0431デフォルトの名無しさん
2007/03/22(木) 11:55:09「PCエンジンのCPUの方がメガドライブの奴より高速だとゲーム製作会社の人間が言っていた。
だからCPUの速度も性能も6502(21MHz相当) > 68000(8MHz)。68000は8ビットCPUより遅いゴミ。」
と言い張る人がいるんですがこれって本当なんですか?
0432デフォルトの名無しさん
2007/03/22(木) 12:12:17クロックが違うんだから、
ゲームに使う話なら高速な方がありがたいだろう
でも68000は内部32bitだから、使い易さは段違い。
0433デフォルトの名無しさん
2007/03/22(木) 13:27:110434デフォルトの名無しさん
2007/03/22(木) 14:59:07その理屈で行くと、8086(クロック5MHz)も当然ゴミなんだろうな。
0435デフォルトの名無しさん
2007/03/25(日) 03:16:16それ自体で良い悪いを語ることはナンセンスでしょ。3MHzの8085でもいまだに現役ですよ。
0436デフォルトの名無しさん
2007/03/25(日) 03:32:540437デフォルトの名無しさん
2007/03/25(日) 05:38:330438デフォルトの名無しさん
2007/03/25(日) 22:08:24だったら(昔の)ゲームとか単純な制御には68kなんかより圧倒的に有利だろうね。
0439デフォルトの名無しさん
2007/03/25(日) 22:26:40ハーバードアーキテクチャがどういうものか調べてこいよ。
0440デフォルトの名無しさん
2007/03/25(日) 22:45:19なんでもいいけどどうせ反論するなら具体的にやってみたら?
いや、できないなら無理することないよw
ちなみに俺は仕事で8052互換コアのコード書いてるから
ハーバードアーキテクチャの利点も欠点もある程度分かってるつもりだけどね。
0441デフォルトの名無しさん
2007/03/26(月) 00:20:130442デフォルトの名無しさん
2007/03/26(月) 03:32:59頑張って電波出してくれ>>438 >>440
0443デフォルトの名無しさん
2007/03/26(月) 11:58:41まさかな。
0444デフォルトの名無しさん
2007/03/27(火) 11:05:250445デフォルトの名無しさん
2007/03/27(火) 11:24:090446デフォルトの名無しさん
2007/03/27(火) 12:07:55シンプルな命令体形でパイプライン処理を導入したおかげだろう
ただ、Accが1個しかなく(まあゼロページ全部がレジスタとも言えるが)
AddWithCF しか無い等、命令数は他のCPUより若干増え気味だが
ソコに色々工夫の余地があった
0447デフォルトの名無しさん
2007/03/27(火) 12:26:594ビットマイコンとか PICのように命令ビット幅がデータビット幅より大きいものは、こうするしかない事情もある
8051のように両方同じビットサイズのものは逆に珍しい
DSPの多くで採用されるのは、速度的な問題から
DSPは積和を高速に実行する為、
命令と掛算のソース2つで3つに別けたり
積和は繰り返すので、
命令そのものはキャッシュに入るとして acc += 命令*データが出来るようにしたものが多い
こうする事で、2倍の速度が得られるわけだ
0448デフォルトの名無しさん
2007/03/27(火) 12:39:04仮定法という言葉を知らないにしても、小学生未満の読解力だなw
0449デフォルトの名無しさん
2007/03/27(火) 13:48:230450デフォルトの名無しさん
2007/03/30(金) 18:28:58どこに仮定法の要素が有るんだw
0451デフォルトの名無しさん
2007/04/11(水) 00:25:42CMP DWORD PTR DS:[EAX-C],1
の意味がわかりません。
EAXからCを引く???
0452デフォルトの名無しさん
2007/04/11(水) 08:13:19EAXって名前からすると IA32だとすると
[EAX-0Ch] を省略表示したんだろうなと、
0453デフォルトの名無しさん
2007/04/11(水) 19:43:27EAX-0Chって結局どこのアドレス指すんでしょうか?
+ならまだしも-ってどこになるんだろう
0454デフォルトの名無しさん
2007/04/11(水) 19:47:270455デフォルトの名無しさん
2007/04/11(水) 20:43:48別にマイナスでもいいじゃん。
最適化のため先にポインタをインクリメントしているかもしれないし
スタック上の変数かもしれないし。
0456デフォルトの名無しさん
2007/04/11(水) 21:19:49C言語なら
eflags.zero_flag = (*(unsigned long*)(eax-0xc) == 1)
0457デフォルトの名無しさん
2007/04/12(木) 08:42:59おいおい。
0458デフォルトの名無しさん
2007/04/12(木) 12:18:49PUSH
RET
0459デフォルトの名無しさん
2007/04/13(金) 00:30:171語8ビットとして、1の補数の求め方がわかりません。
00110101なら11001010を作りたいのです。プロセッサの演算命令は
DEC,INC,SHL,SHR.ROTL,ROTR,ADD,SUBのみ使えます。
おながいします。
0460デフォルトの名無しさん
2007/04/13(金) 00:36:03255から引け。
0461デフォルトの名無しさん
2007/04/13(金) 00:41:15本人マジだったら悪いけど
0462デフォルトの名無しさん
2007/04/13(金) 04:30:550463デフォルトの名無しさん
2007/04/13(金) 06:02:290464デフォルトの名無しさん
2007/04/16(月) 22:38:28「9000H番地の1バイトデータをa、9001H番地の1バイトデータをbとしたとき、
a×bを16ビットで求め、下位1バイトを9002H番地、上位1バイトを9003H番地に
格納するプログラミングを作りなさい。またこのプログラムの実行時間を計算しなさい。」
という問題がわかりません。
どなたか教えて頂けないでしょうか?
0465デフォルトの名無しさん
2007/04/17(火) 00:57:54だれかZ80マスターいませんかー?
0466デフォルトの名無しさん
2007/04/17(火) 01:03:330467デフォルトの名無しさん
2007/04/17(火) 01:12:46何でもいいから適当な例を一つか二つほど晒してくれ。
8085アセンブリ言語の文法知らんから始まらない。
乗算自体は難しいことはないんだが。
0468デフォルトの名無しさん
2007/04/17(火) 01:23:22■ このスレッドは過去ログ倉庫に格納されています