0

我已经存储了字符串'0123456789',所以现在每个字符的ASCII值作为一个字节存储在内存中,如何添加每个连续的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”来转换为整数。假设您使用一个平台,其中十进制数字以顺序代码编码(例如 C 需要)。这很常见。

a1这是一个添加两个这样的数字的子例程,在代码中由 as指向,并在d1. 它只前进一个字符,因此如果您在循环中执行此操作,您将首先对索引 0 和 1 求和,然后对索引 1 和 2 求和,依此类推。

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

注意:BIGNUM自从我上次编写 MC68k 程序集以来已经有好几年了,所以我可能会删除一些细节。

于 2014-04-09T10:57:34.437 回答