2013-11-20 1 views
-1

내가 만든 변수 :어셈블리 언어 - 곱

Y sword 8 
Z sword 20 
T sword 68 
B sword ? 

그리고 난 다음 사항을 평가해야, B는 = 4T - (8 + Z) + Y는

난에 어떻게 정말 익숙하지 않다 이 작업을 수행. 누군가 나를 이해할 수있게 도와 줄 수 있습니까? 검 가정

+6

코드를 작성한 CPU는 무엇입니까? –

+0

무슨 뜻인지 모르겠습니다. 난 그냥 비주얼 스튜디오를 사용하여 32 비트 컴퓨터 에서이 일을하려고 해요. –

+2

그러면 가장 가능성이 높은 x86을 대상으로합니다. –

답변

1

16 비트 숫자를 서명 :

movsx eax,sword ptr T 
movsx ebx,sword ptr Y 
shl eax,2   ; faster than imul 
movsx edx,sword Z 
add eax,ebx 
add edx,8 
sub eax,edx 
mov sword ptr B,ax 

그런 다음 약간의 최적화 :

movsx eax,sword ptr T 
movsx ebx,sword ptr Y 
movsx edx,sword Z 
lea eax,[ebx+eax*4] ; less code than shr 
add edx,8 
sub eax,edx 
mov sword ptr B,ax  
+0

나는 네가 한 일을 정말로 이해하지 못한다. 나는 어셈블리 언어에 익숙하지 않고 방금 배우기 시작했다. I는 이러한 계산을 수행하기 위해 할당 받았다 : 를 = Z - Y + T B = 4T - (8 + Z) + Y C1 = 4 (T-8) + Z + Y D = 개조 (T , 8) E = Y^2 + Z –

+3

@SameerAnand : 스택 오버플로는 학습을 시작하기에 좋지 않습니다. – Artur

+0

질문에 표현한 표현을 컴파일 할 때 (열악한) 컴파일러에서 생성하는 x86 어셈블리 명령어로 변환했습니다. Visual C++에서 어셈블러를 생성 할 수 있지만, 첫 번째 어셈블리 언어 인 경우 어셈블리 언어를 먼저 읽어야합니다. –

-1

여전히 어셈블리의 중요한 개념이다 배우면서 이러한 목표를 달성하는 쉬운 방법 C/C++로 프로그램을 작성하고 컴파일러가 어셈블리를 출력하게하십시오. 거기에서 구문을 연구하고 그 중 하나가 의미를 갖기 시작하는지 확인합니다. 이것은 실제로 제가 x86 어셈블리를 배웠던 방법입니다 ...