Форум программистов, компьютерный форум, киберфорум
Наши страницы
Assembler, MASM, TASM
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.88/8: Рейтинг темы: голосов - 8, средняя оценка - 4.88
zenkov
0 / 0 / 0
Регистрация: 23.11.2012
Сообщений: 12
#1

Как присвоить один массив другому

24.11.2012, 00:31. Просмотров 1368. Ответов 14
Метки нет (Все метки)

Как можна сделать присвоение на ассемблере с одного массива другому, подобно к
C++
1
mas1[i] = mas2[i]
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.11.2012, 00:31
Ответы с готовыми решениями:

Как Windows понимает, что надо приостановить один поток и передать фокус другому
кто коротко может объяснит как windows понимает что надо приостановить один...

как можно первую по другому решить?
1. Написать программу сравнения двух строк. Результатом работы программы должно...

Как присвоить свой текст
Всем привет, с asm знаком слабо, даже можно сказать вообще не знаком. есть...

Можно ли один массив присвоить другому?
Подскажите пожалуста как енто сделать не перебирая их в цикле, а то уже совсем...

Присвоить один массив Byte другому
Есть массив Dim a As Byte() = {TextBox1.Text, TextBox2.Text, TextBox3.Text,...

14
skaa
Хочу в Исландию
1035 / 834 / 119
Регистрация: 10.11.2010
Сообщений: 1,629
24.11.2012, 02:05 #2
Например так:
Assembler
1
2
3
4
5
6
7
8
9
10
        mov     esi,mas2
        mov     edi,mas1
        cld
        mov     ecx,5
        rep     movsb
 
        invoke  ExitProcess,0
 
mas1    db 5 dup(0)
mas2    db 1,2,3,4,5
.
1
zenkov
0 / 0 / 0
Регистрация: 23.11.2012
Сообщений: 12
24.11.2012, 02:55  [ТС] #3
А как быть, к примеру, если нужно кроме присвоения еще выполнить математические операции:

C++
1
mas1[j] = mas2[(b + a * (j)) % 26];
0
Vadimych
635 / 478 / 12
Регистрация: 10.01.2011
Сообщений: 1,047
24.11.2012, 06:25 #4
Цитата Сообщение от zenkov Посмотреть сообщение
А как быть, к примеру, если нужно кроме присвоения еще выполнить математические операции:

Не по теме:

Ну конечно, ждать, когда добрый skaa, напишет код.

1
Charles Kludge
Клюг
7641 / 3156 / 382
Регистрация: 03.05.2011
Сообщений: 8,382
24.11.2012, 15:11 #5
Взять watcom disassembler и заставить его выдать листинг с кодом на Си в в кач-ве комментов: wdis proga.obj -s=proga.c -l -a

Не по теме:

Vadimych, :facepalm:

0
zenkov
0 / 0 / 0
Регистрация: 23.11.2012
Сообщений: 12
24.11.2012, 20:06  [ТС] #6
За формулой
C++
1
shifr[j] = mas1[(b + a * (j)) % 26];
написал ассемблерную вставку, но при запуске появляется только терминал, и сразу ошибка. Подкажите, где мне нужно исправить
C++
1
2
_asm
    {
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
        mov edx, 4 ; отвечает за а
        mov ebx, 3  ; отвечает за b
        
        lea edi, mas1 ; исходной массив
        lea esi, shifr ; массив, которому присваиваем значения
        mov ecx, 26 ; количество повторений
        label1:
        mov eax, [edi] ; 
    imul ebx ; умножение полученого значения на ebx
    add eax, edx ; сложение с edx
        mov bl, 26 ; нужна остача от деления на 26
    idiv bl
        mov al, bl
    mov [esi], al ; полученое значение в другой масив
    inc edi
        inc esi
        loop label1
C++
1
 }
0
Миниатюры
Как присвоить один массив другому  
skaa
Хочу в Исландию
1035 / 834 / 119
Регистрация: 10.11.2010
Сообщений: 1,629
26.11.2012, 18:53 #7
А что в ассемблерном коде отвечает за j?
0
zenkov
0 / 0 / 0
Регистрация: 23.11.2012
Сообщений: 12
26.11.2012, 19:31  [ТС] #8
Цитата Сообщение от skaa Посмотреть сообщение
А что в ассемблерном коде отвечает за j?
j - целое число, которое указывает индекс элемента в массиве
0
skaa
Хочу в Исландию
1035 / 834 / 119
Регистрация: 10.11.2010
Сообщений: 1,629
26.11.2012, 20:09 #9
Мой вопрос про j можно проигнорировать.
Какого типа массивы mas1 и shifr?
0
zenkov
0 / 0 / 0
Регистрация: 23.11.2012
Сообщений: 12
27.11.2012, 00:49  [ТС] #10
Цитата Сообщение от skaa Посмотреть сообщение
Какого типа массивы mas1 и shifr?
символьный тип char
0
skaa
Хочу в Исландию
1035 / 834 / 119
Регистрация: 10.11.2010
Сообщений: 1,629
27.11.2012, 02:18 #11
Можно так:
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
  char  mas1[26]={0,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},shifr[26];
 
  _asm
  {
    mov eax,4
    mov ebx,3
 
    lea esi,mas1
    lea edi,shifr
    mov ecx,26
  label1:
    push    eax
    mul ecx
    add eax,ebx
    push    ebx
    mov bl,26
    div bl
    pop ebx
    mov al,ah
    mov ah,0
    push    esi
    add esi,eax
    mov al,[esi]
    mov [edi],al
    pop esi
    pop eax
    inc edi
    loop    label1
  }
, проверил на Borland C++ Builder 5.0, похоже на правду .
1
zenkov
0 / 0 / 0
Регистрация: 23.11.2012
Сообщений: 12
27.11.2012, 03:13  [ТС] #12
Как можно написать на ассемблере часть кода. Нужно пройтись по массиву с 0 к len+1, где len - длина текста для кодирования по формуле
C++
1
2
3
4
5
6
7
8
9
10
11
12
for (i=0; i < len+1; i++)
{ 
for (j=0; j < 26; j++)
{
if (ich[i] == alf [j])
{
kod[i] = shifr [j];
j++;
 
}
}
}
ich[i] - текст, который ввел пользователь
alf [j] - [] = { 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z' }; - массив алфавита для кодирования
kod[i] - массив для вывода зашифрованого текста
shifr [j] - формула по которой происходит шифрования
0
skaa
Хочу в Исландию
1035 / 834 / 119
Регистрация: 10.11.2010
Сообщений: 1,629
27.11.2012, 18:40 #13
А что делать если условие
C++
1
if (ich[i] == alf [j])
не выполнится?
И чему равен массив shifr?
0
zenkov
0 / 0 / 0
Регистрация: 23.11.2012
Сообщений: 12
27.11.2012, 19:28  [ТС] #14
Цитата Сообщение от skaa Посмотреть сообщение
И чему равен массив shifr?
такой же массив как и alf [j] - [] = { 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z' }, только буквы стоят в другом порядке
Цитата Сообщение от skaa Посмотреть сообщение
А что делать если условие
Код C++
1
if (ich[i] == alf [j])
не выполнится?
этого в условии нет

Добавлено через 17 минут
Вот кое-что есть, но снова таки не работает

Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
encode:
        push ebp
        mov ebp,esp
        pushad
        mov esi,dword [ebp+0xC] ;входная строка (в данном случае ich[i])
        mov edi,dword [ebp+0x8] ;куда сохранять (kod[i])
        lea ebx,[shifr]         ;таблица кодировки
        xor eax,eax
l:
                mov al,byte [esi]
                test eax,eax
                je l2
                sub al,0x41
                mov al,byte [ebx+eax]
                mov byte [edi],al
                inc esi
                inc edi
                jmp l
l2
        popad
        mov esp,ebp
        pop ebp
        retn 0x8
0
skaa
Хочу в Исландию
1035 / 834 / 119
Регистрация: 10.11.2010
Сообщений: 1,629
27.11.2012, 19:42 #15
Ну, например так:
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
  _asm
  {
    lea esi,ich
    lea edi,kod
    lea ebx,alf
    lea edx,shifr
    mov ecx,[len]
    inc ecx
  l1:
    push    ebx
    push    edx
    push    ecx
    mov ecx,26
  l2:
    mov al,[ebx]
    cmp [esi],al
    jne msk
    mov al,[edx]
    mov [edi],al
    dec ecx
  msk:
 
    inc ebx
    inc edx
    cmp ecx,0
    je  mex
    loop    l2
  mex:
    pop ecx
    pop edx
    pop ebx
    inc esi
    inc edi
    loop    l1
  }
1
27.11.2012, 19:42
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.11.2012, 19:42

выделить место для объекта с помощью new или создать указатель, объект и присвоить один другому. какая разница?
кроме того что к объекту созданному с помощью new можно будет обращаться только...

Двумерный массив указателей присвоить другому указателю
char *tp = { &quot;bb&quot;, &quot;vv&quot;, &quot;zz&quot;, &quot;kk&quot;, &quot;&quot; }; char ***mp = tp; // вот...

Можно ли напрямую присваивать один массив другому?
можно ли напрямую присваивать один массив другому?(че-то я запамятовал)например...


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

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

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