2012-02-21 2 views
0

어떻게하면이 사실을 "true"로 만들 수 있습니까?어셈블러 패치가 구문과 분기를 비교하십시오.

CMP    R0, #0 

내가하고 싶은 것은, 예를 들면은

CMP R0,R0 or CMP #0, #0 

00 28

는 연산 코드합니다. 나는 결과없이 28 28을 해보려고합니다! 다른 질문 어떤 종류의 문법이 BNE.W입니까? 이게 뭐야 마지막 W? BE에서 MOD를 어떻게 할 수 있습니까? 연산 코드는 40 F0 65 85

참고 : 모든 연산 코드는 엄지 손가락 모드입니다.

* EDIT Mac 용 armv7 컴파일러가 있습니까?

+0

어떤 CPU입니까? 적절한 태그를 추가하십시오. –

+0

암 프로세서! 죄송합니다 –

+0

'CMP R0, R0' 또는'CMP # 0, # 0' 명령을 어셈블하고 위의 opcode를이 것으로 대체하십시오. – AusCBloke

답변

1

CMP R0, R0 또는 CMP #0, #0을 간단하게 조합하여 해당 지침에서 필요한 opcode를 추출 할 수 있습니다.


또 다른 방법은 ARM 참조 설명서를보고 수동으로 opcode를 작성하는 것입니다. This은 빨리 발견 된 ARMv5 설명서이며 7.1.22에는 두 개의 레지스터 비교를위한 opcode 작성에 대한 세부 사항이있는 CMP <Rn>, <Rm>이 있습니다. 세부 사항은 내가 게시하려고하기 직전에 발견 된 ARMv7 설명서와 동일합니다.

비트 15-6이 0 1 0 0 0 0 1 0 1 0 인 경우 비트 5-3은 첫 번째 레지스터 (숫자 0은 R0의 경우 3 비트로 표시)의 비트이고 비트 2-0이 두 번째 레지스터 인 경우 (R0)입니다. 그래서 옵 코드는 이제 다음과 같습니다 진수의

0 1 0 0 0 0 1 0 1 0 (CMP) 000 (R0) 000 (R0)

100001010000000 그러므로 리틀 엔디안 위해 당신이 필요로하는 2 바이트 80 42이다, 4280입니다.

위에서 알 수 있듯이 어셈블러에서 처리하도록하는 것이 훨씬 빠릅니다.