С Новым годом! Форум программистов, компьютерный форум, киберфорум
Микропроцессоры
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.56/9: Рейтинг темы: голосов - 9, средняя оценка - 4.56
7 / 7 / 1
Регистрация: 21.03.2010
Сообщений: 397

Поменять местами два массива в памяти, используя стек

12.10.2013, 17:34. Показов 1985. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте! Есть задание (поменять местами два массива в памяти, используя стек), вот решение:
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
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
N   EQU 10
DSEG    AT  30H
ORG 30H
 
MAS1:   DS  N
MAS2:   DS  N
 
CSEG    AT  0C000H
ORG 0C000H
JMP MAIN
ORG 0C100H
 
;MAS1:  DB  0,1,2,3,4,5,6,7,8,9
 
;MAIN:  MOV R0,MAS1
    ;MOV    R1,MAS2
    ;MOV    R1,#N
 
MAIN:
    MOV R0,MAS1
    
    PUSH    30H
    PUSH    31H
    PUSH    32H
    PUSH    33H
    PUSH    34H
    PUSH    35H
    PUSH    36H
    PUSH    37H
    PUSH    38H
    PUSH    39H
 
    PUSH    3AH
    PUSH    3BH
    PUSH    3CH
    PUSH    3DH
    PUSH    3EH
    PUSH    3FH
    PUSH    40H
    PUSH    41H
    PUSH    42H
    PUSH    43H 
    
    POP 39H
    POP 38H
    POP 37H
    POP 36H
    POP 35H
    POP 34H
    POP 33H
    POP 32H
    POP 31H
    POP 30H
    
    POP 43H
    POP 42H
    POP 41H
    POP 40H
    POP 3FH
    POP 3EH
    POP 3DH
    POP 3CH
    POP 3BH
    POP 3AH
 
END
но нужно сделать с использованием цикла, пока ничего в голову не лезет. заранее спасибо за помощь.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
12.10.2013, 17:34
Ответы с готовыми решениями:

Поменять местами два массива в памяти, используя стек
Здравствуйте! Есть задание (поменять местами два массива в памяти, используя стек), вот решение: ;CONST EQU 1 N EQU 10 DSEG AT 30H...

Поменять местами два числа, не используя дополнительные ячейки памяти
Когда вводишь два числа нужно что бы они поменялись местами, не используя при это дополнительные ячейки то есть всего 2 ячейки ...

Можно ли поменять местами два соседних элемента одномерного массива не используя оператор SWAP ?
можно ли обойтись без SWAP, если я хочу поменять местами элементы?

10
1022 / 157 / 10
Регистрация: 16.01.2013
Сообщений: 544
12.10.2013, 19:00
Непонятно зачем стек?. Нехватает регистров?. Для пересылки массивов использование стека как буфера не рационално (медленно исполняемая команда). Лучше перенести в стек регистр и исползовать как буфер освободившися регистр.
Буфер в стек
Элемент из массива 1 в буфер
Элемент из массива 2 в массив 1
элемент из буфера в массив 2
Повторить для всех ячеек масиива
Востановить буфер из стека

Конкретная реализация зависит от набора регистров и команд процессора
0
7 / 7 / 1
Регистрация: 21.03.2010
Сообщений: 397
12.10.2013, 20:18  [ТС]
Задача так поставлена в лабораторной работе, использовать именно стек
0
7 / 7 / 1
Регистрация: 21.03.2010
Сообщений: 397
15.10.2013, 02:09  [ТС]
вот набросал но выдает ошибки, как исправить, не знаю:
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
43
N   EQU 10
DSEG    AT  30H
ORG 30H
 
MAS1:   DS  N
MAS2:   DS  N
 
CSEG    AT  0C000H
ORG 0C000H
JMP MAIN
ORG 0C100H
 
MAIN:
    MOV R0,#MAS1
    MOV R1,#N
    
 
L1: PUSH    R0  
    INC R0
    DJNZ    R1,L1   
 
    MOV R0,#MAS2
    MOV R1,#N
 
L2: PUSH    R0
    INC R0
    DJNZ    R1,L2
 
    MOV R0,#MAS2
    MOV R1,#N
 
L3: POP R0
    INC R0
    DJNZ    R1,L3
 
    MOV R0,#MAS1
    MOV R1,#N
 
L4: POP R0
    INC R0
    DJNZ    R1,L4
 
END
ошибки: там где строчки PUSH R0
lab1_2.a51(27): error A22: EXPRESSION TYPE DOES NOT MATCH INSTRUCTION
0
1022 / 157 / 10
Регистрация: 16.01.2013
Сообщений: 544
15.10.2013, 10:16
Начнем с того какой тип процессора. А то судя по коментарию к ошибке это MCS51 а по структуре программы больше похоже на MPS430.
Второе Команда PUSH R Означает поместить по адресу стека содержимое регистра а не ячейки памяти по этому адресу.
Команд переноса непосредственно из памяти в стек не существует во всех известных мне процессорах.
Для обмена местами массивов вовсе не нужно помещать в буфер два массива, достаточно одного.
Для экономии памяти(стека) лучше менять местами по одной ячейке
0
7 / 7 / 1
Регистрация: 21.03.2010
Сообщений: 397
15.10.2013, 11:20  [ТС]
тип процессора: intel 8051H. а как тогда поместить один массив в стек?
0
1022 / 157 / 10
Регистрация: 16.01.2013
Сообщений: 544
15.10.2013, 16:48
Раз процессор 8051 то следующие вопросы. Масивы данных могут распологаться
1. В памяти программ (можно только читать)
2. Во внутреннй памяти процессора (команды обращения MOV A,@R* MOV @R*,A)
3. Во внешней памяти данных (команды обращения MOV A,@DPTR* MOV @DPTR*,A)
0
7 / 7 / 1
Регистрация: 21.03.2010
Сообщений: 397
15.10.2013, 17:26  [ТС]
Вот решена задача:
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
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
;CONST  EQU 1
;MYCONST1   EQU 30H
;MYCONST2   EQU 3AH
;MYCONST3   EQU 39H
;MYCONST4   EQU 43H
 
N   EQU 10
DSEG    AT  30H
ORG 30H
 
MAS1:   DS  N
MAS2:   DS  N
 
CSEG    AT  0C000H
ORG 0C000H
JMP MAIN
ORG 0C100H
 
 
MAIN:
    MOV R0,#MAS1
    MOV R1,#N
    
    ;MOV    A,30H
 
L1: CLR A
    MOV A,@R0
    ;MOV    R2,A
    PUSH    ACC 
    INC R0
    DJNZ    R1,L1   
 
    MOV R0,#MAS2
    MOV R1,#N
 
L2: CLR A
    MOV A,@R0
    PUSH    ACC
    INC R0
    DJNZ    R1,L2
 
    ;MOV    R0,#1BH
    MOV R1,#N
    MOV R0,#39H
 
L3: CLR A
    MOV A,R0
    POP ACC
    MOV @R0,A
    DEC R0
    DJNZ    R1,L3
 
    MOV R0,#43H
    MOV R1,#N
 
L4: CLR A
    MOV A,R0
    POP ACC
    MOV @R0,A
    DEC R0
    DJNZ    R1,L4
    JMP     $
 
END
0
1022 / 157 / 10
Регистрация: 16.01.2013
Сообщений: 544
15.10.2013, 18:00
А мне больше нравится
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
MAIN:
 MOV R0,#MAS1
 MOV R1,#MAS1
 MOV R3,#N
     
L1: 
    MOV A,@R0
    PUSH    ACC 
    MOV A,@R1
    MOV @R0,A
    POP    ACC
    MOV @R1,A
    INC R0
    INC R1
    DJNZ    R3,L1  
 
 JMP     $
 
END 
 
 END
Это если массивы находятся во внутреенней памяти данных.
Если в первых 256 ячейках внешней памяти команду MOV заменить на MOVX
Если в произвольной области внешней памяти нужно использовать MOVX @DPTR А значение DPTR сохранять в стеке
0
7 / 7 / 1
Регистрация: 21.03.2010
Сообщений: 397
15.10.2013, 19:15  [ТС]
MaslovVG, у меня этот код не работает
0
1022 / 157 / 10
Регистрация: 16.01.2013
Сообщений: 544
15.10.2013, 20:00
А кусок с 1 по по 18 строку из вашей программы из поста 4 не забыли (определение констант и переменных).
И проверте в пошаговом отладчике.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
15.10.2013, 20:00
Помогаю со студенческими работами здесь

Функция: поменять местами максимальный и минимальный элемент файла, используя стек
Используя стек, написать функцию, которая меняет местами максимальный и минимальный элемент файла.

Поменять местами два числа, используя процедуру
10.поменять местами два числа,используя процедуру

Поменять местами два числа, не используя дополнительную переменную
Даны два числа x и y ,поменять их значения местами не используя дополнительную переменную. Результат вывести в виде таблицы шагов.

Даны два числа х и у. Не используя других переменных поменять местами их значения
Даны два числа х и у. Не используя других переменных поменять местами их значения.

Поменять в файле два слова их местами, не используя дополнительных массивов и файлов
Задание: Есть текстовый файл.В нём два слова.Нужно поменять их местами не используя дополнительных массивов и файлов. Заранее спасибо


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути
Programma_Boinc 01.01.2026
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути Сочетание глобально распределённой вычислительной мощности и инновационных. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru