인프런 영문 브랜드 로고
인프런 영문 브랜드 로고

인프런 커뮤니티 질문&답변

신지웅님의 프로필 이미지
신지웅

작성한 질문수

ARM Cortex-M 프로세서 프로그래밍

s337_인라인 어셈블러

오퍼랜드 순서문의

작성

·

182

1

(strexb %0, %2 %1" : "=&r"(result), "=Q"(*addr): "r" ((uint32_t)value));

여기에서  %0 과 %1 이 출력 오퍼랜드이고 %2가 입력 오퍼랜드라고 하셨는데  출력오퍼인지 입력오퍼인지 어떻게 구분하는건지요?  %0하고%2 가 순서대로 result 와 addr 이고,  value 가 %1 인줄 알았는데  가운데 있는 %2가 왜 입력 오퍼랜드인지 궁금합니다.  (순서대로인줄 알았음)

답변 1

0

홍영기님의 프로필 이미지
홍영기
지식공유자

반갑습니다:) 신지웅님

우선 "=&r"(result), "=Q"(*addr): "r" ((uint32_t)value 는 순서대로 %0 %1 %2 로 맵핑됩니다.

그리고, 궁금하신 부분이었던

입력이냐 출력이냐는 연산 방향에 의해 결정됩니다. 예를들어 R0=1 의 경우 숫자 1이 R0 에 저장되죠?

이때 R0 는 출력 오퍼랜드로 보고 1은 입력 오퍼랜드로 바라보는 식입니다.

이번 사례에서 사용된 명령 STREXB 시놉시스 STREXB{cond} Rd, Rt, [Rn] 의 경우

연산이 Rd=[Rn] 와 [Rn]=Rt 로 각각 처리되므로

Rd 와 [Rn] 는 출력 오퍼랜드

Rt 가 입력 오퍼랜드가 되겠죠

추가 궁금한 점 있으시면 다시 댓글 남겨주세요.

신지웅님의 프로필 이미지
신지웅
질문자

답변감사드립니다. 그럼 %0,%1,%2  이 숫자의 크기? 로 순서가 판별된건가요?

예를들어 (strexb %2, %1 %0" : "=&r"(result), "=Q"(*addr): "r" ((uint32_t)value)); 이면

적혀있는 순서에 상관없이  result, addr, value 에 순서대로(숫자의크기) %0 %1 %2 로 맵핑 되는것인가요? 

홍영기님의 프로필 이미지
홍영기
지식공유자

맞습니다 :)

신지웅님의 프로필 이미지
신지웅

작성한 질문수

질문하기