우선, StackOverflow에 오신 것을 환영합니다. 훌륭한 장소, 정말로 그렇습니다.
이제 처음부터 도움을 받으십시오. 많이; 아주 많이.
당신은 나와 당신, 그리고 다른 모든 사람들을 대단히 도울 수있는 좋은 의견을 가지고 있습니다. 그러나 그것들을 읽는 것이 괴로운 것은 너무 추합니다.
공백, 많은 행, 빈 줄 및 서로 관련된 작은 그룹으로 지침을 그룹화하는 방법은 다음과 같습니다.
조건부 점프 후 빈 줄 하나를 삽입하고 절대 점프 후 빈 줄 두 개를 삽입하십시오. (오래된 속임수, 가독성을 위해 큰 작업)
둘째, 주석이 깔끔하게 정렬되도록 정렬하십시오. 그것은 천 배나 좋아 보인다.
90 초짜리 텍스트가 나와 함께 준비되어 있습니다. 저를 믿으십시오, 전문가는이 종류의 소스 코드로 당신을 천 시간 더 잘 존중할 것입니다 ...
pushl %ebp // What i think is happening here is that we are creating more space for the function.
movl %esp,%ebp // Here i think we are moving the stack pointer to the old base pointer.
movl 8(%ebp),%edx // Here we are taking parameter int a and storing it in %edx
movl 12(%ebp),%eax // Here we are taking parameter int b and storing it in %eax
cmpl %eax,%edx // Here i think we are comparing int a and b (b > a) ?
// No, Think like this: "What is the value of edx with respect to the value of eax ?"
jge .L3 // edx is greater, so return the value in eax as it is
movl %edx,%eax // If the term is not met here it will return b
// (pssst, I think you're wrong; think it through again)
.L3:
movl %ebp,%esp // Starting to finish the function
popl %ebp // Putting the base pointer in the right place
ret // return
지금 당장 귀하의 문제를 다시 확인하십시오. 그가 받고있는 것은 비교 명령과 관련된 JGE
명령의 "감지"입니다. 여기
는 "학문적 경험"
이 비즈는 cmpl %eax,%edx
명령 이러한 종류의 생존을 이해하는 데 필요한 혼동 - 오 - 매틱 물건, 지침
의 형태 중 하나 "
비교할"입니다
은? "... 소스 피연산자에 대한 대상 피연산자의 값이 무엇입니까 ... ", 그 구문을 볼 때이 같은 아이디어 무언가를 형성
주의 할을 시도 내가 절대적으로 n AT & T 구문을 사용하면 좋으므로 누구나이 문제를 해결할 수 있습니다.
어쨌든,이 특정한 경우에, 당신은 문구 같은 당신의 마음에있는 생각 ...
"... 내가 cmpl %eax,%edx
을보고 그렇게 생각 할 수 있습니다 eax
에 대해, edx
의 값이 ...조건부 점프 인 다음 명령의 의미 ","
당신은 다음과 당신의 마음에 그 문장을 완성 ".
는 인간의 뇌의 패러다임 프로세스는이 같은 문장을 형성하기 위해 밖으로 작동 ...
"eax
에 관하여 ... 는 edx
의 값이 크거나 같은, 그래서 ... 점프"당신이 a
및 b
의 위치에 대해 올바른지 다음,
그래서 당신은 c 에 "... ... b
의 값, a
에서 그 값이 크거나 관련하여, 그래서 나는을 이동합니다"
을 패러다임 뇌 스크램블러를하고 이런 식으로 뭔가를 얻을 수 ... 을
는 JGE
은 "반대의 의미는"
자, 이제 그렇게 C에서 그 return
을 발생 ("이하의 경우 점프"즉,) JL
의, 당신이 경우 위치하고 있습니다, 이것의 이해를 얻으려면과 관련된 은 조립 언어에서 ret
명령 그러나 그것은 같은 것이 아닙니다.
C 프로그래머는 어셈블리 언어 서브 루틴 Eax
에 값을 배치합니다
- 그 의미하는 것은 ... "... 이 함수는 int로을 ... 반환"말할 때 서브 루틴은
Ret
명령
- 서브 루틴은 다음 실행할 후 스택을 고정하고 산뜻한 위해 다시 넣어
난이도가 한 번 더 높아집니다.
이 다음과 같은 조건 점프는
JG
JGE
JNG
JL
JLE
... 산술 비교 연산을 체결
에 적용 JNL
저기있다! 이 모든 일에서 당신을 망치려는 함정!
부호가 있거나 부호가없는 비교를 하시겠습니까 ???
그런데, 서명되지 않은 숫자가 서명 된 숫자와 비교되는 첫 번째 함수처럼 아무 것도하지 않은 것을 본 적이 없습니다. 심지어 합법적인가?
그래서 어쨌든, 우리는 이러한 모든 사실을 놓고, 우리가 얻을 : 이 어셈블리 언어 루틴 리턴 값을 a
에가, 그렇지 않으면 b
의 값을 반환 b
의 값보다 작은 경우.
이 값은 부호있는 정수로 평가됩니다.
는 (. 내가 바로 것을 찾은 것 같아,. 누군가가 정말 전혀 어셈블러의 구문을 좋아하지 않는 나의 논리를 확인)
을 어쨌든, 나는 당신이 사람을 물어보고 싶은하지 않는 것이 합리적으로 확신 인터넷에서 특정 숙제 문제에 대한 구체적인 대답을 제공하기 때문에이 설명에서 알아낼 수 있도록 남겨 두겠습니다.
필자는 비교와 서명 및 서명되지 않은 사업의 논리와 의미에 대해 충분히 설명 했으므로이 문제를 해결할 수 있습니다.
아, 다시 말하지만, 필자는 항상 Intel 문법 (예 : Masm, Tasm, Nasm, 무엇이든)을 사용합니다. 그래서 내가 거꾸로 뭔가를 가지고 있다면, 저를 위해 그것을 바로 고쳐주십시오.
우리는 당신을 위해 숙제를하지 않을 것입니다. –
@Puciek : 실제로 OP에는 생성 된 명령에 대한 추정 된 해석을 보여주는 주석이 있습니다. –
농담입니까? – drleifz