如何从内存中读取10个字节以添加每个连续的2个字节

时间:2014-04-09 10:51:39

标签: assembly 68000 easy68k

我已经存储了字符串'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        

1 个答案:

答案 0 :(得分:1)

正如您所指出的那样,值存储为字符代码,而不是整数。

因此要添加它们,必须通过减去“0”来转换为整数。假设您使用一个平台,其中十进制数字按顺序代码编码(例如,C需要)。这很常见。

这是一个子例程,它添加了两个这样的数字,a1指向您的代码,并在d1中返回总和。它只前进一个字符,所以如果你在循环中执行此操作,则将第一个索引0和1加起来,然后索引1和2,依此类推。

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

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