ARM으로 어셈블 함수 만들어서 C코드에넣는거야 횽들

원하는 시작 메모리 시작 주소 넣고 끝내는 시작주소 넣고 어셈블로 넘겨서
그걸 레지스터로 받고 00000000, 11111111 이걸 다른 레지스터에 넣은후
그 메모리 시작 레지스터랑 비교하고 제대로 스토어 로드가 되면 카운터 하나씩 올려서 메모리가 몇개를 쓸 수 있나 알아보는거야 횽들

#include<stdio.h>
typedef struct info_struct {

  int start;
  int finish;
  int count;
} info;

__value_in_regs extern RAM_test(int a, int b, int c);

int main()
{
  int a, b;
  int c=0;
  info res;

  printf(\" Enter start address : \");
  if(scanf(\"%x\", &a)!=1)
  {puts(\"Bad numbers\");}
  printf(\" Enter finish addresss : \");
  if(scanf(\"%x\", &b)!=1)
  {puts(\"Bad numbers\");}

  res=RAM_test(a, b, c); ->cast to non-equal \'info_struct\' illegag 이거는 어셈블 코드로 함수 만든거야 횽들

  printf(\"Memory test OK\");
  printf(\"usual RAM = %8x Byte \", res.count);


  return 0;
} ->missing newline before EOF - inserted 왜 에러가 나는건지 모르겠어 횽들

여기는 어셈블 코드
 AREA |counterpattern$$code|, CODE, READONLY
|x$codeseg|


    EXPORT RAM_test


; r0=depature address, r1=last address , r2=counter, r3=00000000, r4=11111111

RAM_test
 MOV r3, #00000000
 MOV r4, #0xff
 
LOOP
 CMP r0, r1 ;

 MOV pc, lr;

 END
   
 STRNE r3, [r0] ; [r0]=r3

  CMP r3, [r0] ;

  STREQ r4, [r0] ; [r0]=r4

   CMP r4, [r0], #1 ;
 
    ADDEQ r2, r2, #1 ;

    BNE LOOP;

  ADDNE r0, r0, #1;
  
  LOOP;


어셈블 코드는 논리적으로 틀릴지는 모르겠는데 에러가 안나..ㅜㅜ 근데 c코드는 에러가 뜨더라구.
이거 해결 좀 부탁해줘 횽들.
혹시나 제대로 할 수 있는 횽들한테는 카톡으로 만원어치 쏠게 횽들..
제대로 해줄 횽들은 밑에 문제 참조해서 읽어줘 횽들

power up될 때 수행하는 작업 중의 하나가 RAM test입니다. 이때는 RAM에 아무런 내용이 올라가 있지 않는 상황에서 현재 사용가능한 RAM 크기를 확인합니다.

입/출력 및 메시지 출력은 C 프로그램이 담당하고 RAM test는 ARM 어셈블리 프로그램을 사용하도록 합시다.

C 프로그램에서 test할 main memory 시작주소(32bit), test할 byte 수(32bit)를 입력받습니다. 어셈블리 프로그램에게 그 parameter를 전달해주면 어셈블리 프로그램에서는 test 합니다.

메모리 test에서 사용하는 data pattern은 \'00000000\'와 ‘11111111’입니다. 각 pattern을 메모리에 쓰고 바로 읽습니다. 두 data가 같으면 그 주소가 정상이고 다르면 비정상임을 나타냅니다.
 
test 도중 error가 발생하면 그 번지 전까지 counter값을 C로 반환합니다. 정상 완료되면 확인한 counter 값을 C로 반환합니다. C에서 \"Memory test OK\"라는 메시지와 함께 \"현재 사용가능한 RAM 크기 = ???? Byte\" 라는 메시지를 보내줍니다. 

주의사항: ARM emulator를 사용하므로 현재 사용 중이 아닌 메모리영역에서 test 해야 합니다. 수행중인 프로그램이 들어가 있는 번지에 대하여 test를 수행하면 그 번지에 특정 pattern을 쓰게 되므로 그 프로그램이 깨지게 됩니다. test 할 때 시작주소는 0x000a0000을 사용하고 counter값은 8bit수로 사용하십시오.