どういう処理を組めばいいのかわかったので、今度はアセンブリ言語で16進数を10進数化するプログラムを書いてます。
いちおう動くものができたので、ここで晒しときます。
;--- 16 シンスウ ヲ 10 シンスウ ニ スルCHPUT: EQU 00A2H
POSIT: EQU 00C6HVALUE: EQU 0A000H
MAN: EQU 0A002H
SEN: EQU 0A004H
HYAKU: EQU 0A006H
JU: EQU 0A008HDIGITM: 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-10000LD 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 MAINSDPLUSM: 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 MAINHDPLUSS: 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 MAINJDPLUSH: 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 MAINIDPLUSJ: 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
RETEND
ご覧のとおり同じ処理で無駄ばかり(泣)。
やってることは割り算のくり返し*1。換算する数値を10000で割って商を出し、その余りを1000で割って...を十の位までくり返し、最後の余りを一の位にするという手法です。まぁ、力業。
この同じ処理をどうやってまとめるかが次の課題です。
*1:厳密には引き算です