Я новичок в программировании на ассемблере ARM7.
Я пытаюсь реализовать простую функцию в сборке ARM, которая принимает массив символов, переворачивает его и сохраняет в другом массиве символов равной длины.
Я включил мой код C и код языка сборки ARM7 ниже. Однако мой код не выводит правильную обратную строку; что, вероятно, из-за моих инструкций ASM. Я использую Linux на 32-битной машине.
reverseString.s (код ниже)
.global reverseString
.text
reverseString:
MOV R2, R1 @store strIn[0] into R2
PUSH {R4-R6} @save regs
MOV R4, #0 @R4 will be strIn_len reg, store 0 for count
@finds the length of the strIn arr
strlen_loop:
LDR R3, [R2], #1 @increment through strIn arr
ADD R4, R4, #1 @count the no. of chars
CMP R3, #0 @check if null term hit
BNE strlen_loop @if yes leave, else cont.
@string reversal loop
MOV R0, R2 @movs ptr of strOut to last element
loop:
CMP R4, #0 @makes sure count !=0
BEQ loop_end @if yes, end loop
LDR R5, [R1], #1 @incr. address of strIn in R1 and put into R5
STR R5, [R0], #-1 @store the value at address in strOut
SUB R4, R4, #1 @decrement counter var
B loop
loop_end:
POP {R4-R6} @restore regs
BX LR
reverseString.c (код ниже)
#include <stdio.h>
#include <stdint.h>
extern void reverseString(char strOut[], const char strIn[]);
#define COUNT 6
int main()
{
const char strIn[COUNT] = "candy";
char strOut[COUNT];
reverseString(strOut, strIn);
printf("%s\r\n", strOut);
return 0;
}
скомпилировано в командной строке с использованием
gcc -g -o reverseString reverseString.s reverseString.c
./reverseString