2025.07.07 - ARM assembly 프로그래밍1

2025. 7. 8. 01:29·ARM arch/Cortex-M

분기문 - 두 수 중 큰 값을 반환

max_prac:
	cmp r0,r1 @ compare with r0, r1 based on r0

	bge 1f @ greator equal
	blt 2f @ less than
1: @ r0가 더 클때
	mov r0, r0
	bx lr
2: @ r1가 더 클때
	mov r0, r1 @ r0이 반환 레지스터이기 때문에 결과를 r0에 저장
	bx lr @ 복귀주소로 복귀
  • AAPCS에 의해 r0에는 인자1, r1에는 인자2가 들어감
  • r0과 r1을 r0 기준으로 비교
  • r0이 크거나 같으면 분기 1, r1이 크면 분기 2
  • 리턴 레지스터가 r0이므로, 큰 값을 r0에 넣어두고 반환

비트 연산 - 특정 비트 클리어

	.global  clear_unused
clear_unused:
	mov r2,#1 @r2에 숫자 1저장
	lsl r2, r1 @ logical shift left, r1만큼 왼쪽으로 민다
	bic r0, r2 @ bit clean, r0에서 r2의 비트만 clear한다
	bx lr

 
	.global  clears_unused
clears_unused:
	bic r0, r1 @ r1에 pattern이 온다
	bx lr

방식 1: 비트 번호로 클리어

  • r1에 클리어할 비트 번호 저장
  • r2 = (1 << r1)
  • bic r0, r2로 해당 비트만 클리어

방식 2: 비트 패턴으로 클리어

  • r1에 클리어할 bit mask (패턴)을 저장
  • bic r0, r1로 여러 비트를 한 번에 클리어

루프문 - start부터 end까지의 합

	.global  sum
sum: @ r0 = start, r1 = end
	mov r2, #0 @ r2는 sum, 초기화
loop1:
	add r2, r0
	add r0, #1
	cmp r1, r0 @ start와 end를 비교
	bge loop1 @ r2가 r1보다 크면
	mov r0, r2
	bx lr
  • r0 = 시작값, r1 = 끝값
  • r2 = 누적합 (sum)
  • r0부터 r1까지 반복하면서 r2에 누적
  • 반복이 끝나면 결과를 r0에 담아 리턴

참고: AAPCS란?

  • AAPCS (ARM Architecture Procedure Call Standard)는 함수 호출 시 레지스터 사용 규약.
  • r0 ~ r3 → 인자 전달용
  • r0 → 반환값 전달
  • lr → 복귀 주소 저장 (bx lr 로 복귀)

 

 

 

'ARM arch > Cortex-M' 카테고리의 다른 글

cortex-m3 AMBA와 메모리 맵  (0) 2025.07.14
2025.07.09 - ARM assembly 프로그래밍2  (0) 2025.07.09
빅 엔디언, 리틀 엔디언  (0) 2025.07.02
AAPCS  (0) 2025.06.30
Thumb2 명령어 / 레지스터 / 핸들러 모드, 쓰레드 모드  (0) 2025.06.27
'ARM arch/Cortex-M' 카테고리의 다른 글
  • cortex-m3 AMBA와 메모리 맵
  • 2025.07.09 - ARM assembly 프로그래밍2
  • 빅 엔디언, 리틀 엔디언
  • AAPCS
Jminu
Jminu
  • Jminu
    뇌 구조가 바이너리
    Jminu
  • 전체
    오늘
    어제
    • 분류 전체보기
      • C프로그래밍
        • 오류해결
        • 개인 공부
        • Programming Lab(학교수업)
        • MemoryTracker
      • C++
        • 개인 공부
      • 자료구조(Data Structure)
      • ARM arch
        • Cortex-M
        • FreeRTOS
      • 컴퓨터 공학(Computer Science)
        • OS
        • 컴퓨터 구조
      • Qualcomm 기업과제
      • Linux
      • Web
      • 똥글
      • 백준
      • Git 학습
        • 오류해결
        • 학습중
      • Python
        • 오류해결
        • 개인 공부
  • 블로그 메뉴

    • 태그
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    피보나치
    순환
    버퍼
    동적메모리
    파일 입출력
    rubik pi
    buildroot
    포인터
    Qualcomm
    exception vector table
    커널
    memory mapped io
    rubikpi3
    파이썬
    yolo
    드라이버 분석
    자료구조
    스택
    commit
    INIT
    arm
    이진 트리
    Branch
    c언어
    aapcs
    소수
    C++
    백준
    Git
    시스템콜
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
Jminu
2025.07.07 - ARM assembly 프로그래밍1
상단으로

티스토리툴바