• Добро пожаловать на компьютерный форум Tehnari.ru. Здесь разбираемся с проблемами ПК и ноутбуков: Windows, драйверы, «железо», сборка и апгрейд, софт и безопасность. Форум работает много лет, сейчас он переехал на новый движок, но старые темы и аккаунты мы постарались сохранить максимально аккуратно.

    Форум не связан с магазинами и сервисами – мы ничего не продаём и не даём «рекламу под видом совета». Отвечают обычные участники и модераторы, которые следят за порядком и качеством подсказок.

    Если вы у нас впервые, загляните на страницу о форуме и правила – там коротко описано, как задать вопрос так, чтобы быстро получить ответ. Чтобы создавать темы и писать сообщения, сначала зарегистрируйтесь, а затем войдите под своим логином.

    Не знаете, с чего начать? Создайте тему с описанием проблемы – подскажем и при необходимости перенесём её в подходящий раздел.
    Задать вопрос Новые сообщения Как правильно спросить
    Если пришли по старой ссылке со старого Tehnari.ru – вы на нужном месте, просто продолжайте обсуждение.

Работа с массивами на ассемблере

vladis222

Ученик
Регистрация
25 Июл 2012
Сообщения
7
Реакции
0
Баллы
0
Работа с массивами на ассемблере

Здравствуйте,прошу вашей помощи в лабораторной работе,связанной с массивами на языке ассемблера.
Задание:
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

Код программы:
Код:
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 esi,0 ;esi=0
mov ecx,5 ;ecx= k=5

for_k:
movzx edx,N                ;В регистр edx помещаем значение N
movsx eax,arr_x[ecx] ;В eax лежит значение X[k]
shl eax,2                        ;eax=4 X[k]
                                       ;Теперь переходим к работе с X[2N-k]
shl edx,1                         ;dx =2 N
sub edx,ecx                    ;edx=2N-k
movsx ebx,arr_x[edx]  ;ebx= X[2N-k]
cwd                                ;знаковое расширение
idiv ebx                          ;eax=4*X[k]/X[2N-k]
mov arr_y[ecx*2],dx    ;Y[k]=4*X[k]/X[2N-k]
;Переходим ко второй части выражения :
mov eax,ecx                  ;eax=ecx=k
mul ecx                          ;eax=k^2
movzx esi,N                   ;esi=N
sub esi,ecx                      ;esi=N-k;
imul arr_x[esi+1]          ;eax=k^2*X[N+1-k]
mov ebx,ecx                   ;ebx=ecx=k
add ebx,1                        ;ebx=k+1
idiv ebx                           ;eax=k^2*X[N+1-k]/(k+1)
mov esi,ecx                     ;esi=k
idiv arr_x[esi+1]            ;eax=k^2*X[N+1-k]/(k+1)/X[k+1]
add arr_y[esi*2],ax        ax=4*X[k]/X[2N-k]+k^2*X[N+1-k]/(k+1)/X[k+1]
sub ecx,1
jnz for_k
invoke ExitProcess, 0      ; завершение работы
main endp
end main
При вычислениях значений массива выходного(arr_y) в значениях находятся явно неверные значения, объясните пожалуйста в чем ошибка в этом коде?
 
Назад
Сверху