Форум программистов, компьютерный форум, киберфорум
Микроконтроллеры
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
0 / 0 / 0
Регистрация: 15.04.2020
Сообщений: 4

(ADuC812) Удвоить значения каждого элемента массива, находящегося во внутреннем ОЗУ

07.05.2020, 18:41. Показов 1115. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Задача. Удвоить значения каждого элемента массива, находящегося во внутреннем ОЗУ и переписать его во внешнее ОЗУ. Признаком конца массива является символ & (код в HEX=26). Начальный адрес внутреннего ОЗУ = A1H, начальный адрес внешнего ОЗУ =2500H.
Для указанной задачи написать программу на ассемблере, оформив выполняемые действия в виде подпрограммы, которая должна вызываться из главной программы. Выполнить отладку и тестирование программы на симуляторе.

В прикрепленном документе есть пример, но для своей задачи я не понимаю что необходимо сделать. Пожалуйста, помогите в составлении рабочей программы с комментариями для Чайника)

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
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
;Образец ответа по второму вопросу (пример программы из первой лабораторной работы)
 
 
 
 
 
;ФИО_________
 
;Билет № _2_
 
 
 
 
 
;Главная программа
 
;----------------------------------------------------
 
$MOD812
 
ADR_ST EQU 03H      ;ст.байт нач. адреса массива XSEG (внешней памяти ОЗУ)
 
ADR_ML EQU 00H      ;мл.байт нача.адреса массива XSEG (внешней памяти ОЗУ)
 
DL     EQU 8        ;длина массива=8 байт
 
       ORG 0000H    ;начальный адрес программы в CSEG (ПЗУ)
 
;Передача параметров в подпрограмму "XS_CS"
 
   MOV   DPTR,#ADR_CS ;DPTR=нач.адрес массива в CSEG (ПЗУ)
 
   MOV   R0,#ADR_ML ;R0=мл.байт адреса массива в XSEG (внешней памяти ОЗУ)
 
   MOV   P2,#ADR_ST ;P2=ст.байт адреса массива в XSEG (внешней памяти ОЗУ)
 
   MOV   R1,#DL     ;R1=длина массива
 
   LCALL XS_CS      ;вызов Подпрограммы "XS_CS"
 
   SJMP  KONEZ      ;переход в конец программы
 
;----------------------------------------------------
 
;Подпрограмма "XS_CS" пересылки массива из CSEG в XSEG
 
;Вход:DPTR=адрес начало массива в CSEG (ПЗУ)
 
;     R0=младший байт начало массива в XSEG (внешней памяти)
 
;     P2=старший байт начала массива в XSEG 
 
;     R1=длина передаваемого массива из ПЗУ во внешнюю память;
 
XS_CS: PUSH ACC
 
   XC: CLR  A           ;А=0 (очистка аккумуулятора)
 
       MOVC A,@A+DPTR   ;А-очередной байт из АСС (поочерендная пересылка элементов массива из ПЗУ в аккумулятор)
 
       MOVX @R0,A       ;XSEG=очередной байт
 
       INC  DPTR        ;следующий адрес ячейки ПЗУ CSEG (увеличение адреса ПЗУ на единицу) 
 
       INC  R0          ;следующий адрес ячейки внешней памяти XSEG (увеличение адреса ячейки внешней памяти на единицу) 
 
       DJNZ R1,XC       ;пока не все байты переданы,
 
                        ;продолжить
 
       POP  ACC
 
       RET              ;возврат из ПП
 
;---------------------------------------------------
 
;Массив пересылаемых данных длиной 8 байт,
 
;представляющий собой текст 'Privet !' в коде ASCII
 
ADR_CS: DB'Privet !'        ;запись массива "Privet !" в ПЗУ с помощью директивы "DB"
 
;---------------------------------------------------
 
KONEZ: END                  ;конец программы
Добавлено через 8 минут
Желательно на сегодня решить данную задачу
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
07.05.2020, 18:41
Ответы с готовыми решениями:

Удвоить значение каждого элемента массива и вывести на экран
Текст задачи. Заполнить массив с именем X случайными значениями и вывести эти значения на экран. Размерность массива 12, все элементы...

Если сумма элементов массива отрицательная, изменить знак каждого элемента, если положительная, удвоить каждый
Заполнить двумерный массив N x N случайными числами из интервала . Найти сумму элементов. И если она отрицательная, заменить все...

Для каждого массива вывести индексы тех элементов, значения которых больше значения последующего элемента
Есть два класса class Class1 { public static void out_put(int x, TextBox B)//вывод массива { ...

2
0 / 0 / 0
Регистрация: 15.04.2020
Сообщений: 4
07.05.2020, 20:55  [ТС]
Результат моей работы, но я не уверен в том, что все правильно я сделал
Вложения
Тип файла: txt PR.txt (1.4 Кб, 7 просмотров)
0
пофигист широкого профиля
4770 / 3205 / 862
Регистрация: 15.07.2013
Сообщений: 18,613
07.05.2020, 21:44
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
;Главная программа
;----------------------------------------------------
$MOD812
ADR_S  EQU A1H      ;ст.байт нач.адреса массива в DSEG (внутренней памяти ОЗУ)
ADR_D  EQU 2500H    ;начальный адрес массива во внешней памяти 
End_Mark EQU 26H
;Передача параметров в подпрограмму "CS_DS"
   MOV   DPTR,#ADR_D  ;DPTR=нач.адрес массива во внешней памяти 
   MOV   R0,#ADR_ S   ;байт адреса массива в DSEG (внутренней памяти ОЗУ)
   LCALL CS_DS        ;вызов подпрограммы "CS_DS"
   SJMP  KONEZ        ;переход в конец программы
;----------------------------------------------------
;Подпрограмма CS_DS пересылки массива из CSEG в DSEG
 
 
CS_DS: 
XC:    MOV A,@R0         ;А-очередной байт из исходного массива
       CJNE A,#End_Mark,XC1 ;если байт равен End_Mark, значит это конец массива 
       SJMP XC2         ;и надо выходить из процедуры
XC1:   RL A             ;сдвиг содержимого аккумулятора влево
       MOVX @DPTR,A     ;поместили удвоенный байт во внешнюю память
       INC  DPTR        ;следующий адрес ячейки внешней памяти
       INC  R0           ;следующий адрес ячейки внутренней памяти ОЗУ DSEG
       SJMP XC          ;пока не все байты переданы,
                        ;продолжить
XC2:   RET              ;возврат из подпрограммы
;---------------------------------------------------
 
KONEZ:
      END                  ;конец программы
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
07.05.2020, 21:44
Помогаю со студенческими работами здесь

Для каждого массива вывести индексы тех элементов, значения которых больше значения последующего элемента
Есть два класса class Class1 { public static void out_put(int x, TextBox B)//вывод массива { ...

Для каждого массива вывести индексы тех элементов, значения которых больше значения последующего элемента
Привет, помогите пожалуйста с лабораторной. Уже кое-что сделано 1)Для каждого массива вывести индексы тех элементов, значения которых...

В каждом элементе массива, находящегося во внешнем ОЗУ, поменять местами тетрады байта
Assembler, ASM Для указанной задачи написать программу на ассемблере, оформив выполняемые действия в виде подпрограммы, которая должна...

Напечатать значения каждого 5-го элемента массива
Заполнить массив М(10) случайными значениями. Организовать вывод на экран. Присвоить указателю адрес начала размещения массива в памяти....

Вывести значения элемента, находящегося на пресечении диагоналей
Статическая память. Двумерный массив. Массив квадратный. Вывести значения элемента, находящегося на пресечении диагоналей. Если такого...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
Отправка уведомления на почту при изменении наименования справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере изменения наименования справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной записи. . .
модель ЗдравоСохранения 5. Меньше увольнений- больше дохода!
anaschu 24.03.2026
Теперь система здравосохранения уменьшает количество увольнений. 9TO2GP2bpX4 a42b81fb172ffc12ca589c7898261ccb/ https:/ / rutube. ru/ video/ a42b81fb172ffc12ca589c7898261ccb/ Слева синяя линия -. . .
Midnight Chicago Blues
kumehtar 24.03.2026
Такой Midnight Chicago Blues, знаешь?. . Когда вечерние улицы становятся ночными, а ты не можешь уснуть. Ты идёшь в любимый старый бар, и бармен наливает тебе виски. Ты смотришь на пролетающие. . .
Контроль уникальности заводского номера - вариант №2
Maks 24.03.2026
В отличие от предыдущего варианта добавлено прерывание циклов, также добавлены новые переменные для сохранения контекста ошибки перед прерыванием цикла: Процедура ПередЗаписью(Отказ, РежимЗаписи,. . .
SDL3 для Desktop (MinGW): Вывод текста со шрифтом TTF с помощью библиотеки SDL3_ttf на Си и C++
8Observer8 24.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-text-sdl3-c. zip finish-text-sdl3-cpp. zip
Жизнь в неопределённости
kumehtar 23.03.2026
Жизнь — это постоянное существование в неопределённости. Например, даже если у тебя есть список дел, невозможно дойти до точки, где всё окончательно завершено и больше ничего не осталось. В принципе,. . .
Модель здравоСохранения: работники работают быстрее после её введения.
anaschu 23.03.2026
geJalZw1fLo Корпорация до введения программа здравоохранения имела много невыполненных работниками заданий, после введения программы количество заданий выросло. Но на выплатах по больничным это. . .
Контроль уникальности заводского номера - вариант №1
Maks 23.03.2026
Алгоритм контроля уникальности заводского (или серийного) номера на примере документа выдачи шин для спецтехники с табличной частью в конфигурации КА2. Данные берутся из регистра сведений, по. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru