0
Это домашнее заданиеARM ассемблере: цезарь высчитывать
Я должен взять данную строку и смещение в качестве параметров и создать зашифрованную версию строки. Вот что у меня есть
.global
cypher:
stmfd sp!, {v1-v6, lr} @std
mov v1, a1 @hold the string pointer in v1
bl strlen @get the length of the string in a1
add a1, a1, #1 @add null byte space to strlen
mov v2, a1 @hold the length of space needed in v2
bl malloc @reserve space for new string in a1
mov v3, #0 @initial index of new string
loop:ldr v4, [v1], #4 @load v4 with string pointer and increment by bytes
add v5, v4, a2 @add the offset to the current character
str v5, [a1, v3] @store the new character in the new address
add v3, v3, #4 @increment the index by a byte
cmp v2, v3
bne loop
ldmfd sp!, {v1-v6, pc} @std
.end
У меня возникли проблемы с тем, как правильно нарисовать персонажа. Как добавить смещение к символу? (Я предполагаю, что символы ascii должны быть увеличены?)
Да они делают. Затем для дешифрования вы просто вычтите правильное смещение. Но я вижу, что это то, что вы делаете в своем коде. Итак, каков результат вашего кода? – Phil
Испытанная строка - это «БЫСТРОЕ ВОЛОСНОЕ ВОСПРОИЗВЕДЕНИЕ НА ЛАЗУЮ СОБАКУ». Я получаю строку «XHE UUICO BRSWN JOX NUMPW OVIR TLE LEZY HOG» Кажется, что пропущено 3 символа между сменой персонажа – lilscarecrow
Я думаю, это потому, что вы пропускают 4 байта. Можете ли вы попробовать изменить два набора из # 4 на # 1? – Phil