トップページ⇒tech
62コメント13KB

アセンブラおせーて!!!!!!!

■ このスレッドは過去ログ倉庫に格納されています
0001春夏秋冬NGNG
5の10倍を0200番地にいれるプログラム
教えて
0012デフォルトの名無しさんNGNG
00139NGNG
あ、そだね。>10 レジスタの保存。

てゆーか、それ1命令で書けるね。
PUSH A,B
とか
PUSH D
でもいいけど。

宿題には見えないな。ネタスレ?
0014春夏秋冬NGNG
ポケコン。答えが32Hになるらしい・・。
0015デフォルトの名無しさんNGNG
MOV AX,DATA1
ADD AX,5
MOV DATA2,AX
0016デフォルトの名無しさんNGNG
アセンブラがでてから便利になったよね〜
この便利さを知ってしまったら、もう機械語にはもどれないよ。
0017春夏秋冬NGNG
ADDとかCP、JP、LDとかでやるやつ。

例えば4+7を計算し0140番地へ格納するのをつくれだったら
10 LD A、04H
20 LD B、07H
30 ADD A,B
40 LD (0140H)、A
50 RET

みたいなお願いーー♪
0018デフォルトの名無しさんNGNG
>>17
学校の課題なんだろ。
しかも、おまえ、ぜんぜんわかってねーだろ。
0019順風満帆NGNG
>>17
Z80だから掛け算命令がないので
わかりません、と。
いうことですよね?(藁
0020デフォルトの名無しさんNGNG
やっぱりポイントはシフトして加算なんですかね。
だったら>7参照かな。
汎用性はないけど「理屈を知れ」ってことだけならあれでいいのかも。
「5を10回足す」なんて書いたら板の住人に笑われるかな?
0021 NGNG
F0 0F
0022デフォルトの名無しさんNGNG
Z80については知らないので(使えるレジスタの種類やサイズ)原理だけ。

   0101 (=5)
×) 1010 (=10)
−−−−−−−
   0000
  0101  (*A
 0000
0101    (*B
−−−−−−−−−
 110010

2進数の乗算は上のようになります。
たいしたもんじゃないですが。
で、注目して欲しいのは*Aと*Bのところ。
もとの「5」のビットパターンが(左にシフトして)そのまま出てます。
“元のパターンをシフトしたものか0しか出て来ない”ということで
2進の乗算は非常に単純です。

ということで、原理的には
5を左に1回シフトしたものと3回シフトしたものを
足しあわせればよいという事になります。
0023デフォルトの名無しさんNGNG
左に1ビットシフトしたやつと、左に3ビットシフトしたやつを足せこれ基本
0024デフォルトの名無しさんNGNG
>>22
すごいわかりやすい。
0025デフォルトの名無しさんNGNG
0から25までの数の「10倍配列」を、あらかじめ作っておく。
0026デフォルトの名無しさんNGNG
>>22
おお。あんた賢いな。勉強になたよ。
0027デフォルトの名無しさんNGNG
10=2^3 + 2^1だから?
0028デフォルトの名無しさんNGNG
LDI R16,5
LSL R16
MOV R17,R16
LSL R16
LSL R16
ADD R16,R17
0029デフォルトの名無しさんNGNG
単発の質問でスレを立てないで下さい

アセンブラ… (・∀・)イイ!
http://pc.2ch.net/test/read.cgi/tech/1002267809/
アセンブラを知らない名無しさん
http://pc.2ch.net/test/read.cgi/tech/987869361/
***すれ立てるまでもない質問はここで 第6刷***
http://pc.2ch.net/test/read.cgi/tech/1004183881/
宿題見てやるよ
http://pc.2ch.net/test/read.cgi/tech/1003838158/
0030デフォルトの名無しさんNGNG
>>26 賢いつーか、それはセオリーだYO!
0031デフォルトの名無しさんNGNG
説明の仕方が上手いって言いたいんじゃないの?
0032別のアセンブラスレが成長して欲しいのでsageNGNG
>>22
うちの先生になってくれるか,22さんのアセンブラ本欲しい。
0033デフォルトの名無しさんNGNG
>>32
はげどう。でも別スレはむずかしいにゃ。
降臨きぼんぬ。>>22師。
003422 ◆Esv3Kvbs NGNG
単なるアマチュアです。
0035春夏秋冬NGNG
んーだめだ。
なぜ32になるんだ。
2進数命令でZ80はうごかないなぁ・・。むずい
0036混じれ酢NGNG
MOV $0200, 50
003735NGNG
あ、Z80はMOVじゃなくてLDだったかな
0038デフォルトの名無しさんNGNG
IntelニモニックだとMOV、ZilogニモニックだとLD。
0039デフォルトの名無しさんNGNG
2進数命令ってなんぞ?
0040デフォルトの名無しさんNGNG
LD A , 05
SLA A //2倍(0AH)
LD B , A
SLA A //4倍(14H)
SLA A //8倍(28H)
ADD A , B //10倍(32H)
LD (0200H) , A
0041デフォルトの名無しさんNGNG
掛算は 足算を繰り返せばいいんだけど
  回数を減らせという指示なら
   因数分解と2進分解する

10の2進分解は8+2だから3ビットシフトと1ビットシフトしたのを足す
10の因数分解は5*2 だから 5回足するのを2回足す
 5も2進分解して 4+1だから2ビットシフトと元の値を足してもいい

他に
 10=3*3+1だから3倍するのを繰り返して元を足してもいい

どれが一番速いかはCPUによる
 掛算が数サイクルなら直接掛算するし
 バレルシフタがあるなら2進分解が高速だし
 レジスタの使い勝手によって (1+4)*2 や 3*3+1 が一番高速だったり
0042デフォルトの名無しさんNGNG
ALUで掛け算するのが一番早いよ
って、すっごく単純なCPUの話か?
0043デフォルトの名無しさんNGNG
41に一票。
アセンブラで書く位ならサイクル表とか持ってるだろうし。
0044デフォルトの名無しさんNGNG
; >>1ほらよ。

ORG 0100H

LD A, 5*10
LD (,0200H),A
DI
HALT
JP 0100H

END
0045デフォルトの名無しさんNGNG
コンパイラで変数に定数をかけてる様な時
そんな解析してたりするのかな。
0046デフォルトの名無しさんNGNG
>45 C言語が使えるような環境のCPUは掛算命令持ってる事が殆どだからね

たとえば、86系は2のベキ乗ならシフトにするけど、それ以外なら掛算にしてしまうね
0047デフォルトの名無しさんNGNG
>>46
2のべきプラスマイナス1のときにシフト&足し算or引き算
に変換することもある。
0048デフォルトの名無しさんNGNG
http://hp.vector.co.jp/authors/VA000124/index.htm

ここってどうなんでしょ?
良くまとまってて解かり易いのですが
16bitCPU用なんです。
64bitに移行しようとしている今でも通用しますか?
アセンブリってそういうものですか?
0049デフォルトの名無しさんNGNG
>>48
あまり関係無いけど。
そのサイトにあるプログラマーになりたいってページに、
プログラムはパズル的な要素がありますって書いてあるけど、
具体的にどういうパズルの要素?
0050デフォルトの名無しさんNGNG
結果(仕様)から実装を逆算して
自分で考えるってところをパズルと喩えたんだろう

つーか>>49頭固すぎ
0051デフォルトの名無しさんNGNG
えー。。。
16bitでも32bitでも同じなのでしょうか?
0052デフォルトの名無しさんNGNG
違うんだから同じじゃないのは当然
 でも考え方は同じ
0053バカボンのパパNGNG
mov ax,05h
mov cx,0ah
mul cx
mov cs:[200],al

; これでいいのだ
0054 NGNG
; eax = 5
lea eax , DWORD PTR [eax * 8 + eax + eax]
mov DWORD PTR [200] , eax
0055名無しさんNGNG
>>49
クロスワードパズルみたいな要素。
0056名無しさんNGNG
CASLII覚えるのと、インテル系のニーモニック覚えるのと
どっちの方がいいですか?
0057デフォルトの名無しさんNGNG
>>56
後者
0058デフォルトの名無しさんNGNG
モノによっては、本当にパズルみたいなことするしね。
特殊な石だと、人間が命令を配置しなきゃいけないから、どのアドレスに
命令をはめ込むか悩む。

おまけに置くアドレスによって、どういう条件でジャンプできるかまで決まる。
例えば、

0-0-0 A5/1 0-0-5

という感じだったか。もう5,6年前にやったきり。
つーか、知ってる人間じゃないと全然こんな命令は雰囲気すらわからんよな(^^;
0059デフォルトの名無しさんNGNG
>>57
INTELのニーモニックも、IA-64で全然変わったからなぁ
0060デフォルトの名無しさんNGNG
CASLIIとインテルの違いを覚える。
0061sageNGNG
ld a,5
ld b,10
mulub a,b ;ED C1
ret
0062sageNGNG
;忘れてた・・
ld a,5
ld b,10
mulub a,b ;ED C1
ld (0200h),a
ret


■ このスレッドは過去ログ倉庫に格納されています