素因数分解(04/30追記・訂正)

65535以下の入力に対し、素因数分解をするプログラム
ゲームボーイのニモニックで書いてみた。
(GBプログラミングって普通Cか何かでやるらしいけど、ニモニック直書き楽しいれす(^q^)
画面描写については興味がなく、勉強してないので、サブルーチンを呼び出すことでごまかしてる。
素直な方針でやったので、どれくらい時間がかかるとかは特に考えていない。
ということで以下。全74byte。70byteに改良。


HLに入力された値が入ってる

前回からの変更
・HLが0001hかどうかの判定法(-4byte)
・HL/aが割り切れたあとの処理(時短)


1000 CB 45    bit 0,l
1002 20 0B    jr  nz,100F
1004 3E 02    ld  a,02
1006 CD xx yy   call yyxx #aを出力し改行
1009 CB 3C    srl h
100B CB 1D    rr  l
100D 18 F1    jr  1000
100F 06 03    ld  b,03
1011 7D      ld  a,l
1012 3D      dec a
1013 B4      or  h
1014 C9      ret z
1015 E5      push HL
1016 E1      pop HL
1017 E5      push HL
1018 78      ld  a,b
1019 CD C1 16   call 1035 #HL=HL/a、a=mod(HL,a)
101C B7      or  a
101D 20 07    jr  nz,1026
101F 78      ld  a,b
1020 ED xx yy   call yyxx
1023 D1      pop de #スタック合わせ
1024 18 02    jr  1011
1026 04      inc b
1027 04      inc b
1028 7C      ld  a,h
1029 B7      or  a
102A 20 EA    jr  nz,1016
102C 7D      ld  a,l
102D B8      cp  b
102E 30 E6    jr  nc,1016
1030 E1      pop HL
1031 CD pp qq   call qqpp #HLを出力し改行
1034 C9      ret

1035 16 10    ld  d,10
1037 5F      ld  e,a
1038 AF      xor a
1039 29      add hl,hl
103A 17      rla 
103B 38 03    jr  c,1040
103D BB      cp  e
103E 38 02    jr  c,1042
1040 93      sub e
1041 2C      inc l
1042 15      dec d
1043 20 F4    jr  nz,1039
1045 C9      ret 




1000 CB 45    bit 0,l
1002 20 0B    jr  nz,100F
1004 3E 02    ld  a,02
1006 CD xx yy   call yyxx #aを出力し改行
1009 CB 3C    srl h
100B CB 1D    rr  l
100D 18 F1    jr  1000
100F 7C      ld  a,h
1010 B7      or  a
1011 20 04    jr  nz,1017
1013 3E 01    ld  a,01
1015 BD      cp  l
1016 C9      ret z
1017 06 03    ld  b,03
1019 E5      push HL
101A E1      pop HL
101B E5      push HL
101C 78      ld  a,b
101D CD C1 16   call 1039 #HL=HL/a、a=mod(HL,a)
1020 B7      or  a
1021 20 07    jr  nz,102A
1023 78      ld  a,b
1024 ED xx yy   call yyxx
1027 C1      pop bc #スタック合わせ
1028 18 E5    jr  100F
102A 04      inc b
102B 04      inc b
102C 7C      ld  a,h
102D B7      or  a
102E 20 EA    jr  nz,101A
1030 7D      ld  a,l
1031 B8      cp  b
1032 30 E6    jr  nc,101A
1034 E1      pop HL
1035 CD pp qq   call qqpp #HLを出力し改行
1038 C9      ret

1039 16 10    ld  d,10
103B 5F      ld  e,a
103C AF      xor a
103D 29      add hl,hl
103E 17      rla 
103F 38 03    jr  c,1044
1041 BB      cp  e
1042 38 02    jr  c,1046
1044 93      sub e
1045 2C      inc l
1046 15      dec d
1047 20 F4    jr  nz,103D
1049 C9      ret 

コメント

コメントの投稿

管理者にだけ表示を許可する

トラックバック


この記事にトラックバックする(FC2ブログユーザー)

プロフィール

hide(ハイド)

Author:hide(ハイド)

○やりこみとか

DQMキャラバンハートRTA
3:57:15

(11年5月21日)

GB版DQM2
低レベルボス攻略

(14年5月6日)

ぱるメロ
旧曲10780pts %表
ツアー3628630
(12年3月~14年9月)

ポケモン不思議のダンジョン
赤の救助隊
RTA 2:49:59

(14年12月5日)

ポケモン不思議のダンジョン
赤の救助隊
状況再現ありRTA 2:26:36

(15年3月9日)

DQM系データ

フリーノベルゲ攻略

最新記事
カテゴリ
リンク
最新コメント
月別アーカイブ