Показать сообщение отдельно

  #458  
Старый 19.12.2008, 15:18
xxxxxxxxxxxxxxx
Познающий
Регистрация: 20.01.2008
Сообщений: 65
Провел на форуме:
664107

Репутация: 25
По умолчанию

мне нужно обьяснить как работают кусочки кода (коментами если можна) место откуда нужно писать коментарии в исходнике там немножко - помогите кто может((

Код:
# Переменные
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
 
Ответить с цитированием