何とか庵日誌

本名荒井が毒にも薬にもならないことを書きつづるところ

16進数を10進数にするプログラムその2

どういう処理を組めばいいのかわかったので、今度はアセンブリ言語で16進数を10進数化するプログラムを書いてます。
いちおう動くものができたので、ここで晒しときます。


;--- 16 シンスウ ヲ 10 シンスウ ニ スル

CHPUT: EQU 00A2H
POSIT: EQU 00C6H

VALUE: EQU 0A000H
MAN: EQU 0A002H
SEN: EQU 0A004H
HYAKU: EQU 0A006H
JU: EQU 0A008H

DIGITM: EQU 0A010H
DIGITS: EQU 0A011H
DIGITH: EQU 0A012H
DIGITJ: EQU 0A013H
DIGITI: EQU 0A014H


SZAHYO: EQU 1400H

ORG 9000H

;---- ショキ セッテイ

LD HL,0FFFFH
LD (VALUE),HL ;10シンスウカ スル カズ

LD HL,10
LD (JU),HL
LD HL,100
LD (HYAKU),HL
LD HL,1000
LD (SEN),HL
LD HL,10000
LD (MAN),HL ;テイスウ 10-10000

LD HL,DIGITM
LD B,5
DLOOP: LD (HL),0
INC HL
DJNZ DLOOP ;10シンスウ カク ケタ リセット

;--- マン ノ クライ カンザン

MAINM: LD HL,(MAN)
EX DE,HL
LD HL,(VALUE)

HIKIM: OR A
SBC HL,DE
JR NC,DPLUSM
JR MAINS

DPLUSM: LD A,(DIGITM)
INC A
LD (DIGITM),A
LD (VALUE),HL
JR HIKIM

;--- セン ノ クライ カンザン

MAINS: LD HL,(SEN)
EX DE,HL
LD HL,(VALUE)

HIKIS: OR A
SBC HL,DE
JR NC,DPLUSS
JR MAINH

DPLUSS: LD A,(DIGITS)
INC A
LD (DIGITS),A
LD (VALUE),HL
JR HIKIS

;--- ヒャク ノ クライ カンザン

MAINH: LD HL,(HYAKU)
EX DE,HL
LD HL,(VALUE)

HIKIH: OR A
SBC HL,DE
JR NC,DPLUSH
JR MAINJ

DPLUSH: LD A,(DIGITH)
INC A
LD (DIGITH),A
LD (VALUE),HL
JR HIKIH

;--- ジュウ ノ クライ カンザン

MAINJ: LD HL,(JU)
EX DE,HL
LD HL,(VALUE)

HIKIJ: OR A
SBC HL,DE
JR NC,DPLUSJ
JR MAINI

DPLUSJ: LD A,(DIGITJ)
INC A
LD (DIGITJ),A
LD (VALUE),HL
JR HIKIJ

;--- イチ ノ クライ

MAINI: LD HL,(VALUE)
LD A,L
LD (DIGITI),A ;アマリ ヲ ダイニュウ スル ダケ

;--- スウジ ヲ ヒョウジ スル

PUTD: LD HL,SZAHYO
CALL POSIT
LD B,5
LD HL,DIGITM
LOOP2: LD A,(HL)
ADD A,30H
CALL CHPUT
INC HL
DJNZ LOOP2
RET

END



ご覧のとおり同じ処理で無駄ばかり(泣)。
やってることは割り算のくり返し*1。換算する数値を10000で割って商を出し、その余りを1000で割って...を十の位までくり返し、最後の余りを一の位にするという手法です。まぁ、力業。
この同じ処理をどうやってまとめるかが次の課題です。

*1:厳密には引き算です