2013-05-14 4 views
0

어떻게 프로그램 명령어를 넣을 까? c = a-b; 기계어 명령에서? 나는 op 코드, a = 80, b = 81, c = 82 및 프로그램 카운터 = 30 hex의 메모리 주소를 제공 받았다. 명령어는 16 비트 길이이며 4 비트 연산 코드, 레지스터 용 4 비트 및 메모리 주소 용 16 비트입니다.프로그램에 대한 기계어 명령어

그냥 시작하는 방법을 공식적인 방법을 알아야합니다. 왜냐하면 저는 제 강사가 가르치는 것을 정말로 이해하지 못하기 때문입니다. 내가 명확한 지시를 얻을 수 있다면, 나는 내 강사의 도움없이이 일을 할 수 있다고 확신한다.

+1

왜 강사에게 질문하지 않았습니까? –

+0

나는 정말로 그를 이해하지 못하기 때문에 나는 그에게 묻고 싶지 않다. LOl –

+0

좋아, 시작하는 방법은 다음과 같다. 전혀 빼는 방법을 찾아라. 여러분은 뺄셈을위한 지침을 가지고 있을지도 모릅니다. 그렇지 않다면, 구현 가능한 것을 얻을 때까지'a-b == ~ (~ a + b)'또는 다른 식별자를 사용할 수 있는지보십시오. 이 경우 두 레지스터를 빼기 만 할 수 있습니다.이 경우 메모리에서 레지스터로 'a'와 'b'의 값을 얻는 방법을 찾아야합니다. 그런 다음 어떻게 결과를 'c'로 가져올 수 있는지 알아보십시오. – harold

답변

1

니모닉은 다음과 같이 보일 것입니다 :

mov eax, [a] ; move 4 bytes starting at address a to the eax register 
sub eax, [b] ; subtract 4 bytes starting at memory address b from the eax register 
mov [c], eax ; move the contents of the eax register to the memory address of c 
작업 ( mov, sub)에 대한 연산 코드에

당신 대체에 대한 레지스터 주소 (eax), (a, b, c의 메모리 주소) 그리고 나서 결과는 실제 기계 명령입니다. 나는 여기에 숫자가 32 비트 정수라고 가정하고 있으므로 x86 프로세서의 경우 32 비트 길이 인 eax 레지스터를 사용하고 있지만 사용하는 레지스터의 세부 사항은 임의로 지정할 수 있습니다. 번호. mov 명령어는 제공된 메모리 주소에서 시작하여 레지스터가 보유 할 수있는 바이트 수만큼 읽습니다.

이 예제에서는 명시 적으로 프로그램 카운터에 대해 아무 것도하지 않아도됩니다. CPU는 각 명령을 실행할 때 프로그램 카운터를 증가시킵니다.