0 / 0 / 1
Регистрация: 21.11.2016
Сообщений: 7
|
||||||
1 | ||||||
Перенос элементов из одного массива в другой (ассемблерная вставка)11.03.2017, 17:58. Показов 2383. Ответов 3
Метки нет (Все метки)
Перенос элементов из одного массива в другой, так чтобы в правой части были элементы меньше 0, а слева больше 0
mov Y[k1],ebx или mov Y[k2],ebx и выскакивает ошибка: как решить проблему?
0
|
11.03.2017, 17:58 | |
Ответы с готовыми решениями:
3
Перенос элементов из одного массива в другой Сумма элементов массива, равных первому элементу массива (Ассемблерная вставка с++) Вычислить сумму элементов массива (ассемблерная вставка в C++) Ассемблерная вставка: Определить среднее значение положительных элементов массива |
1718 / 567 / 187
Регистрация: 12.03.2016
Сообщений: 2,169
|
||||||
11.03.2017, 20:18 | 2 | |||||
Сообщение было отмечено Andrond как решение
Решение
2
|
0 / 0 / 1
Регистрация: 21.11.2016
Сообщений: 7
|
|
13.03.2017, 18:53 [ТС] | 3 |
То что нужно, спасибо.
И ещё есть пара вопросов: а что происходит в этих строчках: и вот тут:
0
|
1718 / 567 / 187
Регистрация: 12.03.2016
Сообщений: 2,169
|
|
14.03.2017, 06:30 | 4 |
Думал разберешься, да заодно ненужные строки поудаляешь. В этих строчках мы вычисляем адрес смещения по которому будет записываться массив Y. Особо объяснять не умею (легче сделать), но попробую. Под массив Y программа выделяет память для 5 элементов. Команда lea, (строка 22,23) загружает в регистр, указанный в команде в качестве первого операнда, относительный адрес второго операнда (не значение операнда!) т.е. нашего массива. Так как элементы массива типа int, то каждый из них занимает 4 байта. Адрес нашего первого элемента считается нулевым Y[0] = [0] (0 в правой части - это адрес, не значение) Второго элемента Y[1] = [4], Y[2] = [8], Y[3] = [12], Y[4] = [16]. Т.е. можно записать [0 + X] где X - наше смещение (4,8,12,16). Допустим первый элемент X[0] = -3 тогда в eax = 20, edx = 1 (k2=1), edx = 1*4=4, eax=20-4=16. И командой mov [edi+eax], ebx занесли число X[0] по вычисленному адресу, Y[4] = -3. Увеличили к2 на 1. Второй элемент X[1] = -5 по старой аналогии в eax = 20, edx = 2 (k2=2), edx=2*4=8, eax=20-8=12 и т.д. Y[3] = -5. Третий элемент X[2] =6. edx=0 (k1=0) edx=0 * 4 =0, увеличили наш счетчик положительных элементов k1 Т.е. по адресу [0] у нас будет записан Y[0] = 6 и т.д.
Если что то не так прошу простить, т.к. только приехал с вахты и толком не спал.
0
|
14.03.2017, 06:30 | |
14.03.2017, 06:30 | |
Помогаю со студенческими работами здесь
4
Найти сумму первых К положительных элементов массива (ассемблерная вставка в C++) Вставка одного массива в другой Вставка одного массива в другой. Вставка элементов одного вектора в другой Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |