-PR-
締切済み

Z80アセンブルで16ビット*8ビットの乗算ルーチンを作りたいのですが・・

  • 暇なときにでも
  • 質問No.299787
  • 閲覧数716
  • ありがとう数3
  • 気になる数0
  • 回答数1
  • コメント数0

お礼率 82% (66/80)

16ビット*8ビットの掛け算ルーチンを作っています。

HLとAレジスタの掛け算で答えは3バイトで
AHLの順に入れようとしているのですが、
困ったことに符号ありで考えるともうだめです。

HLに入れる値が小さいときはまだいいのですが、
大きくなるとどうしようって感じです。
解決策も浮かばないし・・とほほ

ソースを書いてみますので、お気づきの点があれば
アドバイスをよろしくお願いします。

見づらいプログラムで申し訳ないです(泣)
僕は裏レジ、一切使い(え?)ません(爆)


;IN:HL かけられる数
;:A  かける数
;OUT:AHLの順で入る

;-----------------------------------------
muls16_8:

ld B,A
call mul16_8
bit 8,B
jr z,muls16_8_end
neg

muls16_8_end:

ret
;-----------------------------------------

mul16_8:

push BC
ld B,8
ld IX,0
ld C,0
ld DE,0

mul16_8_loop:

rrca
jr nc,mul16_8_skip

push DE
push HL
pop DE

add IX,DE
pop DE

push AF
ld A,E
add A,C
ld E,A
pop AF

mul16_8_skip:

add HL,HL
rl C
djnz mul16_8_loop

push IX
pop HL
ld A,E

pop BC
ret

なんでタブやスペースを消すんだぁ・・・みづらい・・・
通報する
  • 回答数1
  • 気になる
    質問をブックマークします。
    マイページでまとめて確認できます。

回答 (全1件)

  • 回答No.1
レベル9

ベストアンサー率 15% (14/90)

;***************************************************************
;*    MULDE_HL:                               *
;*          ★DE * HL の 結果を DEHL に返す    *
;*          KL5C16030 の MUL DE,HL と 同一動作        *
;*                                         *
;*    入力  DE                               *
;*         HL                               *
;*                                         *
;*    出力  DE          上位 WORD              *
;*         HL          下位 WORD              *
;*                                         *
;*    使用  AF,BC,DE,HL,IX                       *
;*    破壊  DE,HL                             *
;***************************************************************

MULDE_HL:    PUSH    AF
          PUSH    BC
          PUSH    IX
          LD     IXH,D
          LD     IXL,E
          LD     B,H
          LD     C,L
          LD     HL,0000H
;;;;;;;;;;;;;; LD     DE,0000H     ;16回 ローテート するから 初期化不要
          LD     A,16
MULDEHL_L01:  ADD     HL,HL
          RL     E
          RL     D
          ADD     IX,IX
          JR     NC,MULDEHL_S02
          ADD     HL,BC
          JR     NC,MULDEHL_S02
          INC     DE
MULDEHL_S02:  DEC     A
          JR     NZ,MULDEHL_L01
          POP     IX
          POP     BC
          POP     AF
          RET

;***************************************************************
;*    MULSDE_HL:                              *
;*          ★DE * HL の 結果を DEHL に返す    *
;*          KL5C16030 の MULS DE,HL と 同一動作       *
;*                                         *
;*    入力  DE                               *
;*         HL                               *
;*                                         *
;*    出力  DE          上位 WORD              *
;*         HL          下位 WORD              *
;*                                         *
;*    使用  AF,BC,DE,HL,IX                       *
;*    破壊  DE,HL                             *
;***************************************************************

MULSDE_HL:   PUSH    AF
          PUSH    BC
          PUSH    DE
          PUSH    HL
          CALL    MULDE_HL
          EX     DE,HL
          POP     BC         ;HL
          EX     (SP),HL
          BIT     7,H         ;DE
          EX     (SP),HL
          JR     Z,MULSDEHL_S01
          OR     A
          SBC     HL,BC
MULSDEHL_S01: BIT     7,B
          POP     BC         ;DE
          JR     Z,MULSDEHL_S02
          OR     A
          SBC     HL,BC
MULSDEHL_S02: EX     DE,HL
          POP     BC
          POP     AF
          RET



16bit * 16bit の掛け算です ご参考までにどうぞ
お礼コメント
amoban

お礼率 82% (66/80)

ありがとうございます。
実は自分で次の日に色々試してみたらうまくいきました。
16*16ビットのものを参考に改良してみようかと思います。
わざわざありがとうございました。
投稿日時 - 2002-06-26 14:04:24


このQ&Aのテーマ
このQ&Aで解決しましたか?
関連するQ&A
こんな書き方もあるよ!この情報は知ってる?あなたの知識を教えて!
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する
-PR-

特集


開業・独立という夢を持つ人へ向けた情報満載!

ピックアップ

ページ先頭へ