나는 C로 몇 가지 어셈블리 코드를 연습하고 두 가지 질문에 도움이 필요합니다. 괜찮아 보인다 objdump를 GCC의 기반으로하지만어셈블리 코드를 C로
질문 (어셈블리 코드에 가지 새로운 정지) 나는 컴퓨터없이이 작업을 수행 할 수 있는지 확인하려면 1 :
q1:
pushl %ebp
movl %esp, %ebp
subl $4, %esp
cmpl $0, 8(%ebp)\\ compare variable1 to zero
jle .L2 \\jump if less than or equal to zero
movl $1, -4(%ebp)\\ ?? variable2 = 1??
jmp .L4\\else
.L2:
movl $0, -4(%ebp)\\ variable2 = 0
.L4:
movl -4(%ebp), %eax\\ variable2 = variable1
leave
ret
내가 가진 무엇 이었습니까
int main(int x, int z)
{
if (x < 0)
z = 0;
else
z = x;
}
그러나 나는 movl $1, -4(%ebp)
의 목적이 무엇인지 확실하지 않았습니다.
질문 2 : 나는 정보
int main(int x)
{
int result;
if (x <= 1){
for (result=1; x != 1; x = x-1)
result *= x;}
else{return result;}
}
내 논리는 그 중 하나에 맞는지 확실하지
을 해석하는 방법fn:
pushl %ebp
movl $1, %eax
movl %esp, %ebp
movl 8(%ebp), %edx
cmpl $1, %edx\\ compare variable1 to 1
jle .L4\\ less than or equal jump.
.L5:
imull %edx, %eax\\ multiply variable1 by variable 2
subl $1, %edx\\ variable1 -1
cmpl $1, %edx\\ compare variable1 with 1
jne .L5 Loop if not equal
.L4:
popl %ebp\\ return value
ret
.
고마워요. 왜 그렇지 않은지 설명해 주겠다고 생각하니? 'jne'이 비교를 평등하지 않게 만들 거라 생각했기 때문이죠? – user3395013
@ user3395013 : for 루프 조건은'jne'을 읽고,'jle'은 실제로 루프의 _inside_입니다. –
아 맞습니다. 두 조건이 있습니다. 그렇다면'if'도 필요합니다. – Jester