Форум программистов, компьютерный форум, киберфорум
Visual C++
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.55/29: Рейтинг темы: голосов - 29, средняя оценка - 4.55
0 / 0 / 0
Регистрация: 05.10.2010
Сообщений: 11
1

Ассемблерная вставка

06.10.2010, 17:27. Показов 6043. Ответов 12
Метки нет (Все метки)

Только начали изучать ассемблерную вставку в С++....первую лабу я кое-как сам сделал (там елементарные арифметические действия с числами) , а вот с второй напряг...

Нам дан одномерный массив из 10 целых чисел (ввод не с клавиатуры) нам нужно найти два минимальных елементы етой последовательности и перемножить их, и вывести на екран результат.Напишите и раздуплите, если не сложно!!! В Паскале ета задачка раз плюнуть..а тут запара
0

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
06.10.2010, 17:27
Ответы с готовыми решениями:

Ассемблерная вставка в С++
Задача: дан одномерный массив из 10 элементов, найти минимальный элемент массива, а также среднее...

Ассемблерная вставка, одномерный масив.
Только начали изучать ассемблерную вставку в С++....первую лабу я кое-как сам сделал (там...

Ассемблерная вставка
Товарищи!! кто знает, подскажите как сделать ассемблерную вставку в cи-проекте в среде Turbo C??...

С++ и Ассемблерная вставка/чтение SPD ОЗУ
Добрый день форумчане, делаю программу на подобии CPU-Z, необходимо узнать тайминги и прочую...

12
Эксперт JavaЭксперт С++
8367 / 3589 / 419
Регистрация: 03.07.2009
Сообщений: 10,708
06.10.2010, 19:50 2
Wolfhound, у вас проблемы с ASM или C++?
0
0 / 0 / 0
Регистрация: 05.10.2010
Сообщений: 11
06.10.2010, 22:34  [ТС] 3
Ассемблер и Ассемблерная вставка в С++ разные вещи....у меня проблема с ассемблерной вставкой в С++!!!!!

_asm{.......} вот так она начинаеться и заканчиваеться (а вместо многоточия нужен код программы)
0
Эксперт JavaЭксперт С++
8367 / 3589 / 419
Регистрация: 03.07.2009
Сообщений: 10,708
07.10.2010, 00:04 4
Wolfhound, для вас может и разные, для меня асм одинаковый там и там.
Размер чисел какой? Word, DWord?
0
0 / 0 / 0
Регистрация: 05.10.2010
Сообщений: 11
07.10.2010, 21:36  [ТС] 5
пофиг
0
0 / 0 / 0
Регистрация: 03.10.2010
Сообщений: 17
25.05.2012, 16:45 6
M128K145, Помогите, пожалуйста, создать двумерный массив в ассемблерной вставке!
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
void CreateMatrix (int size1)
{
    __asm
    {
            
mov ebx, size1
shl ebx, 2 //эта фигня умножает размер на 4, чтоб в байтах были
push ebx
call dword ptr malloc
add esp, 4
//mov ecx, eaх //теперь в есх адрес начала строк(или столбцов)
 
 
 
xor edi, edi
mov ecx, size1 //тут будет размер
//shl ecx, 2 //опять умножили на 4
push ecx
 
 
 
FOR1:
 
mov ebx, [esp+4]
call dword ptr malloc
add esp, 4
mov [ebx+edi*4], eax // складывать адреса в ячейки памяти)))
 
inc edi
loop FOR1
 
}
};
Что я делаю не так??
0
Эксперт С++
4974 / 3081 / 456
Регистрация: 10.11.2010
Сообщений: 11,160
Записей в блоге: 10
25.05.2012, 23:27 7
Цитата Сообщение от Wolfhound Посмотреть сообщение
Ассемблер и Ассемблерная вставка в С++ разные вещи...
судя по тому что ты сказал, для тебя это вообще не имеет никакого значения... Более чем уверен что ты вообще не знаешь что такое ассемблер...
Задай вопрос осмысленно.. С полным пониманием и осознанием того что тебе нужно.

Добавлено через 4 минуты
veselyj_splin, не бойся создать новый пост!
0
0 / 0 / 0
Регистрация: 03.10.2010
Сообщений: 17
26.05.2012, 03:30 8
Цитата Сообщение от lazybiz Посмотреть сообщение
veselyj_splin, не бойся создать новый пост!
Я не боюсь. Только результат один - никто не отвечает.
0
Jesus loves me
Эксперт С++
5189 / 3157 / 355
Регистрация: 12.12.2009
Сообщений: 7,973
Записей в блоге: 2
26.05.2012, 05:58 9
veselyj_splin, а почему в функцию, которая выделяет память под двумерный массив, передается только одно значение? Или массив должен получиться size * size ?
0
Модератор
Эксперт по электронике
8490 / 6317 / 854
Регистрация: 14.02.2011
Сообщений: 21,894
26.05.2012, 06:00 10
Цитата Сообщение от M128K145 Посмотреть сообщение
Wolfhound, для вас может и разные, для меня асм одинаковый там и там.
ты знаешь ТС в чем то прав.
Не все что дозволяется в ассемблере можно сделать во вставке.
например работать со стеком.(оно и понятно можно так накрутить что прога рухнет)
метки вроде бы можно ставить только вне блока asm.
есть еще один вариант пишешь один файл на С другой на асме компилишь каждый и линкуешь вместе
что далеко не
Цитата Сообщение от Wolfhound Посмотреть сообщение
пофиг
Цитата Сообщение от veselyj_splin Посмотреть сообщение
add esp, 4
работаешь со стеком может в этом проблеммы?
Цитата Сообщение от veselyj_splin Посмотреть сообщение
FOR1:
метка в блоке
Цитата Сообщение от veselyj_splin Посмотреть сообщение
Assembler
1
2
3
4
5
6
mov ecx, size1 //тут будет размер
//shl ecx, 2 //опять умножили на 4
push ecx
FOR1:
mov ebx, [esp+4]
call dword ptr malloc
размер тот же самый (квадратная матрица?)
нет размерности указателя

а вообще отладчик дает ответы на многие вопросы
0
Jesus loves me
Эксперт С++
5189 / 3157 / 355
Регистрация: 12.12.2009
Сообщений: 7,973
Записей в блоге: 2
26.05.2012, 06:04 11
Да не, со стеком можно работать и метки делать можно.
0
0 / 0 / 0
Регистрация: 03.10.2010
Сообщений: 17
27.05.2012, 12:14 12
Цитата Сообщение от Kastaneda Посмотреть сообщение
veselyj_splin, а почему в функцию, которая выделяет память под двумерный массив, передается только одно значение? Или массив должен получиться size * size ?
Да, должна получиться квадратная матрица..

ValeryS, со стеком и метками работать можно. Но что-то я не так делаю, из-за портятся регистры(
0
Модератор
Эксперт по электронике
8490 / 6317 / 854
Регистрация: 14.02.2011
Сообщений: 21,894
28.05.2012, 06:59 13
Цитата Сообщение от veselyj_splin Посмотреть сообщение
ValeryS, со стеком и метками работать можно.
Цитата Сообщение от Kastaneda Посмотреть сообщение
Да не, со стеком можно работать и метки делать можно.
насчет меток я сказал
Цитата Сообщение от ValeryS Посмотреть сообщение
метки вроде бы можно ставить только вне блока asm.
ключевое слово вроде бы
я писал асм вставку для микроконтроллера( не помню компилятора) вот он старательно не переваривал метки внутри блока
насчет стека
имеется ввиду не PUSH POP
а более серьезная работа
посмотри например Ошибка компилятора C2431
http://msdn.microsoft.com/ru-r... xcb5a.aspx
вот интересная статейка про то что может MASM и не может VS
http://www.xakep.ru/magazine/xs/071/040/1.asp


veselyj_splin, я тебе накидал программку с комментариями но это решение в лоб, никакой оптимизации
и только выделил память ничего не заполнял
и если будет ошибка при втором(а так же последующем) выделении получим утечку
т.е работать и работать
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
#include "stdafx.h"
#include <malloc.h>
 
 
int** CreateArray(int size1,int size2)
{
_asm
{
 mov ebx,size1;  // сколько строк надо создать
 lea ebx,[ebx*4];  // приводим к размеру указателя
  push ebx;   // передача параметра
  call  dword ptr malloc;  // выделение памяти для массива указателей 
  pop ebx;    // востановить стек    
  test eax,eax;  // проверяем если память не выделена
  jz exit         // то выходим   
  mov edi,eax;    // сохраняем адрес выделеной памяти
  mov edx,0       // индекс строки 
  mov ecx,size1;  // в счетчик сколько строк надо создать
 
while_create:   
  lea esi,[edi+edx*4] //смешение в памяти массива указателей куда запишем адрес строки
    mov ebx,size2;    // размер строки
    lea ebx,[ebx*4];  // приводим размер к int(для short *2 для char ничего умножать не надо)
    push ecx;     // сохраняем регистры
    push edx;     //malloc их портит
    
    push ebx;   // передача параметра
    call  dword ptr malloc; // выделение памяти для строки
    pop ebx;    // востановить стек  
    
    pop edx;    //вспоминаем регистры
    pop ecx;  
 
    test eax,eax;  //проверяем если память не выделена
     jz exit       // то выходим   
    mov [esi],eax  //запоминаем адрес строки
    inc edx;       // прибавляем  индекс строки 
loop while_create; // цикл пока счетчик не равен 0
    mov eax,edi;   // вспоминаем адрес массива для для возврата из функции (в eax что возвращаем) 
exit:
}
}
int _tmain(int argc, _TCHAR* argv[])
{
int ** array;   
array=CreateArray(4,6); 
 
    
    
    
    return 0;
}
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
28.05.2012, 06:59

ассемблерная вставка
здравствуйте, подскажите пожалуйста алгоритм для моей задачи: нужно написать в порядке возрастания...

Дана длина отрезка в метрах, сантиметрах,миллиметрах. Перевести в футы, а все что после запятой в дюймы
Здравствуйте, в задании нужно было написать код на С и сделать ассемблерную вставку. &quot;Дана длина...

Ассемблерная вставка на С++
Написал сегодня код. int x, y; //Исходные числа float res = 0; //Результат расчетов cin &gt;&gt; x...

Ассемблерная вставка на С++
Добрый день, уважаемые. Столкнулся с большой проблемой когда понадобилось для увеличения скорости...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.