Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Оптимизация кода программы для работы с массивами 
:(
    Опции темы
vladis222
Дата 26.11.2013, 21:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 26.11.2013

Репутация: нет
Всего: нет



Здравствуйте,нужна ваша помощь,я написал код программы для работы с массивами, но он,к сожалению, не оптимизирован как нужно,а ассистент кафедры  дал задание оптимизировать заданный код,подскажите,пожалуйста что в нем можно исправить,какие ошибки если есть ?
Задание :

Y[k] = 4*X[k]/X[2N-k] + k^2*X[N+1-k]/(k+1)/X[k+1]
                     N=5     k=1,2,...5

Код программы:
Код

.model flat, stdcall
include kernel32.inc
includelib kernel32.lib
.data
; данные программы
 
 
arr_x db 0,1,2,3,4,5,6,7,8,9,10,11    ;Размер каждого элемента 1 байта
arr_y dw 7 dup (0)                    ;Размер каждого элемента 2 байта
N db 5
 
.code
main proc
    ; код главной функции
    mov si,0    ;si=0
    mov cx,5    ;cx= k=4
    
for_k:
    mov ax, 4    ;ax=4
    movzx dx, N            ;dx= N=5
    mov si,cx            ;si=cx= k    
    movsx bx, arr_x[si]    ;bx= X[k]
    imul ax, bx            ;ax= 4*X[k] ???
    mov bx, ax            ;bx= 4*X[k]
    mov ax,dx            ;ax = N
    imul ax, word ptr 2    ;ax= 2N ???
    sub ax,cx            ;ax= 2N-k
    mov si,ax            ;si= 2N-k
    mov ax,bx            ;ax=bx= 4*X[k]
    mov bl, arr_x[si]
    idiv bl                ;ax= 4*X[k]/X[2N-k]
    movsx esi,cx        ;esi=cx= k
    movsx dx, al
    mov arr_y[esi*2],dx    ;Y[k]= 4*X[k]/X[2N-k]
    mov ax,cx            ;ax= k
    mul cx                ;ax= k^2 ???
    movsx si,N            ;si= N
    sub si,cx            ;si= N-k
    imul arr_x[si+1]    ;ax= k^2*X[N+1-k] ???
    cwd
    mov bx,cx            ;bx= k
    add bx,1            ;bx= k+1
    idiv bx                ;al= (k^2*X[N+1-k])/(k+1)
    mov si,cx            ;si= k
    idiv arr_x[si+1]    ;al= (k^2*X[N+1-k])/(k+1)/X[k+1]
    movsx ax,al
    movsx esi,cx
    add arr_y[esi*2], ax ;ax= 4*X[k]/X[2N-k] + 
                        ;    + (k^2*X[N+1-k])/(k+1)/X[k+1]
    dec cx
    test cx,cx        ;ax ? bx сравнение(ax-bx)
    jnz for_k
 
    invoke ExitProcess, 0    ; завершение работы
main endp
end main


PM MAIL   Вверх
kolobok0
  Дата 4.12.2013, 22:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 64
Регистрация: 24.12.2008

Репутация: нет
Всего: 2



Цитата(vladis222 @ 26.11.2013,  21:40)
...задание оптимизировать...что в нем можно исправить...

1) оптимизировать что? если размер - одно. если скорость - другое. как правило это взаимоисключающие вещи. и обычно компиляторы помимо настроек стремяться к сбалансированному подходу.
2) если Вы возьмёте скорость выполнения ассемблерных инструкций для данного типа проца или МК, и попытаетесь исключить их из общей логики(особенно циклов если есть) работы - то получите профит. Например в Вашей формуле наверняка можно попытаться заменить такие операции как деление...
3) попытаться использовать особенности двоичной системы и конкретного железа. Ну например: сдвиг в право два раза есть деление на 4. Или скажем отбросив с права слово от 64 разрядов Вы делите на 65535 smile и т.д..

удачи вам
(круглый)
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Asm для начинающих"
MAKCim
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • Не забывайте пользоваться кнопкой КОД.
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к разделу форума. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, MAKCim.

 
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Asm для начинающих | Следующая тема »


 




[ Время генерации скрипта: 0.0375 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.