2017-09-20 13 views
0

이것은 숙제입니다. 그래서 나는 답을 숟가락으로 먹인 것보다 올바른 방향으로 밀고 갈 것입니다.어셈블리 명령어를 16 진수 형식으로 변환 하시겠습니까?

작업 : 교수에서 몇 가지 지침을 사용하여 다음과 같은 지침

SBC R0, R12, R6 

이진 16 진수 인코딩을주고, 내가 올바른 바이너리 포맷 무슨 생각으로이 아래의 일부를 중단 할 수있었습니다 : 여기

Cond 000 Op S Rn Rd 00000000 Rm 
---- --- ---- - ---- ---- -------- ---- 
1110 000 0110 0 1100 0000 00000000 0110 

내 질문은 다음과 같습니다
1) S 플래그 1보다는 0 경우 ? 플래그가 1 또는 0이 주어진 어셈블리 코드만을 기반으로해야하는지 어떻게 알 수 있습니까?

2) 어셈블리 코드가 I-type인지 R-type인지는 어떻게 결정됩니까?

3) 3 비트 000 및 8 비트 00000000 필드가 일정한 이유는 무엇입니까?

EDIT은 : ​​상기 프로세서는 기준으로서이 PDF 사용하는 ARMv7

+0

어떤 종류의 프로세서입니까? – harold

+0

ARM7이어야하며 포함하도록 질문을 편집하십시오 – Mdomin45

+0

[pdf] (http://vision.gel.ulaval.ca/~jflalonde/cours/1001/h17/docs/arm-instructionset)의 10 페이지를 살펴보십시오. .pdf) :) –

답변

2

이고, 하나는 4.5

                         의 데이터 처리 명령어의 형식을 발견                                                                                                           는 이미지를 클릭 Data processing instruction

sbc 같은 지시 어셈블리 구문 <opcode>{cond}{S} Rd,Rn,<Op2><Op2>Rm{,<shift>} 또는 ,<#expression> 인 것을 기억 확대

비트 31-28

이 네 비트는 명령을 조건부로하는 조건부 코드입니다.
명령에 조건부 코드 접미사가 지정되지 않은 경우 AL (항상)을 의미합니다. 제 2 비트 데이터 프로세싱 명령에 대해 항상 0부터 25

-
AL은 1110

27 비트 값으로 코딩된다.
즉치가 두 번째 피연산자로 사용되면 최하위 비트는 1이고 레지스터가 사용되면 0입니다.
r6이 두 번째 피연산자이므로이 세 비트는 모두 0입니다.

비트 24-21
를이 연산 코드, sbc 대한 0110이다.

비트 20이 어셈블리 구문 S 접미어에 대응
.
설정되면 명령이 플래그를 설정하고, 그렇지 않으면 변경되지 않습니다.

비트 19-16
이 Rn으로 제 피연산자 레지스터 , 그것은 r12이며 따라서이 필드 값 1100

비트 15-12
이 대상 피연산자 레지스터는 Rd이면 r0이므로이 필드에는 0000을 사용해야합니다.

비트 11-0
이 필드는 25 비트 (비트 I)의 값에 따라 해석된다.
I = 0이 필드는

11 비트이면 4 -
이동량. 아무런 변화가 어셈블리 명령어에 지정되어 있지 않기 때문에
,이 비트가 0

비트 3이다 - Rm의 0
번째 피연산자 레지스터 이것은 r6 그래서 0110 올바른 값이다.


각 명령어에 대해 사용하는 형식 유형을 기억해야합니다.
구조가 많고 패턴이 발생하고 "데이터 처리 명령어"와 같은 일반적인 범주를 정의 할 수 있지만 궁극적으로 니모닉 노력 (예 : opcode 값, 비트 필드 등)이 있습니다.