Форум программистов, компьютерный форум, киберфорум
Наши страницы
Assembler для начинающих
Войти
Регистрация
Восстановить пароль
 
xVIKx
2 / 2 / 4
Регистрация: 26.05.2013
Сообщений: 122
#1

Нули - в конец - Assembler

13.11.2013, 21:15. Просмотров 617. Ответов 1
Метки нет (Все метки)

Нули - в конец. Задан числовой массив А[1..M]. Перенести все элементы массива, равные 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
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
//+===================================================================
// File lab_5.c
// Циклическая программа, работающая с массивом
// Вариант 21
// Программа подсчитывает сумму элементов массива, значения которых лежат в диапазоне от 50 до 150
// Длина масива и сам массив вводятся из файла array.txt 
//-===================================================================
#include "stdafx.h"
#include <stdio.h>
#include <iostream> 
#include <iomanip> 
#include <locale.h>
#pragma warning(disable: 4996)
using namespace std;
 
#define   Size  20
long int  arr[Size], arr_a[Size];
int len;
int sum=0;
 
int main()
{
    setlocale(LC_ALL, "rus");
    int i, j, tmp;
    FILE *fin;
// Открыть файл с исходными данными
    if((fin = fopen("VIK.txt","r"))==NULL)
    { 
        printf("\nCan't open file\n"); 
        exit(1);
    }
    for (;;)
    {
// Читать длину масива
    fscanf_s(fin,"%i\n",&len);
// Если массив имеет ненулевую и допустимую длину, читать его
    if (len==0 || len>20) 
    {
        printf("\nArray not found or too large array\n"); 
        break;
    }
// Копировать файл в массив
    for (i=0;i<len;i++) 
        fscanf(fin,"%i",&arr[i]);
// Сделать копию для ассемблера
    for (i=0;i<len;i++) 
        arr_a[i]=arr[i];
    printf("\n\tСортировка массива простым выбором");
 
//=============================== C ==================================
 
// Вывод исходного массива
    printf("\nИсходный масив имеет длину: %i\n",len);
    for (i=0; i<len; i++) printf("%5i",arr[i]);
// Сортировка массива
    int k=0;
    int l=len;
    for (i=0; i<l; i++)
    {
        if (arr[i] == 0)
        {
            for (int q = i; q < len - 1; q++) //просто сдвигаем весь массив
                arr[q]=arr[q+1];
            i--; // возвращаемся на одну позицию назад, на случай если два нуля подряд
            l--; // тогда и проверять
            k++; //считаем сколько было нулей, чтобы потом их дописать с конца
        }
    }
    //пишем нули с конца массива столько раз, сколько было нулей
    for (int i=len - 1; i>0 && k > 0; i--, k--)  //i отвечает за перемещение по массиву, k за количество нулей
    {
        arr[i]=0;
    }
// Вывод результирующего массива
    printf("\nРезультирующий массив (C++):\n");
    for (i=0; i<len; i++)
        printf("%5i",arr[i]);
 
//============================ Assembler =============================
 
// Разделить исходные переменные на знаменатель DENOM
    __asm
    {
 
}
// Вывод результатов
    printf("\nРезультирующий массив (Asm):\n");
    for (i=0; i<len; i++) printf("%5i",arr_a[i]);
    printf("\n");
    break;
  }
  fclose(fin);// Закрыть исходный файл   
  return 0;
}

http://www.cyberforum.ru/asm-beginners/thread1162824.html
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.11.2013, 21:15
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Нули - в конец (Assembler):

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

MASM32: Удалить все нули из введённой строки символов
Помогите написать на ассемблере код программы, который будет удалять все нули...

Как ассемблеровский код представить в машинном коде (единички и нули) ?
В общем дали задание написать программу в маш кодах, поскольку это довольно...

По введенному символу установите, в каком двоичном коде записаны нули
1.По введенному символу установите, в каком двоичном коде записаны нули

Дано число в двоичном виде 133. Разделить его на 16, занести в 1, 3, 7 разряды нули.
помогите пожалуйста написать программу по заданию: дано число в двоичном виде...

1
skaa
Хочу в Исландию
1035 / 834 / 119
Регистрация: 10.11.2010
Сообщений: 1,629
13.11.2013, 22:02 #2
Например так:
Assembler
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
format PE console
include 'win32a.inc'
 
        mov     edi,arr
        mov     ecx,[qcarr]
mArr:
        cmp     dword [edi],0
        jne     mNotZero
 
        mov     eax,dword [edi]
 
        push    edi
        push    ecx
 
        mov     esi,edi
        add     esi,4
        dec     ecx
        cld
        rep     movsd
 
        mov     [edi],eax
 
        pop     ecx
        pop     edi
        sub     edi,4
mNotZero:
 
        add     edi,4
        loop    mArr
 
        invoke  ExitProcess,0
 
arr     dd 1,0,0,0,5,1,0,0,0,5,1,0,0,0,5,1,0,0,0,5
qcarr   dd ($-arr)/4
 
include 'API\kernel32.inc'
 
data import
 
        library kernel32,'KERNEL32.DLL'
 
end data
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.11.2013, 22:02
Привет! Вот еще темы с решениями:

Конец строки
Есть задача. Даны слова в строке разделенные пробелами и запятыми.Нужно...

Начало и конец видеопамяти
Допустим видеокарта имеет в себе 512 мегабайт памяти. Как получить к ним...

Дописать начало и конец программы
в книге указан пример ;Установим графический режим EGA mov...

Добавление символа в конец введенной строки
Очень нужна помощь, нужно в конец введенной строки поместить символ '$' чтобы...


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

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

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