arm 汇编
时间:10-02
整理:3721RD
点击:
我是一个arm新手,看书时遇到点问题,想来请教一下,可能问题有点简单.
修改地址那个地方,是应该加1吗,前面取得是一个字节,为啥不是加8个位
bne 那个地方是不是写错了,应该是eq吧?
在 loppout 那个地方 地址应该是r2吗,r2不是指向0x0d 吗,这样写不覆盖吗?存储16位的数据,
下面的 r2+1对吗?
修改地址那个地方,是应该加1吗,前面取得是一个字节,为啥不是加8个位
bne 那个地方是不是写错了,应该是eq吧?
在 loppout 那个地方 地址应该是r2吗,r2不是指向0x0d 吗,这样写不覆盖吗?存储16位的数据,
下面的 r2+1对吗?
除了第一个问题,后面的问题你的疑问都是对的
'修改地址指针,指向下一个单元‘ 这句+1是对的:
虽然 CPU 的最小计算单位是位(bit), 但是存储数据以字节(byte)为单位,所以,不管是在寄存器中,还是在存储器中,除了特殊需要时会直接按位寻址(目前我本人只在intel的MCS-51系列中见过),都是以字节为单位寻址,地址指针也是指向每一个字节,每次增量都是指向下一个字节,而不是下一个二进制位
BNE 应该是 BEQ
LOPPOUT 开始应该是这样:
LOPPOUT STRH R1, [R2, #1]
STRH R0, [R2, #3]
END
thank you very much
追加一个问题,如何判断地址值能否被4整除呢?是把他换成10进制的吗?像0x30010000,和0x32000000这样的如何判断 换算的话不是很麻烦吗?
将这个地址和3做与运算,结果为0就能被4整除;
看来你对二进制还不是很熟,为什么都要求被2、4、8整除,不要求被3、5、6、7、10整除呢?
低两位为0的就是四的倍数喽。因为他们都是2的指数倍对吧