2014-10-18 5 views
0

어셈블리에서 명령을 실행하고 CPU 모드에서 볼 때마다 세그먼트가 있습니다. 오프셋과 직후에 명령과 유사한 opcode가 있습니다. 예를 들어 , 내가 명령 mov ax, 1A1Bh을 실행하고 나에게 보여줍니다이 : Opcode Constancy rules

cs:0005 B81B1A mov ax, 1A1Bh 

그래서 내 질문은, 왜 1A1Bh는 연산 코드에 1B1A로 표시 않습니다되어

?

내가 mov ax, dx를 실행할 때마다 나에게 보여줍니다이 :

내가 'MOV'에 대한 연산 코드를 이해 것과
cs:0095 8BC2 mov ax, dx 

B이며, ax 것이 8, 그래서 왜 8BC2로 표시합니까?

답변

2

x86은 리틀 엔디안입니다. 즉, 멀티 바이트 정수의 하위 바이트가 하위 주소에 저장됩니다. 따라서 즉각적인 가치의 바이트가 반대 순서로 나타나는 이유는 무엇입니까?

x86 명령어 인코딩은 간단하지 않습니다. 다양한 니블을 골라 "this is this is mov"라고 말할 수있는 것은 아닙니다. 명령 인코딩을 정말로 이해하려면 x86 명령어 세트 참조를 살펴 봐야합니다. mov의 많은 다른 종류가

http://www.intel.com/content/dam/www/public/us/en/documents/manuals/64-ia-32-architectures-software-developer-instruction-set-reference-manual-325383.pdf

+0

내가 추정 내가 그것을 시간의 톤을 실행하고 변경되지 않았기 때문에 "이 MOV해야합니다." 나는 링크를 확인, 정말 도움이되지 않았다. opcode에서 어셈블리의 일관성을 찾아야합니다 ... –

+1

나는 당신이 무엇을 얻고 있는지 전혀 모른다. 이 문서는 x86 어셈블리에 관한 모든 질문에 대한 * 참고 문서입니다. 특정 * 비트 *는 opcode를 정의하고 다른 비트는 피연산자를 지정합니다. 성취하려고하는 * 특정 * 것이 있습니까? –

0

있습니다. mov을 의미 할 수 오피 코드 바이트 (그들 모두를하지 항상 mov을 의미) 88 통해 8C, 8E, A0 자신의 ModRM 바이트의 r/m 필드가 0 인 경우 BF, C6C7 (마지막 두 단지 mov을 의미 B0 통해 A3을 통해).

도있다 제어 및 디버그 레지스터 /에서 mov의 (0F 23 통해 0F 20) (당신이 mov들과 그룹에 원하는에 따라 다름).

B81B1A은 대상 레지스터 (opcode로 인코딩 됨)를 기준으로 B8에서 BF까지의 명령어 그룹에 속합니다. 목적지가 ax이기 때문에 8을 보았습니다. 8B (8과 B가 모두 opcode의 일부이며 부적절한 피연산자가 아닌 부분)의 8과 아무 관련이 없습니다.

mov은 복잡합니다. 당신은, 예를 들어 간단한 ALU 지침 (add, or, adc, sbb, and, sub, xor, cmp 0 각각 7까지 있습니다) 훨씬 더 일관성을 찾을 것을 할 수 있습니다 자신의 인덱스를 가져 오며 동일한 기능을 가진 모든 인코딩 매개 변수로 사용할 수 있지만 더 이상 신경 쓰지 않습니다 (물론 해당 함수 내에 여러 사례가 있습니다).8086 프로세서에 대한 명령 세트는 기본적인 때문에 잠재적으로 유용한 기는

+0

mov ax, dx와 같은 op 코드를 어떤 식으로 형성 할 것인지 내게 설명 할 수 있습니까? –

+0

@DorianShullman 당신은 opcode가 무엇인지 말할 수 있기 전에 피연산자를 구문 분석해야합니다. – harold

+0

어떻게 피연산자를 결정할 수 있습니까? 나는 실제로 그것들을 사용하지 않았고, 단순히 mov 레지스터의 변형을 썼습니다. –

0

"만 r, r/m 형이 지시"및 "1 피연산자 및 고정 r 필드 지시"는 "피연산자없이 지침"이다

Here 는 (8086의 경우) 이진 MOV 연산 코드들의리스트이다 Here

SR 세그먼트 레지스터 약자 MOD 및 R/M을 설명하는 테이블이다 그들이 ES, CS, SS, DS이다.

datasheet

에서 참조는 분명히 다른 아키텍처의 머신 코드가 다른 될 것입니다하지만 난 쉽게이 어디에서 왔는지에 시작하여 뭔가를 배울 찾을 수 있습니다.

은 (간단히 말해서, 정보를 암호화하는 명령어 세트는 263 페이지에서 시작)