0

私は何時間もコードを書こうとしてきました。私のアルゴリズムは、文字列を文字ごとに読み取り、減算することです。これは、それをアドレスに保持すること#$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           
4

0 に答える 0