Форум программистов, компьютерный форум, киберфорум
Наши страницы
Assembler для начинающих
Войти
Регистрация
Восстановить пароль
 
pash-man
0 / 0 / 1
Регистрация: 02.01.2016
Сообщений: 12
1

Ассемблерные вставки. Массив

17.01.2016, 13:29. Просмотров 343. Ответов 0
Метки нет (Все метки)

Суть задания такая:
Вести массив с клавиатуры, зачтем с помощью вставки создать новый массив, в котором буду положительные и нулевые элементы из изначального массива. Вот что у меня получилось
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
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
#include<iostream>
#include<fstream>
 
using namespace std;
 
int main()
{
    setlocale(LC_ALL, "Russian");
    int arr[20], arr1[10], arr2[10], arr3[10];
    int n, n1(0), n2(0);
    cout << "Введите размерность массива: "; cin >> n;
    for (int i = 0; i < n; i++)
    {
        cout << "a[" << i << "]= "; cin >> arr[i];
    }
    system("cls");
    cout << "\nОсновной массив\n";
    for (int i = 0; i < n; i++)
    {
        cout << arr[i] << " ";
    }
    int a = arr[0];
    __asm
    {
            mov esi, 0 //начало массива
                mov edi, 0// начало для 2 массива
                mov eax, n
                mov ebx, 4
                mul ebx
                mov ebx, 0
                mov ecx, eax// размерность массива
                mov eax, 0
 
 
            n:
            cmp arr[esi], 0  // сравниваем элемент c 0
                jge yes;   // если больше или равно >=
            jmp fly;
 
 
 
        yes:
            mov ebx, arr[esi]
                mov arr1[edi], ebx
            // mov arr1[edi], arr[esi]
            add edi, 4
            add n2,1
 
 
            fly:
            add esi, 4  // передвигаемся к следующему элементу
            add eax, 4
            
            cmp eax, ecx
                jge  no;
                jmp n
 
        no:
    }
 
    cout << "\n\nполученный массив \n";
    for (int i = 0; i < n2; i++)
    {
        cout << arr1[i] << " ";
    }
    
    cout << endl << endl;
    system("pause");
}
Но, вроде бы тут все хорошо, но почему то если приходиться использовать jmp n, то программа крашится... Но если эту строку отходить, тобишь что бы ее просто перепрыгивало, то работает... Что все же не так с этой строкой?
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.01.2016, 13:29
Ответы с готовыми решениями:

Ассемблерные вставки:(
Есть программа которая В исходную строку вставляет после заданного символа все...

Ассемблерные вставки
1)Всем добрый вечер.Хотелось бы узнать как считать а потом вывести что либо...

Ассемблерные вставки в паскале
Нужно представить тело цикла в виде ассемблеровской вставки program test0015;...

Ассемблерные вставки в Virtual Pascal
Для массива 32-х битных целых чисел определить количество элементов больших...

Ошибка с регистрами - Ассемблерные вставки
Здравствуйте. Стоит задача написать программу, которая будет копировать...

0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.01.2016, 13:29

Вычисление суммы ряда (ассемблерные вставки)
Вычислить сумму ряда \sum_{k=1}^{n}(2k-1), (n \leq 10), используя ассемблерные...

Преобразовать фрагменты программы на C в ассемблерные вставки
Выручайте! Очень нужна помощь ибо не бывать допуска к экзамену! надо переписать...

Ассемблерные вставки в Паскале: работа с массивом
Привет. Сейчас работаю в Pascal (Lazarus) с ассемблерными вставками, и...


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

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

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