djnz



Автор Пинки Пинки задал вопрос в разделе Другие языки и технологии

объясните, пожалуйста, программу на ассемблер и получил лучший ответ

Ответ от Виктор Ковалёв[гуру]
Ассемблер какой-то незнакомый. Было бы хорошо, если бы было написано, к какому он процессору.
Можно только предположить суть программы по мнемоникам.
Поэтому только предположение.
Наверное, так.
Ex_2: ; Метка начала программы.
mov R0,#Arr; В регистр R0 записывается адрес массива Arr.
mov k,#size; В регистр k записывается длина массива Arr.
mov a,#0 ; Sum = 0. Обнуляется младший байт суммы.
mov R1,#0; Обнуляется старший байт суммы.
L2: ; Начала цикла сложения.
add a,@R0 ; Сумма
; К содержимому a прибавляется значение очередного элемента массива Arr.
; Адрес этого элемента записан в R0.
jnc m2; Обработка переполнения при сложении.
; Если переполнения не было, то переход на m2 на продолжение программы.
; Действие при переполнении.
inc R1; Увеличение R1 на единицу.
; При переполнении "a" к R1 прибавляется 1, и в R1 получается старший байт суммы.
m2: ; Продолжения после обработки переполнения. .
inc R0 ; Установка указателя в R0 на следующий элемент массива.
djnz k,L2; Проверка продолжения цикла.
; Из "k" вычитается 1 и проверяется новое значение "k".
; Если "k" не равно 0, то переход на L2 и новое выполнение цикла сложения.
; Если "k" равно 0, то цикл сложения закончен и продолжение программы.
mov Sum,a; Младший байт суммы записывается в ячейку с адресом Sum.
mov Sum+1,R1; Старший байт суммы записывается в ячейку с адресом Sum+1.
; По адресу Sum получается двухбайтовое значение суммы.
jmp $ ; Останов выполнения. Бесконечный цикл с переходом на саму команду jmp.
Начальный адрес массива Arr - 30H. На это указывает начальное значение R0.
Число элементов массива 10, это равно "k".
Перед первым проходом цикла "a" и R1 равны нулю.
После каждого прохода цикла в "a" и R1 сумма сложенный значений массива Arr.
В "a" - младший байт, в R1 - старший.
Про ассемблер.
Похоже, что это ассемблер не компьютерного процессора, а микроконтроллера. Отдельный аккумулятор "a", остальные регистры R0 и R1, специальный регистр "k" для счётчика. Всё вместе, особенно "k", на это довольно точно указывает.

Ответ от 3 ответа[гуру]
Привет! Вот подборка тем с похожими вопросами и ответами на Ваш вопрос: объясните, пожалуйста, программу на ассемблер
 

Ответить на вопрос:

Имя*

E-mail:*

Текст ответа:*
Проверочный код(введите 22):*