0

文字列 '0123456789' を保存したので、各文字の ASCII 値が 1 バイトとしてメモリに保存されます。連続する 2 バイトを次のように追加するにはどうすればよいですか。

0+1->1、1+2->2......など

“0123456789”
30 31 32 33 34 35 36 37 38 39 
00000000 00000001 00000010 00000011 00000100 00000101 00000110 00000111 00001000 00001001

00010001
00001111 
00001101
00001011
00001001
00000111
00000101
00000011
00000001
00000000

私の最初の試みはこのようなものでした

ORG     $1000
START:          DC.L    '0123456789'        
                MOVE.L  #$1000, A1

                MOVE.B  (A1)+, D0
                MOVE.B  (A1)+, D1
                MOVE.B  (A1)+, D2
                MOVE.B  (A1)+, D3
                MOVE.B  (A1)+, D4
                MOVE.B  (A1)+, D6
                MOVE.B  (A1)+, D6
                MOVE.B  (A1)+, D7



    SIMHALT            



    END    START        
4

1 に答える 1

1

ご指摘のとおり、値は整数ではなく文字コードとして格納されます。

したがって、それらを加算するには、「0」を減算して整数に変換する必要があります。10 進数が連続したコードでエンコードされているプラ​​ットフォームを使用していると仮定しましょう (たとえば、C が必要とするように)。これは一般的です。

a1コード内の as が指す 2 つの数字を加算し、合計を に返すサブルーチンを次に示しますd1。1 文字しか進めないため、これをループで実行すると、最初にインデックス 0 と 1 を合計し、次にインデックス 1 と 2 などを合計します。

sum_two:
   move.b (a1)+,d1
   subi.b #'0',d1
   add.b  (a1),d1
   subi.b #'0',d1
   rts

注: BIGNUMMC68k のアセンブリを最後に書いてから何年も経っているので、詳細が不明な場合があります。

于 2014-04-09T10:57:34.437 に答える