실제로 사용할 수있는 메모리 포인트는 무엇입니까? 그것은이 C 코드에서 직접 코딩 것조립 인텔 x86을 사용하여 인수를 정의 할 수 있습니다.
int power(int x, int y); *
;*****************************************************************************
%define x [ebp+8]
%define y [ebp+12]
power:
push ebp
mov ebp, esp
mov eax, y ;move y into eax
cmp eax, 0 ;compare y to 0
jne l10; ;if not equal, jump to l10
mov eax, 1 ;move 1 into eax
jmp l20; ;jump to l20, the leave, ret label
l10:
mov eax, y ; move y into eax
sub eax, 1 ; y-1
push eax ; push y-1 onto stack
mov ebx, x ; move x into ebx
push ebx ; push x onto stack
call power ; call power/recursion
add esp, 8 ; add 8 to stack(4*2) for the two vars
imul eax, x ; multiply the returned value from call by x
l20:
leave ; leave
ret ;ret
: 내가 힘이 어셈블리 코드 (A, B) 재귀에 의해이
이int power_c(int x, int y) {
if (y == 0) {
return 1;
} else {
return power_c(x, y - 1)*x;
}
}
ASM은 코드가 완벽하게 작동을, 어떤이 조정이 좋을 것 제안 , 나는 아직 조립에 익숙하지 않다. 내 질문은, 내가 실제로 인수를 정의하는 데 사용할 수있는 주소는 무엇입니까? 여기에 두 개가 있는데 두 개를 사용합니다.
%define x [ebp+8]
%define y [ebp+12]
내가 더 있으면 그냥 늘리면됩니까? 모두 int, 4bytes라고할까요?
%define x [ebp+8]
%define y [ebp+12]
%define z [ebp+16]
%define a [ebp+20]
%define b [ebp+24]
내가 이상의 인수를 정의 할 필요가 코드를 사용하다가 충돌했습니다, 난 그냥이 알아낼 수 없습니다, 어떤 도움을 크게 감상 할 수있다.
x와 y는 지역 변수가 아닌 함수 인수입니다. 그들은 다르게 취급됩니다. – AShelly
나는 본다. 나는 그들이 전혀 다르지 않다고 생각하지 않았다. 이 점을 명확히 해 주셔서 감사합니다. – Monkleys
@AShelly 여기, https://en.wikibooks.org/wiki/X86_Disassembly/Functions_and_Stack_Frames에서 설명했습니다. 질문에서 변경, 편집을 확인하십시오. – Monkleys