2014-03-25 3 views
0

어셈블리 구문에 약간의 어려움이 있습니다. 필자는 x87 부동 소수점 레지스터에 일련의 매개 변수를 전달해야합니다. 이러한 매개 변수 중 하나는 double이며이 double을 배열로 사용해야합니다.x87 스택의 배열 인덱스에 액세스

fldl 4 (% esp)을 사용하여 스택에로드했지만, 이제 배열 요소에 액세스해야합니다. x86에서 정수 배열을 조작하는 구문을 알고 있지만 x87 스택에있는 동안 배열의 인덱스에 액세스하는 방법을 이해하지 못합니다. 내 부동 소수점 스택에 유일한이기 때문에

, 나는 그것이 % 일 (0) 의견으로 당

+0

이중, 아니 배열 요소가 없습니다. 이 경우 FPU에로드 할 필요가 없습니다. 그냥 바이트 배열로 사용하면됩니다. 그렇지 않으면 정확히 무엇이 필요한지 명확히하십시오. – Jester

+0

어셈블리 파일이 C 파일에서받는 매개 변수는 다음과 같습니다. double * Z. Z [i]에 액세스해야합니다. 이게 도움이 되니? – InfoSecNoob

+0

예, 두 배 이상의 배열을 가짐을 의미합니다. 즉, 두 배 이상의 배열을 의미합니다. 당신은 그들과 무엇을하고 싶습니까? 얼마나 많은 사람들이 있는지 아십니까? – Jester

답변

0

, 당신의 함수는 double* 인수를 가져옵니다에서 찾을 수 있습니다 것을 알고있다. 따라서 4(%esp)은 배열 항목이 저장되는 기본 주소 인 double에 대한 포인터입니다 (각각 8 바이트). i 번째 요소에 액세스하려면 i에 8을 곱하여이를 기본 주소에 추가하십시오. i를 가정하면 그렇게처럼 FPU에이 요소를로드 할 수 있습니다 eax에 : 당신은 어쩌면들로 만들어졌다 바이트를 의미하지 않는

movl 4(%esp), %edx # load array base 
fldl (%edx, %eax, 8) # load the array item whose index is in eax 
+0

fldl이 이중을로드 했습니까? –

+1

@ JensBjörnhager 예, 혼란스럽지 않습니다. 부동 소수점의 접미사는 단 정밀도에서는's', 배정 밀도는'l', 확장 정밀도 (80 비트)는't '가됩니다. [테스트 프로그램] (http://ideone.com/VSUzfa) – Jester

+0

또 다른 증거는 & t 문법이 인간을위한 것이 아님을 보여줍니다. –

관련 문제