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
なんでタブやスペースを消すんだぁ・・・みづらい・・・
No.1ベストアンサー
- 回答日時:
;***************************************************************
;* 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 の掛け算です ご参考までにどうぞ
ありがとうございます。
実は自分で次の日に色々試してみたらうまくいきました。
16*16ビットのものを参考に改良してみようかと思います。
わざわざありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# Cのオブジェクトファイルの逆アセンブル 5 2023/05/13 01:51
- ヤフオク! 未だにレーザーディスクを欲しがる人が 5 2023/03/18 12:38
- 避妊 【避妊】【アフターピル】【低用量ピル】 先日コンドームをつけて性行為をしましたが 終わった後にコンド 1 2023/01/06 00:53
- 避妊 【低用量ピル】【避妊薬】 低用量ピルについて質問です。 22歳女性です。 高校生の頃から生理痛が酷く 2 2023/04/09 15:25
- その他(悩み相談・人生相談) 軽度の知的障害とかLDってどういう特徴がありますか?知恵袋のやつに僕がテストのことで相談したら言われ 5 2022/05/02 16:50
- 避妊 【低用量ピル】【避妊薬】 低用量ピルについて質問です。 22歳女性です。 高校生の頃から生理痛が酷く 1 2023/05/02 17:38
- 発達障害・ダウン症・自閉症 数学の証明問題でいちばん小さい文字式の数は「n」なのに「n+1」が1番小さいと勘違いしたり、カロリー 2 2022/09/06 12:33
- 避妊 【避妊】【アフターピル】【低用量ピル】 先程コンドームをつけて性行為をしましたが 終わった後にコンド 1 2023/01/02 22:57
- その他(恋愛相談) 今27歳ですが 持病で喘息と高血圧 発達障害でASDとADHDとLDを持っています。自己免疫疾患とう 1 2023/01/07 11:30
- 発達障害・ダウン症・自閉症 今27歳ですが 持病で喘息と高血圧 発達障害でASDとADHDとLDを持っています。自己免疫疾患とう 1 2023/01/07 11:19
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
PS4コントローラーをPCでゲーム...
-
OBS配信すると、マイクが途切れ...
-
プログラムについての質問です...
-
アクセスでエクセルに出力する...
-
Windows Formアプリからコンソ...
-
VBAのExecメソッドで画面を非表...
-
cout と cerrの違い
-
COBOLのMOVEで桁数が異なる場合
-
コンセントの電力は入力と出力...
-
C#でアクセス権限の取得方法が...
-
リッチテキストをテキストに変換
-
printfとputcharの違いは
-
海外の110Vの電気製品を日本で...
-
MMDでavi出力が出来ない
-
コピーしたデータを表中で収ま...
-
1〜50まで順に数字を入力し、3...
-
4Kの外部モニターに出力すると...
-
VBAでテキスト出力時のスペース...
-
【UWSC】WEBページ中の特定文字...
-
VBAでPowerPointからExcelにレ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
PS4コントローラーをPCでゲーム...
-
4Kの外部モニターに出力すると...
-
コンセントの電力は入力と出力...
-
MMDでavi出力が出来ない
-
OBS配信すると、マイクが途切れ...
-
VBAでテキスト出力時のスペース...
-
cout と cerrの違い
-
COBOLのMOVEで桁数が異なる場合
-
ACCESS クエリ→フォーム...
-
アクセスでエクセルに出力する...
-
VBAのExecメソッドで画面を非表...
-
テキストファイルから特定の文...
-
Windows11対応の3入力1出力 USB...
-
VBAで有効数字の設定
-
スマホのバッテリー消費につい...
-
Excel VBAで値を変えながら、pd...
-
NTTのホームゲートウェイとOCN...
-
定格冷房能力(出力)とは 定格...
-
プログラムについての質問です...
-
PS5をMacBookProに出力したいの...
おすすめ情報