Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 28.06.2013, 21:52   #1
Gtnz8
Пользователь
 
Аватар для Gtnz8
 
Регистрация: 09.08.2012
Сообщений: 95
По умолчанию Прошу объяснить.

Есть программа суммирующая два массива с сохранение результата в третьем массиве.
Код:
use16
org 100h
mov al,[n]
mov bl,2
mul bl
movzx cx,[n]
mov di,0
mov si,8
metka:
mov ax,[arr2 + si]
sub ax,[arr1 + di]
add di,2
sub si,2
mov[arr3 + si],ax
loop metka
mov ax,4c00h
int 21h
n db 5
arr1 dw 10,20,30,40,50
arr2 dw 500,400,300,200,100
arr3 dw 5
Я не могу понять как работает вот эта строчка кода[CODEmov [arr3 + si],ax][/CODE] Пишу так потому что так учили, не понимая как это работает, а это никуда не годится.
Мне не понятно как указывается смещение.

Последний раз редактировалось Gtnz8; 28.06.2013 в 21:55.
Gtnz8 вне форума Ответить с цитированием
Старый 28.06.2013, 22:10   #2
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

а что именно непонятного?
переместить содержимое регистра ax в ячейку arr3 + si.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 28.06.2013, 22:21   #3
Gtnz8
Пользователь
 
Аватар для Gtnz8
 
Регистрация: 09.08.2012
Сообщений: 95
По умолчанию

А если написать arr3 + di, программа выполнится корректно?
И ещё вопрос,можно ли шаг смешения указать непосредственно в команде sub ax[]?
Gtnz8 вне форума Ответить с цитированием
Старый 28.06.2013, 23:01   #4
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Цитата:
Сообщение от Gtnz8 Посмотреть сообщение
А если написать arr3 + di, программа выполнится корректно?
И ещё вопрос,можно ли шаг смешения указать непосредственно в команде sub ax[]?
в di другое значение, потому запишется в другое место.
но код скомпилируется.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 29.06.2013, 02:10   #5
Vapaamies
Ваш К. О.
Участник клуба
 
Аватар для Vapaamies
 
Регистрация: 26.12.2012
Сообщений: 1,755
По умолчанию

Цитата:
Сообщение от Gtnz8 Посмотреть сообщение
Пишу так потому что так учили, не понимая как это работает, а это никуда не годится.
Я тоже не могу понять логику этого кода. Особенно непонятны вычисления в начале, до метки. Есть также подозрение, что запись в arr3 может вызвать разрушение памяти (в DOS не бывает AV), поскольку под arr3 не резервируется массив, а только одно слово.

При этом, если верить коду, arr1 проходится от начала до конца, а arr2 -- в обратном направлении.

Цитата:
Сообщение от Gtnz8 Посмотреть сообщение
И ещё вопрос,можно ли шаг смешения указать непосредственно в команде sub ax[]?
Процессор умеет выполнять операции "регистр-регистр" и "регистр-память", но не "память-память". Адресация памяти для всех команд одинакова. В приведенном примере, если правильно помню определение из учебников, используется косвенная адресация со смещением.
Vapaamies вне форума Ответить с цитированием
Старый 29.06.2013, 08:06   #6
Gtnz8
Пользователь
 
Аватар для Gtnz8
 
Регистрация: 09.08.2012
Сообщений: 95
По умолчанию

Цитата:
Я тоже не могу понять логику этого кода. Особенно непонятны вычисления в начале, до метки.
В начале то всё как раз понятно, в n помещается кол-во элементов массива.И вычисления происходят так, из последнего элемента второго массива вычитается первый элемент первого массива и.т.д.

Последний раз редактировалось Gtnz8; 29.06.2013 в 08:15.
Gtnz8 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Объяснить KIRILOW Помощь студентам 0 24.12.2012 10:29
Разбор задач, прошу объяснить. AlexMasolev1992 Паскаль, Turbo Pascal, PascalABC.NET 2 29.11.2012 17:12
Алгоритмы. Не прошу решить. Прошу помочь! pascaluser Паскаль, Turbo Pascal, PascalABC.NET 2 12.10.2012 08:45
прошу объяснить почему не работает регуляр frommars PHP 2 07.05.2012 11:12