1
我会说实话,这是一个我坚持的作业练习,需要指导。通过bitshifting改变单词
任务是改变
1)COPE - > HOPE 2)HOPE - > HOPS。
我已经设法做到了1)在该位添加5,这很容易,因为添加会改变第一位。然而,我坚持要如何改变希望到HOPS(2),因为现在我必须操纵最后一点。
我正在考虑使用ror
,但是如果我理解正确,ARM汇编语言在旋转时切断位。 (仅存储31位而不是32位)因此,使用ror
由于某种原因将HOPE
更改为OPEH
。
任何人都可以提供指导如何做到这一点?
我迄今为止代码:
.syntax unified
.global main
main:
mov R1, #0
@ load "COPE" into r1
cope:
.ascii "COPE"
ldr r1, cope
mov r2, r1
add r2, #5 ; Got HOPE from COPE now.
mov r3, r2
# Now im stuck
谢谢!
从什么'添加停止0x12000000'你? – Jester
这不是比特,而是你操纵的字节。在ASCII编码中,每个字母只使用一个字节(8位)。你将“字符串”加载到32位寄存器中,32/8 = 4 => 4个字符将适合(更长的字符串不会)。如果您要以十六进制格式检查“r2”的值,每对数字都是一个字节。我只是认为ARM是big-endian,所以我希望在最重要的字节(MSB)中有'C'('0x43'),即。你的'add r2,#5'会影响'E',而不会影响'C'......但是也许你的ARM是x86的小端,那么'C'是最低有效字节(LSB)添加5会修改它。 – Ped7g
并且'ror'确实将所有32位数字全方位旋转,没有任何东西丢失。因此,以8/24位旋转将每个字母移动1个位置到任一方向,越过末端的位置将返回到第一个位置。 ('H'(out)< - 'OPE'< - 'H'(in)')。 – Ped7g