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
        • 오류해결
        • 개인 공부
  • 블로그 메뉴

    • 태그
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    버퍼
    Qualcomm
    토발즈
    c언어
    스택
    C++
    동적메모리
    순환
    백준
    이진 트리
    커널
    Git
    yolo
    피보나치
    포인터
    arm
    Branch
    커널 기여
    앤드류모튼
    rubik pi
    INIT
    드라이버 분석
    파이썬
    commit
    시스템콜
    소수
    리눅스
    자료구조
    파일 입출력
    rubikpi3
  • 최근 댓글

  • 최근 글

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

티스토리툴바