我已经存储了字符串'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
答案 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
年了,所以我可能会有一些细节。