Работа с массивами на ассемблере
Здравствуйте,прошу вашей помощи в лабораторной работе,связанной с массивами на языке ассемблера.
Задание:
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_y) в значениях находятся явно неверные значения, объясните пожалуйста в чем ошибка в этом коде?
Здравствуйте,прошу вашей помощи в лабораторной работе,связанной с массивами на языке ассемблера.
Задание:
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