мне нужно обьяснить как работают кусочки кода (коментами если можна) место откуда нужно писать коментарии в исходнике там немножко - помогите кто может((
Код:
# Переменные
a:
.long 1
b:
.long 2
c:
.long 3
d:
.long 4
cc:
.byte 10
.text
LC0:
.ascii "a=%d b=%d c=%d d=%d\12\0"
LC1:
.ascii "a=%d b=%d c=%d d=%d\12\0"
.globl _xxx
.def _xxx; .scl 2; .type 32; .endef
_xxx:
pushl %ebp
movl %esp, %ebp
subl $8, %esp
subl $12, %esp
pushl d
pushl c
pushl b
pushl a
pushl $LC0
call _printf
addl $32, %esp
leave
ret
.globl _func
.def _func; .scl 2; .type 32; .endef
_func:
pushl %ebp
movl %esp, %ebp
movl %eax, %ecx
imul %eax
imul %ecx
movl %eax,%edx
movl $2,%eax
mull %ecx
#xor %edx, %edx
subl %eax, %edx
incl %edx
movl %edx,%eax
pop %ebp
leave
ret
.globl _func1
.def _func1; .scl 2; .type 32; .endef
_func1:
pushl %ebp
movl %esp, %ebp
movl 16(%ebp), %eax
imul %eax
movl 12(%ebp), %ebx
imul %ebx
movl %eax, %ecx
movl 16(%ebp), %eax
movl 8(%ebp), %ebx
imul %ebx
addl %ecx, %eax
movl 4(%ebp), %edx
subl %edx, %eax
pop %ebp
leave
ret
.globl _main
.def _main; .scl 2; .type 32; .endef
_main:
pushl %ebp
movl %esp, %ebp
#Начиная отсюда нужно написать обьяснения как #работают задачки
#Выполнить сравнение двух чисел a и b: если a>b, то #a=a-b; если a=b, то a=2*a; если a<b, то b=b-a.
movl $20, %ecx
xorl %ebx, %ebx
h:
movl %ecx, %eax
imul %eax
addl %eax, %ebx
movl %ebx, a
loop h
call _xxx
#Выполнить сравнение двух чисел a и b: если a>b, то #a=a-b; если a=b, то a=2*a; если a<b, то b=b-a.
movl a, %eax
movl b, %ebx
cmpl %ebx, %eax
jg v
je x
jl z
v:subl %ebx, %eax
movl %eax, a
jmp s1
x:movl a, %eax
imul $2, %eax
movl %eax, a
jmp s1
z:mo
vl b,%ebx
movl a, %eax
subl %eax, %ebx
movl %ebx, b
jmp s1
s1:
call _xxx
#Создать функцию y(x)=x3-2*x+1, которая через #регистр eax получает аргумент и возвращает #результат.
movl a, %eax
call _func
movl %eax, a
call _xxx
#Создать функцию y(x,a,b,c)=a*x2+b*x-c, которая #через стек получает аргументы x, a, b, c и возвращает #результат
pushl x
pushl a
pushl b
pushl c
call _func1
movl %eax, c
addl $16,%esp
call _xxx
#Вычислить N! (N=30) двумя способами: используя цикл, #рекурсию.
movl $1, %eax
movl $1, %ebx
x3:
cmpl 30, %eax
jle x1
jg x2
x1:imul %eax, %ebx
incl %ebx
jmp x3
x2:m
ovl %eax, d
call _xxx