Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 12.11.2013, 22:15   #1
vladis222
Пользователь
 
Регистрация: 26.09.2011
Сообщений: 24
По умолчанию Оптимизация программы

Код:
.386
.model flat, stdcall
include kernel32.inc
includelib kernel32.lib
.data
	; данные программы
	a db 7
	b db 9
	y dw ?	
.code
main proc
	; код главной функции
	movsx ax,a		;ax=a
	movsx cx,b		;cx=b
	cmp ax,cx		;ax ? bx сравнение(ax-bx)
	jg greater		;ax>bx (a>b)
	jl less			;ax<bx (a,b)
	jmp eql			;ax=bx (a=b)

	;если a>b
	greater:
		;то y=(a+b)/a+23b*a^3
		;movsx ax,a		;ax=a
		test ax,ax		;если a==0 то
		jz divnull	    ; переход на метку divnull
		add ax,cx		;ax=a+b
		cwd
		movsx cx,a
		idiv cx			;ax=ax/a
		mov y,ax		;y=ax
		mov ax,23		;ax=23
		movsx cx,b
		imul ax,cx		;ax=23b
		movsx cx,a		;cx=a
		imul cx			;ax=23b*a
		imul cx			;ax=23b*a^2
		imul cx			;ax=23b*a^3
		add ax,y
		mov y,ax		;y=(a+b)/a+23b*a^3
		jmp endlbl		;в конец программы

	less:
	;если a<b
		;то y=(a-b)^4
		movsx ax,a		;ax=a
		sub ax,cx		;ax=a-b
		mov y, ax		;y=ax=(a-b)
		imul y			;ax=(a-b)^2
		imul y			;ax=(a-b)^3
		imul y			;ax=(a-b)^4
		mov y, ax		;y=(a-b)^4
		jmp endlbl		;в конец программы

	eql:
	;если a=b
		;то y=a
		movsx ax,a		;ax=a
		mov y,ax		;y=ax=a
		jmp endlbl		;в конец программы

	divnull:			;на 0 делить нельзя!
	endlbl:

	invoke ExitProcess, 0	; завершение работы ;a>b y=29810,a<b y=0 a=b y=6`
main endp
end main
Прошу вашей помощи в оптимизации кода,дали задание код упростить,подскажите,пожалуйста в чем его можно упростить
vladis222 вне форума Ответить с цитированием
Старый 13.11.2013, 09:37   #2
DiemonStar
Старожил
 
Регистрация: 08.02.2012
Сообщений: 2,173
По умолчанию

Код:
        jg greater		;ax>bx (a>b)
	jl less			;ax<bx (a,b)
	jmp eql			;ax=bx (a=b)
можно сократить как:
Код:
	jl less			;ax<bx (a,b)
	je eql			;ax=bx (a=b)
Правильно поставленная задача - три четверти решения.
DiemonStar вне форума Ответить с цитированием
Старый 14.11.2013, 12:47   #3
alexcoder
Форумчанин
 
Регистрация: 31.05.2009
Сообщений: 786
По умолчанию

Код:
		mov y, ax		;y=ax=(a-b)
		imul y			;ax=(a-b)^2
		imul y			;ax=(a-b)^3
		imul y			;ax=(a-b)^4
		mov y, ax		;y=(a-b)^4
заменить
Код:
		imul ax			;ax=(a-b)^2
		imul ax			;ax=(a-b)^4
		mov y, ax		;y=(a-b)^4
Помощь с программами:
vk.com/alexcoder1
e-mail: informatik101@mail.ru
alexcoder вне форума Ответить с цитированием
Старый 14.11.2013, 13:49   #4
DiemonStar
Старожил
 
Регистрация: 08.02.2012
Сообщений: 2,173
По умолчанию

да и вычисление (a + b)/a + 23*b*a^3 можно сделать проще:

Код:
  mov ax, a 
  imul ax   ; a^2
  imul ax   ; a^4
  imul b    ; b*a^4
  mov bx, 23
  imul bx  ; 23*b*a^4 
  add ax, b ; b + 23*b*a^4
  idiv a  ; b/a + 23*b*a^3
  inc ax ; (a + b) / a + 23*b*a^3
Правильно поставленная задача - три четверти решения.
DiemonStar вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Оптимизация программы danil123 Общие вопросы Delphi 8 20.01.2013 19:34
оптимизация программы Arsenx777 Работа с сетью в Delphi 1 28.08.2011 14:00
Оптимизация программы 0479 Помощь студентам 7 09.03.2011 17:15
Оптимизация программы Lenya Помощь студентам 2 05.01.2011 18:56