Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Работа с масивами на Си++ с асемблерными вставками

74K
05 октября 2011 года
shotokan
6 / / 25.09.2011
Здраствуйте, очень нужна помощь по лабораторке. Задача: написать прогу на Visual C++ (Win32 console application) которая описывает одномерный масив з 10ти значений и выводит результат обробки. (обробка масива с помощью ассемблерных вставок). Нужно найти среднее арифметическое елементов и минимальное значение.
316
05 октября 2011 года
Alm3n
889 / / 29.05.2009
С чем затруднения? С синтаксисом языка или алгоритмом? Что уже есть?
74K
05 октября 2011 года
shotokan
6 / / 25.09.2011
проблема с ассемблерной вставкой... есть только код ввода массива на Си++. Проблема в том, что не знаю с чего начать делать, как оформить ассемблерный код.
9
05 октября 2011 года
Lerkin
3.0K / / 25.03.2003
 
Код:
...
asm
{
    ...
}
...


Не?
74K
06 октября 2011 года
shotokan
6 / / 25.09.2011
Нужно найти среднее арифметическое елементов и минимальное значение с помощью. ассемблерного кода
316
06 октября 2011 года
Alm3n
889 / / 29.05.2009
mov, cmp, loop. Google it!
А ещё sub и inc.
И магическое число 30, которое нужно отнимать.
14
07 октября 2011 года
Phodopus
3.3K / / 19.06.2008
точнее 0x30
316
07 октября 2011 года
Alm3n
889 / / 29.05.2009
Точнее 30h, на ассемблере же.
7
07 октября 2011 года
@pixo $oft
3.4K / / 20.09.2006
Ну,если вспомнить про .radix,то ни 0x,ни даже h не понадобятся…:)
316
07 октября 2011 года
Alm3n
889 / / 29.05.2009
Вот даже немного кода
Код:
pusha
xor eax,eax
mov ecx, ArrayLength
mov ebx, ArrayPtr
mov eax, [ebx]
sub eax, 30h
label1:
sub [ebx],30h
cmp [ebx], eax
ja pass
mov eax,[ebx]
pass:
inc ebx
loop label1
nop                ;в eax сейчас наименьшее
xor eax,eax
mov ecx, ArrayLength
mov ebx, ArrayPtr
label2:
add eax,[ebx]
inc ebx
loop label2
idiv ArrayLength ;среднее будет в eax
popa

Но тут ещё есть парочка тонкостей и нюансов с переполнением при арифметических операциях, с типом данных - целым или с плавающей точкой, ну и с оптимизацией, которые я опустил.
74K
11 октября 2011 года
shotokan
6 / / 25.09.2011
большое спс за код, щас буду разбираться
P.S. Может и не в тему, но посоветуйте книгу по ассемблеру... именно чтоб ассемблерные вставки в визуал си. Потому как в ВУЗе материала не дают (лектору поф на нас, не любит студентов), а дают задание и говорят делайте как хотите...
74K
11 октября 2011 года
shotokan
6 / / 25.09.2011
есть код (считает суму элементов и находит минимальное), но выбивает ошибка "1>d:\c++ projects\l2\l2\l2.cpp(25): error C2404: 'ecx' : illegal register in 'second operand'", в чем проблема? вот код:
Цитата:
#include <iostream>
using namespace std;
#include <conio.h>

void fillTheArray(int*, int);
void showTheArray(int*, int);

int main()
{
int summ=0,min=0;
int a[10];
fillTheArray(a, 10);
__asm {
mov eax,a[0]
mov edx,a[0]
mov ecx,9
jmp mult

more:
mov edx,ebx
dec ecx
jmp mult

mult:
mov ebx,a[ESI+4*ecx] //это 25ая строчка
push edx
add eax,ebx
pop edx
cmp ebx,edx
jl more
loop mult

mov summ,eax
mov min, edx
}
getch();
}

void fillTheArray(int *arr, int n){
for(int i=0; i<10; i++){
cout << "Enter the " << i+1 << " array element." << endl;
cin >> arr;
}
}
void showTheArray(int *arr, int n){
cout << "Here is an array:" << endl;
for(int i=0; i<n; i++)
cout << "- " << arr << endl;
}

316
11 октября 2011 года
Alm3n
889 / / 29.05.2009
[COLOR="silver"]А вы пробовали выключить и включить?[/COLOR]
Ну а если поменять есх на другой регистр? edi, например.
Цитата:

именно чтоб ассемблерные вставки в визуал си


Такой книги нет, коротенький мануал ещё найдётся. П[COLOR="silver"]р[/COLOR]очти Пирогов - Ассемблер и дизассемблирование, там как раз мягкое введение.
А вот у Юрова в его Ассемблерах для ВУЗов где-то странице на 94й будет и про виды адресаций.
Ну а сам я уже про адресацию ничего не помню, но прямой перебор регистров рулит.

7
11 октября 2011 года
@pixo $oft
3.4K / / 20.09.2006
Цитата: Alm3n
[COLOR="silver"]прямой перебор регистров рулит

Пошто человека на путь неверный наставляешь?:)
shotokan,вместо ECX напиши EBX,и будет тебе щастье.На самом деле,использовать можно только комбинацию [EDI/ESI]+[EBP/EBX],как-то так
[COLOR="#c0c0c0"](вернее,не то чтобы только её,но это самая распространённая,остальные имеют ряд ограничений)[/COLOR]

316
12 октября 2011 года
Alm3n
889 / / 29.05.2009
Цитата: @pixo $oft
Пошто человека на путь неверный наставляешь?:)


Так-так, а кто в jabber сказал, что код у него нормальный, а?

7
12 октября 2011 года
@pixo $oft
3.4K / / 20.09.2006
Эээ…чьто? ☺
Просто я книгу не открывал,вот.А про перебор регистров слова не было:p
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог