Форум программистов, компьютерный форум, киберфорум
Наши страницы
Assembler для начинающих
Войти
Регистрация
Восстановить пароль
 
Lynatik001
38 / 32 / 13
Регистрация: 28.09.2012
Сообщений: 631
1

Асемблерная вставка в C (массив)

09.12.2014, 00:57. Просмотров 359. Ответов 6
Метки нет (Все метки)

Вот есть массив. Как мне в ассемблерной вставке по нем пройтись(циклом) и найти сумму чисел максимального и минимального елемента массива? Что б потом вывести в C
C++
1
2
3
4
5
6
7
8
9
10
11
12
#include "stdafx.h"
#include <iostream>
using namespace std;
 
int _tmain(int argc, _TCHAR* argv[])
{
    int mass[5] = {1,4,3,2,9};
    _asm{
        
    }
    return 0;
}
Добавлено через 1 минуту
почти полный 0 в асемблере(
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.12.2014, 00:57
Ответы с готовыми решениями:

Асемблерная вставка
Задание: определить является ли заданное число простым. Программа работает не...

Ассемблерная вставка, которая записывала бы массив строк
В пргограмме на Паскале форматирую текст. Нужна ассемблерная вставка, которая...

Из массива A скопировать в массив B элементы, величины которых лежат в диапазоне [-3;4] (C + ассемблерная вставка)
Здравствуйте. Помогите, пожалуйста, написать код на си с ассемблерной вставкой...

Асемблерная вставка множение \ деление в нем
надо по заданию на асемблере в с чуть пописать вот задание найти разницу между...

вставка в массив
Приветствую господа! Возникла необходимось написать маленькую приграмку, а я в...

6
Charles Kludge
Клюг
7646 / 3161 / 383
Регистрация: 03.05.2011
Сообщений: 8,382
09.12.2014, 02:17 2
Нечто похожее уже было:
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
#include <stdio.h>
 
int min_max(int *arr, int *min, int *max, int sz)
/*{ int jx, sum=0;
(*min) = arr[0];
(*max) = arr[0];
for (jx = 0; jx < sz; jx++) {
    if (arr[jx] > (*max)) (*max) = arr[jx];
    if (arr[jx] < (*min)) (*min) = arr[jx];
    sum += arr[jx];
    };
return sum;
*/
{
_asm{
    mov esi, arr
    mov ecx, sz
    dec ecx
    lodsd
    mov ebx, eax    //min
    mov edx, eax    //max
    mov edi, eax    //sum
// fool-proof
    jcxz    @gtfo       // single element array, min=max=sum
@l: lodsd
    add edi, eax
    cmp eax, ebx
    cmovl   ebx, eax    
    cmp eax, edx
    cmovg   edx, eax    
    loop    @l
@gtfo:  mov esi, min
    mov [esi], ebx
    mov esi, max
    mov [esi], edx
// Warning "Missing return value for function 'min_max'" at next line
    mov eax, edi    // must be ignored
};
};
void main(void)
{
int sum,amin,amax,array[] = {3,8,2,4,-9,11,1,2,19,777,-666};
sum = min_max(&array,&amin,&amax,1);//sizeof(array)/sizeof(int));
printf("sum: %d, min: %d, max: %d",sum, amin, amax);
};
1
Lynatik001
38 / 32 / 13
Регистрация: 28.09.2012
Сообщений: 631
09.12.2014, 02:29  [ТС] 3
Цитата Сообщение от Charles Kludge Посмотреть сообщение
Нечто похожее уже было:
Нерабочий(
0
Charles Kludge
Клюг
7646 / 3161 / 383
Регистрация: 03.05.2011
Сообщений: 8,382
09.12.2014, 02:46 4
Рабочий. Там просто стр.43 должна выглядеть вот так:
Код
sum = min_max(&array,&amin,&amax,sizeof(array)/sizeof(int));
и компилить надо с ключиком для второго пня. А чтобы ф-ция возращала min+max, код изменить так:
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
@l: lodsd
//  add edi, eax
    cmp eax, ebx
    cmovl   ebx, eax    
    cmp eax, edx
    cmovg   edx, eax    
    loop    @l
@gtfo:  mov esi, min
    mov [esi], ebx
    mov esi, max
    mov [esi], edx
// Warning "Missing return value for function 'min_max'" at next line must be ignored
    mov eax, edx    
    add eax, ebx
1
Lynatik001
38 / 32 / 13
Регистрация: 28.09.2012
Сообщений: 631
09.12.2014, 03:03  [ТС] 5
Цитата Сообщение от Charles Kludge Посмотреть сообщение
@l: lodsd
//* add edi, eax
* * cmp eax, ebx
* * cmovl * ebx, eax* *
* * cmp eax, edx
* * cmovg * edx, eax* *
* * loop* * @l
@gtfo:* mov esi, min
* * mov [esi], ebx
* * mov esi, max
* * mov [esi], edx
// Warning "Missing return value for function 'min_max'" at next line must be ignored
* * mov eax, edx* *
* * add eax, ebx
Цитата Сообщение от Charles Kludge Посмотреть сообщение
и компилить надо с ключиком для второго пня. А чтобы ф-ция возращала min+max, код изменить так:
Прости но я совсем уж не шарю в асемблере) Ели сделал с регистрами там сложение и вычитание)
А вот ето вообще нешарю) как запускать что менять и тдп))
Может есть пример где на обычном визуале в проекте С++ созданом заработает(асемблерной вставкой)
0
Charles Kludge
Клюг
7646 / 3161 / 383
Регистрация: 03.05.2011
Сообщений: 8,382
09.12.2014, 03:09 6
Цитата Сообщение от Lynatik001 Посмотреть сообщение
Может есть пример где на обычном визуале в проекте С++
Я пишу на чистом Watcom C без всяких проектов, из командной строки, makefile - лучший проект.
0
Lynatik001
38 / 32 / 13
Регистрация: 28.09.2012
Сообщений: 631
09.12.2014, 03:12  [ТС] 7
Цитата Сообщение от Charles Kludge Посмотреть сообщение
Я пишу на чистом Watcom C без всяких проектов, из командной строки, makefile - лучший проект
круто)))
0
09.12.2014, 03:12
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.12.2014, 03:12

Вставка в массив
Дан целочисленный массив размера N. Вставить после каждой его серии элемент с...

Вставка в массив
Данные о росте 25 учеников класса, упорядоченные по убыванию, записаны в...

Вставка в массив
Здравствуйте! Допустим, у меня есть массив и в него нужно вставить элемент....


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

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

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