私が最初にメモリを取る階乗の数を見つけたいです。(intel8085)
編集:私は初心者です。アセンブリコードの書き方がわかりません。
擬似コード:
input n
fact = 1
loop:
..multiply fact by n
..decrement n
..test n
..jump if not zero to loop
output fact
そもそも、8085を使用する予定がある場合は、8085の書き方を学ぶほうがよいでしょう。特に古い8ビットマイクロプロセッサの場合、アセンブラは、正規のソフトウェアを取り込んでパッチを適用できるものではありません。
第二に、あなたは正確に数字に何を使っていますか?8085には8ビットバスがあり、レジスタを16ビットとして使用できます。16ビットの数値に制限されている場合は、9を表すことができないため、ルックアップテーブルを使用できます。とりあえず。
第三に、アルゴリズム的な方法でそれを行っている場合は、最初に乗算に使用しているものを調べたいと思うかもしれません。8085にはオンチップ乗算はありません。(私はかつて、8085にはないいくつかの機能を備えたZ80を使用した多倍長乗算と除算のコンテストで優勝しました。特に、代替レジスタバンクを使用していくつかの便利なことを行うことができました。)
このプログラムを使用すると、答えが24ビットを超えない8ビット数の階乗を見つけることができます。入力はアドレス位置に与えられ、#2070
出力は2つのメモリ位置に順番に与えられます#2074
#2073
#2072
LHLD 2070
ANI 00
MOV C,L
MOV D,A
MOV E,A
XCHG
DCR C
JZ EXPT
JM EXPT
MOV B,C
L1: DAD D
JNC BAK1
INR A
BAK1: DCR C
JNZ L1
L3: DCR B
JZ STOP
MOV C,B
XCHG
LXI H,0000
L2: DAD D
JNC BAK2
INR A
BAK2: DCR C
JNZ L2
JMP L3
EXPT: MVI A,01
STA 2072
JMP END
STOP: SHLD 2072
STA 2074
END: HLT
Intel 8085プロセッサを使用して、8ビットの数値(この場合は5)を使用して、次のように記述できます。
mvi b,05
mov c,b
dcr b
l1: mov d,b
mvi a,00
l2: add c
dcr d
jnz l2
mov c,a
dcr b
jnz l1
hlt
5の階乗は16進数で78になります。ロジックは..5!= 5x4x3x2x1
したがって、5を4回加算すると、結果(つまり、20)が3回加算され、以下同様に続きます...(5 + 5 + 5 + 5)、(20 + 20 + 20)、(60 + 60)、120を16進数に変換します。 ..
MVI B, 07h
LXI H, 0007h
LXI D, 0007h
DCR B
LOOP1:
MOV C, B
LXI H, 0
LOOP:
DAD D
DCR C
JNZ LOOP
MOV E, L
MOV D, H
DCR B
JNZ LOOP1
HLT
これはあなたを助けるかもしれません。これは7用です!。
このコードは9の階乗を検索します。DBの値を変更することにより、9までの任意の数の階乗を検索できます。
LHLD 2090
MOV C,L
MOV D,A
MOV E,A
XCHG
DCR C
MOV B,C
L1:DAD D
JNC B1
INR A
B1: DCR C
JNZ L1
L2 : DCR B
JZ END
MOV C,B
XCHG
LXI H,0000
JMP L1
END:SHLD 2092
STA 2094
HLT
#ORG 2090H
#DB 09H
Org 0000h
Mov dptr,#8000h
Mov a,@dptr
Mov r0,a
Mov r1,#01h
Mov b,r1
L1:mul ab
Dec r0
Mov b,r0
Cjne r0,#00h,l1
Mov r2,a
H:sjmp h
End