私は何時間もコードを書こうとしてきました。私のアルゴリズムは、文字列を文字ごとに読み取り、減算することです。これは、それをアドレスに保持すること#$30
を意味します。'0'
0 で埋められた別のランダム アドレスを保持します。次に、文字列の最後まで、ランダム アドレスの内容を 10 倍し、int を変換するために使用されるアドレスの内容を減算して加算し#$30
ます。私は本当に疲れ果てており、アルゴリズムを実装するのは難しい. EMUL
ちなみに、可能かどうかはわかりませんが、デフォルトのmultiplierはYレジスタとDレジスタを使って書き込むので使えないと思います。
いくつかの擬似:
num = num*10 + conv(next digit).
var * 10:
res = var
res << 1 (shift left)
res << 1
res = res + var
res << 1
Now res equals var*10
私の立ち往生したコード:
MYSTR FCC "1337"
Entry:
LDX #MYSTR
CLRA
STAA $1900 ; random address
loop:
LDAA 1, x+ ; pointer to string
CMPA #0 ; check end of string
BEQ halt ; if end of string end the program
BRA atoi ; num in accumulator A is converted to int
;BRA halt
atoi:
STAA $1300
LDAB $1300
SUBB #$30
;----- number - '0' converts to int
JSR mult
BRA loop
mult:
CLRB
STAB $1350
MOVB $1350, $1351 ; copy content of 1350(var) to 1351(res)
ASL $1351
ASL $1351
LDAA $1351
ADDA $1350 ; res += var;
ASLA ; res << 1
RTS
halt:
SWI