Answer the question
In order to leave comments, you need to log in
How to change array index in assembler?
Good afternoon, I ask for help in the program.
How to make the first term in the program refer to X[i-1] instead of X[i] in the formula Y[i]=A* X[i-1] + B*X[i]
Now in the program just X[i ]
SDATA SEGMENT WORD PUBLIC 'DATA'
A DB -5 ;- это два коэффициента
B DB 17
ARRAY_X DB -1,22,-34,12,-51, 68 ; - массив чисел X
ARRAY_Y DW 6 DUP(0) ; - массив чисел Y
SDATA ENDS
SSTACK SEGMENT PARA STACK 'STACK'
DW 64 DUP (?)
STACK_POINT LABEL WORD
SSTACK ENDS
SCODE SEGMENT WORD PUBLIC 'CODE'
ASSUME CS:SCODE,DS:SDATA,SS:SSTACK
START: MOV AX,SDATA ; Запись сегментного адреса
MOV DS,AX ; Данных в регистр DS
MOV AX,SSTACK ; Определение сегмента стека
MOV SS,AX ; и указателя стека
MOV SP,OFFSET STACK_POINT
; Инициализация исходных данных
MOV SI,0 ; SI содержит индекс массива X
MOV DI,0 ; DI содержит индекс массива Y
MOV CX,6 ; СX:= число элементов массива X
M1:MOV AL, A ; AL:= коэффициент A
CBW ; Расширение байта до слова
MOV BX, AX ; Сохранение коэффициента в BX
MOV AL, ARRAY_X[SI] ; Занесение очередного элемента массива X в аккумулятор
IMUL BX ; AX:=A*X[I]
push AX ; Помещение АХ в стек
MOV AL, B ; AL:= коэффициент B
CBW ; Расширение байта до слова
MOV BX, AX ; Сохранение коэффициента в BX
MOV AL, ARRAY_X[SI] ; Занесение очередного элемента массива X в аккумулятор
IMUL BX ; AX:=B*X[I]
POP BX ; Извлечение A*X[I] из стека
ADD AX,BX ; Y[I]=:A*X[I]+B*X[I]
MOV ARRAY_Y[DI], AX ; запись в массив Y
INC DI ; увеличение DI на 1
INC DI ; увеличение DI на 1
INC SI ; увеличение SI на 1
LOOP M1 ; переход на метку M1
MOV AX,4C00H ; выход из программы
INT 21H ; выполняется функция DOS, номер
SCODE ENDS ; конец кодового сегмента программы
END START ; конец программы
Answer the question
In order to leave comments, you need to log in
MOV AL, ARRAY_X[SI] IMUL BX
Didn't find what you were looking for?
Ask your questionAsk a Question
731 491 924 answers to any question