Как поменять индекс массива в ассемблере? - Assembler/TASM

Узнай цену своей работы

Формулировка задачи:

Добрый день, прошу помощи в программе. Как в программе сделать, чтобы первое слагаемое ссылалось на

X[i-1]

вместо

X[i]

в формуле Y[i]=A*

X[i-1]

+ B*X[i] Сейчас в программе просто 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                               ; конец программы

Решение задачи: «Как поменять индекс массива в ассемблере?»

textual
Листинг программы
MOV AL, ARRAY_X[SI-1]                     ; Занесение очередного элемента массива X в аккумулятор

Объяснение кода листинга программы

  1. В данном коде используется инструкция MOV, которая предназначена для переноса данных между регистрами процессора и памятью.
  2. AL - это регистр, который используется для хранения данных в формате 8 бит.
  3. ARRAY_X - это название массива, который хранится в памяти компьютера.
  4. SI - это регистр, который используется для хранения индекса элемента массива.
  5. SI-1 - это выражение, которое вычисляет предыдущий индекс элемента массива. Значение вычитается из SI на единицу.
  6. MOV AL, ARRAY_X[SI-1] - это выражение, которое занесает элемент массива X с предыдущим индексом в аккумулятор.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

9   голосов , оценка 3.667 из 5
Похожие ответы