トップページ⇒tech
1001コメント328KB

アセンブラの宿題質問スレ

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん2006/10/18(水) 00:04:05
アセンブラの宿題ができないときに、
アセンブラ好きのお兄さんに尋ねるスレ。

・必ずCPUの名前を書くこと!
・情報を小出しにしない。書ける情報は全て書いた方が得だよ。
0369デフォルトの名無しさん2007/03/02(金) 20:04:42
検索しろよ
0370デフォルトの名無しさん2007/03/03(土) 02:29:30
>>368
オペコードマップ
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
どっちもオペコードマップになっている希ガスw
ってことで、ここからオペコードマップにも命令リストにもアクセスできる。
ttp://home.earthlink.net/~tdickens/68hc11/docs_references.html
0372デフォルトの名無しさん2007/03/03(土) 13:34:21
>>370
>>371
ありがとうございます、今週は進むと思います
0373デフォルトの名無しさん2007/03/04(日) 23:58:34
>>372です
今週は少し進みましたが、、、、、
逆アセンブラソフトほしいn

こういうソフト見つけましたが使えますかねー?
http://down.upsdn.net/html/1/1.html
0374デフォルトの名無しさん2007/03/05(月) 10:51:16
ウザ
0375デフォルトの名無しさん2007/03/05(月) 10:52:01
勉強が目的なのに楽ばかり考えてどうすんだ?
逆アスくらい自力でできるだろうよ。

って、元辿って読んだらリバースエンジニアリング目的かよ。
0376デフォルトの名無しさん2007/03/05(月) 10:56:37
最終的には、俺たちにチューンしてくれと泣きついてな
0377デフォルトの名無しさん2007/03/07(水) 03:41:12
6×10の計算なんですがどうしても答えがでません。
修正お願いします。。
(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:51
実行してないけど、多分こうじゃない?
LOOP: 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:59
素直にCをB回足せばいいのに
0380デフォルトの名無しさん2007/03/07(水) 06:17:37
↑馬鹿
0381デフォルトの名無しさん2007/03/07(水) 11:38:13
先生からもらった関数が動かないんですが・・・
0382デフォルトの名無しさん2007/03/07(水) 11:49:44
>>381
で、宿題は?
0383デフォルトの名無しさん2007/03/07(水) 16:41:43
>>380 だって6×8ならそのほうがクロック少ないじゃん(w
0384デフォルトの名無しさん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:27
そりゃぁあんた、ZフラグはANDなんかじゃ勃たないだろよ。
0386デフォルトの名無しさん2007/03/07(水) 23:28:04
>>384
CPU壊れてるんじゃね?
0387デフォルトの名無しさん2007/03/07(水) 23:28:19
そもそも何のニーモニックなのか最初にはっきり言えよw
Z80?

>>385
A=0で立たないフラグはもはやゼロフラグじゃないだろw
0388デフォルトの名無しさん2007/03/08(木) 04:19:40
ANDなんかじゃダメなんだ。もっと奮い立つようなものじゃないとw
0389デフォルトの名無しさん2007/03/08(木) 05:23:49
>>384
アセンブルしたコードを貼って味噌。HEX出力でもバイナリダンプでもいいから。
#つーか、なんでjr使わないでjp使っているんだろ。
0390デフォルトの名無しさん2007/03/08(木) 07:25:45
8085じゃないの?
0391デフォルトの名無しさん2007/03/08(木) 07:34:53
Zilogニモニックで8080/8085はないだろうよ。
#8080は互換性あるけど、8085は(8085で追加されたインストラクションが)互換性ないし。
03923902007/03/08(木) 07:59:33
ニモニックはZ80らしいですね。Hフラグってハーフキャリーフラグのことかな?
lstをそのまま貼ると崩れちゃうんで、スペースを全角に直して貼ってみます。
         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
03933902007/03/08(木) 08:22:45
論理の流れはよさげですけどねえ・・・
LOOP:時点での
     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:56
元質以外が貼って何の意味があるんだよ。
0395デフォルトの名無しさん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:46
判ったら結果書いてね♪
0398デフォルトの名無しさん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
16進のリテラルは0ABCDhのように頭ゼロ、末尾にhをつけて書くことが多いですよ。
頭のゼロで「数値リテラルであってラベルでない」とアセンブラが認識できるから。
cみたいに0xで始まる書き方も許せばいいのにと個人的には思うけど、あまり見かけません。
0401デフォルトの名無しさん2007/03/11(日) 17:39:43
>>400
>0xで始まる書き方も許せばいい
これは逆に、c で0Ahや10bという書き方を許さないのが疑問なんだが。
0402デフォルトの名無しさん2007/03/11(日) 17:44:04
だからアセにもcにいろいろあるんだよ。
自分の身近な物が世の中の全てだと思う奴のことを「セカイ系」って言うらしいけど
最近確かにこういうセカイ系タイプって増えてるな。

リテラルの書き方なんてアセのメーカーによってマチマチじゃん。
マイコン系ならcでもビットワイズのリテラルを許すものもあるし。
0403デフォルトの名無しさん2007/03/11(日) 17:55:43
>>402
ここでいってるcはANSIだろう。
asmはいろいろだが。
0404デフォルトの名無しさん2007/03/11(日) 18:15:52
>>398
まあ、エスパーの漏れ様が答えてやると、
 仕 様 く ら い 読 め
ってことだな。

2.5 機械語命令
adr
アドレスは,10 進定数,16 進定数,アドレス定数又はリテラルで指定する。
リテラルは,一つの10 進定数,16 進定数又は文字定数の前に等号(=)を付けて
記述する。CASL�Uは,等号の後の定数をオペランドとするDC 命令を生成し,そ
のアドレスをadr の値とする。
0405デフォルトの名無しさん2007/03/11(日) 23:24:05
まあ、アセンブラ=CASLとかアセンブラ=x86とか思ってる馬鹿には来て欲しくないね。
0406デフォルトの名無しさん2007/03/11(日) 23:29:04
アセンブラ=6809
0407デフォルトの名無しさん2007/03/12(月) 00:53:05
アセンブラ=プライスレス
0408デフォルトの名無しさん2007/03/13(火) 19:20:14
俺なんか、[]つけるのか#つけるのかHつけるのか0xつけるのか$つけるのか
ソースとデスティネーションが右左のどっちか、
リテラルとメモリのラベル、オフセットなどの区別の仕方はどうなってるのか、
そういうのは必ずマニュアルを見て確認してるぞ。
たまにアセンブラのマニュアル忘れてくれる営業さんがいるんだが、
インラインアセンブラとか使うときにどーしろっつーんじゃい。

アセンブラを勉強するなら、環境によってみんな文法が違うってことをまずはじめに覚えろ。
それができたら質問してよろしい。
簡単に言うと、「まず、どのCPUを使うのかを書け!わからなかったらアセンブラに手を出すな!!」
0409デフォルトの名無しさん2007/03/14(水) 05:12:06
>>396はどうなったのかな?
0410デフォルトの名無しさん2007/03/14(水) 08:13:35
アセンブリ言語の標準規格って全然ないのかな。
dest/src の順番すらアセンブラによってまちまちだし。
0411デフォルトの名無しさん2007/03/14(水) 14:46:23
アセンブラどころか命令によってまちまちだったりするぞ
0412デフォルトの名無しさん2007/03/14(水) 15:22:06
まま、それがASMのいいところ・・・
0413デフォルトの名無しさん2007/03/14(水) 18:21:20
へたに標準規格作られてもさぁ、gas使う時みたいな違和感を感じるだけなんじゃないかね?
個人的にはソース・デストの順が好き。
0414デフォルトの名無しさん2007/03/15(木) 04:40:28
IBMが←だったので、当時の互換機はそれを真似したが、
その後マイコンの時代になると→がメジャーになってきたね。
0415デフォルトの名無しさん2007/03/15(木) 07:58:03
mov 系と LD/ST系があってだな
0416デフォルトの名無しさん2007/03/15(木) 10:18:39
load reg, mem
store reg, mem
の類は同じニモニックセットでも矢印の向きが変わる典型って訳だな。
0417デフォルトの名無しさん2007/03/16(金) 18:43:47
レジスタとアドレスを要求するOPでは
左レジスタの方が感覚に合うなあ
0418デフォルトの名無しさん2007/03/16(金) 20:31:12
左レジスタって意味わかんないだろw
0419デフォルトの名無しさん2007/03/17(土) 22:15:52
お前だけだろ。

「右」「左」が区別できる奴なら普通わかると思うが。

一般的な言い回しとは思わないけど。
0420デフォルトの名無しさん2007/03/17(土) 22:18:58
そんなことないでしょ。分かるのは恐らくエスパだけ。もちろんこれ逆説的表現ね。
左srcとか左destなら話も分かるが、左レジスタって一体何だよw
0421デフォルトの名無しさん2007/03/17(土) 23:06:57
>>419
    /::::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
>>418=>>420=>422
思考の柔軟性がなさそうだから、アセンブラなんて変態的なものは
あきらめることをお勧めする。
0424デフォルトの名無しさん2007/03/18(日) 14:39:45
いや僭越ながら「思考の柔軟性」とやらは持ってるつもり。
持ってないのはESP能力ねw
0425デフォルトの名無しさん2007/03/18(日) 21:49:16
× 持ってないのはESP能力ね
○ 持ってないのは常識 + 話の流れを読む力

まあ、日本語が理解できないようだから ESP に頼る必要があるのかもしれないけど。 (w
0426デフォルトの名無しさん2007/03/19(月) 01:04:42
アセンブラが変態なのではなく
特定の石が腐ってるだけ。

なんでそれがわからない?
0427デフォルトの名無しさん2007/03/19(月) 07:37:01
src/dstの並び順はgasでもアーキテクチャによってまちまちですよ。
0428デフォルトの名無しさん2007/03/19(月) 07:46:40
話をまとめると、
mov 系の命令は 移動方向は同じ
mov src,dst と mov dst,src が混在する事はあまりない(絶対にないとはいえないが)

LD/ST系は、src/dstではなく、レジスタ/アドレッシング が固定。多くは左にレジスタ、右にアドレッシング
レジスタが1個や2個しかない場合は、
LDA STA のように命令にレジスタが含まれるものもある


ただ mov系とLD/ST系が混在する場合はありえるかも
0429デフォルトの名無しさん2007/03/19(月) 07:51:37
という話に  >>415-416でなってる所に、 417がLD/ST型で左にレジスタ書くスタイルが好きだと発言
それに418が mov系の話と勘違いしてツッコミ中
0430デフォルトの名無しさん2007/03/19(月) 07:57:16
>>426
石が腐っているのではなく、適切に利用出来ないだけだろ。
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
そりゃクロックあたりの命令実行数でも 6502が高いのに
クロックが違うんだから、
ゲームに使う話なら高速な方がありがたいだろう

でも68000は内部32bitだから、使い易さは段違い。
0433デフォルトの名無しさん2007/03/22(木) 13:27:11
レゲー板の論争はレゲー板で処理しろよ。
0434デフォルトの名無しさん2007/03/22(木) 14:59:07
>>431
その理屈で行くと、8086(クロック5MHz)も当然ゴミなんだろうな。
0435デフォルトの名無しさん2007/03/25(日) 03:16:16
石とかクロックなんて、「こういうソフトを作る」と決めてからそれに合わせて選ぶだけだから、
それ自体で良い悪いを語ることはナンセンスでしょ。3MHzの8085でもいまだに現役ですよ。
0436デフォルトの名無しさん2007/03/25(日) 03:32:54
え?まだ生産終了してなかったの?
0437デフォルトの名無しさん2007/03/25(日) 05:38:33
箱作るたびに、アキバで買い漁ってます(w
0438デフォルトの名無しさん2007/03/25(日) 22:08:24
6502ってハーバードアーキテクチャ的な奴だっけ?
だったら(昔の)ゲームとか単純な制御には68kなんかより圧倒的に有利だろうね。
0439デフォルトの名無しさん2007/03/25(日) 22:26:40
知ったか乙。

ハーバードアーキテクチャがどういうものか調べてこいよ。
0440デフォルトの名無しさん2007/03/25(日) 22:45:19
>>439
なんでもいいけどどうせ反論するなら具体的にやってみたら?
いや、できないなら無理することないよw

ちなみに俺は仕事で8052互換コアのコード書いてるから
ハーバードアーキテクチャの利点も欠点もある程度分かってるつもりだけどね。
0441デフォルトの名無しさん2007/03/26(月) 00:20:13
御託はいいから、6502 のどの辺がハーバードアーキテクチャ的か語ってくれよ。(w
0442デフォルトの名無しさん2007/03/26(月) 03:32:59
俺も聞いてみたいな。

頑張って電波出してくれ>>438 >>440
0443デフォルトの名無しさん2007/03/26(月) 11:58:41
ゼロページ、いやいやメモリマップドI/Oの事だったり・・・
まさかな。
0444デフォルトの名無しさん2007/03/27(火) 11:05:25
6502と8052を間違えてるんじゃね?
0445デフォルトの名無しさん2007/03/27(火) 11:24:09
それだっー!
0446デフォルトの名無しさん2007/03/27(火) 12:07:55
6502は当時多くの命令を2クロックサイクルで1命令を実行出来るというクロックあたりの実行性能で他を凌駕していた。
シンプルな命令体形でパイプライン処理を導入したおかげだろう
ただ、Accが1個しかなく(まあゼロページ全部がレジスタとも言えるが)
AddWithCF しか無い等、命令数は他のCPUより若干増え気味だが
ソコに色々工夫の余地があった
0447デフォルトの名無しさん2007/03/27(火) 12:26:59
ハーバードアーキテクチャは、1チップマイコンでよく利用される
4ビットマイコンとか PICのように命令ビット幅がデータビット幅より大きいものは、こうするしかない事情もある
8051のように両方同じビットサイズのものは逆に珍しい

DSPの多くで採用されるのは、速度的な問題から
DSPは積和を高速に実行する為、
命令と掛算のソース2つで3つに別けたり
積和は繰り返すので、
命令そのものはキャッシュに入るとして acc += 命令*データが出来るようにしたものが多い
こうする事で、2倍の速度が得られるわけだ
0448デフォルトの名無しさん2007/03/27(火) 12:39:04
>>444-445
仮定法という言葉を知らないにしても、小学生未満の読解力だなw
0449デフォルトの名無しさん2007/03/27(火) 13:48:23
ディスレキシア?
0450デフォルトの名無しさん2007/03/30(金) 18:28:58
>>448
どこに仮定法の要素が有るんだw
0451デフォルトの名無しさん2007/04/11(水) 00:25:42
今日はじめたばかりでまださっぱり意味がわかりませんが
CMP DWORD PTR DS:[EAX-C],1

の意味がわかりません。

EAXからCを引く???

0452デフォルトの名無しさん2007/04/11(水) 08:13:19
俺も判らん。 何のCPUで、どこで見た結果?
EAXって名前からすると IA32だとすると

 [EAX-0Ch] を省略表示したんだろうなと、 
0453デフォルトの名無しさん2007/04/11(水) 19:43:27
Intel Windowsアプリです。

EAX-0Chって結局どこのアドレス指すんでしょうか?

+ならまだしも-ってどこになるんだろう
0454デフォルトの名無しさん2007/04/11(水) 19:47:27
EAXの値から12引いた数値のアドレス。
0455デフォルトの名無しさん2007/04/11(水) 20:43:48
>>453
別にマイナスでもいいじゃん。
最適化のため先にポインタをインクリメントしているかもしれないし
スタック上の変数かもしれないし。
0456デフォルトの名無しさん2007/04/11(水) 21:19:49
>>451
C言語なら
eflags.zero_flag = (*(unsigned long*)(eax-0xc) == 1)
0457デフォルトの名無しさん2007/04/12(木) 08:42:59
>>456
おいおい。
0458デフォルトの名無しさん2007/04/12(木) 12:18:49
PUSH
PUSH
RET
0459デフォルトの名無しさん2007/04/13(金) 00:30:17
質問です。
1語8ビットとして、1の補数の求め方がわかりません。
00110101なら11001010を作りたいのです。プロセッサの演算命令は
DEC,INC,SHL,SHR.ROTL,ROTR,ADD,SUBのみ使えます。
おながいします。
0460デフォルトの名無しさん2007/04/13(金) 00:36:03
>>459
255から引け。
0461デフォルトの名無しさん2007/04/13(金) 00:41:15
なんか痛い質問だなw
本人マジだったら悪いけど
0462デフォルトの名無しさん2007/04/13(金) 04:30:55
ANDもORもXORも無いの? どんな石なんだろ?
0463デフォルトの名無しさん2007/04/13(金) 06:02:29
4bitマイコンであるよ subr #n っていう 定数-acc の命令で not の代用させるのは
0464デフォルトの名無しさん2007/04/16(月) 22:38:28
質問失礼します。最近8085アセンブリ言語プログラミングを習い始めた者なのですが、
「9000H番地の1バイトデータをa、9001H番地の1バイトデータをbとしたとき、
a×bを16ビットで求め、下位1バイトを9002H番地、上位1バイトを9003H番地に
格納するプログラミングを作りなさい。またこのプログラムの実行時間を計算しなさい。」
という問題がわかりません。
どなたか教えて頂けないでしょうか?

0465デフォルトの名無しさん2007/04/17(火) 00:57:54
たぶんね、大昔のi8085を知っている人は少ないと思う。

だれかZ80マスターいませんかー?
0466デフォルトの名無しさん2007/04/17(火) 01:03:33
昔は使いこなせてたけど、いまはもうだいぶ忘れちまったよ。>Z80
0467デフォルトの名無しさん2007/04/17(火) 01:12:46
>>464
何でもいいから適当な例を一つか二つほど晒してくれ。
8085アセンブリ言語の文法知らんから始まらない。

乗算自体は難しいことはないんだが。
0468デフォルトの名無しさん2007/04/17(火) 01:23:22
つーか8085てシフト命令ないのかよ...
■ このスレッドは過去ログ倉庫に格納されています