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

Подсчитать количество единичных бит

22.11.2017, 20:19. Показов 1366. Ответов 1
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Ассемблер дается тяжело, но надо сдавать , суть задания: Составить программу подсчета количества единичных бит в трех массивах РПД, состоящих из 10 ячеек каждый (адреса начала массивов: d:0030h, d:0050h, d:0070h).Пытался так :

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
ORG 0H; начальный адрес программы в ПП
MOV R0,#0H; обнуление регистра R0 для подсчета нулей
MOV R5,#0H; подсчет единичных бит
MOV R1,#30H; загрузка в R1 начального адреса первого массива
ACALL NULI; вызов подпрограммы NULI
MOV R1,#50H; загрузка в R1 начального адреса второго массива
ACALL NULI; вызов подпрограммы NULI
MOV R1,#70H; загрузка в R1 начального адреса третьего массива
ACALL NULI; вызов подпрограммы NULI
SJMP EXIT; безусловный переход на метку EXIT (завершение программы)
ORG 20H; начальный адрес подпрограммы NULI
NULI: MOV R3,#0AH; загрузка счетчика количества ячеек в массиве (R3=10)
 
M3: MOV R4,#8H; загрузка счетчика количества бит в ячейке (R4=8)
MOV A,@R1; содержимое ячейки по адресу R1 перенести в А
M2: ANL A,#01h; a=a&00000001B (выделение 0-го бита А)
JNZ M1; если результат не равен 0, то перейти на метку M1
INC R0; увеличить счетчик нулей в R0 на единицу
MOV A,R4; запись в аккумулятор количества бит
SUBB A,R0; вычитание из количества бит 0
mov R5,A;запись единичных бит
M1: MOV A,@R1; содержимое ячейки перенести в А
 RR A; произвести сдвиг содержимого А на 1 бит вправо
 MOV @R1,A; содержимое А вернуть в ячейку
 DJNZ R4, M2; пока не обнулится R4 переходить на метку M2 (8 раз)
 INC R1; выбрать следующую ячейку массива
 DJNZ R3, M3; пока не обнулится R3 переходить на метку M3(10 раз)
 RET; возврат из подпрограммы
EXIT: NOP
Можете проверить , пожалуйста.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
22.11.2017, 20:19
Ответы с готовыми решениями:

[MCU-51] Подсчитать количество единичных разрядов в ячейке внешней памяти
Ребят, спасите пожалуйста, совсем не понимаю ассемблер, но лабу сдать нужно: Составить на ассемблере МК-51 и отладить программу выдачи...

Создать массив Y, каждый элемент которого, начиная с Y(1) равен числу единичных бит в соответствующем элементе массива X
IDE keil uvision4 8051. Помогите пожалуйста решить задачу: Есть массив X, X(0) - длина массива. Надо создать массив Y, каждый элемент...

Подсчитать количество единичных бит в числе типа double
Как это можно сделать? С целой частью понятно, а с дробной нет. double u; u=555.667; long c=u;//555 int count; unsigned mask...

1
пофигист широкого профиля
4769 / 3204 / 862
Регистрация: 15.07.2013
Сообщений: 18,612
23.11.2017, 01:48
У как все сложно.
Предлагаю свой вариант подпрограммы NULI
Assembler
1
2
3
4
5
6
7
8
9
10
NULI: MOV R3,#0AH  ;загрузка счетчика количества ячеек в массиве (R3=10)
M3: MOV R4,#8H     ;загрузка счетчика количества бит в ячейке (R4=8)
MOV A,@R1          ;содержимое ячейки по адресу R1 перенести в А
M2: JNB ACC.0,M3   ;проверка младшего бита на 1/0
INC R5             ;если младший бит = 1, то увеличиваем значение счетчика единиц
M3: RR A           ;сдвигаем байт вправо
DJNZ R4,M2         ;проверяем все ли 8 бит байта проверены. если нет - возвращаемся к проверке младшего бита
INC R1             ;смещаем указатель на следующую ячейку
DJNZ R3,M3         ;проверяем все ли ячейки массива уже проверены. если нет, то возвращаемся к проверке следующего байта
RET                ;возврат из подпрограммы
Помните всё-таки что 8051 это битовый процессор.

[Добавлено через 7 минут
Ну и в качестве бонуса.
Очень хорошо было бы начинать код так
Assembler
1
2
3
4
5
6
ORG 0H        
LJMP Start            ; перейти на начало программы
...
ORG 30H
Start: MOV R0,#0H; обнуление регистра R0 для подсчета нулей
и так далее.
Не нужно забивать своим произвольным кодом область программной памяти, которая по умолчанию отведена для вызова обработчиков аппаратных прерываний.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
23.11.2017, 01:48
Помогаю со студенческими работами здесь

Подсчитать число единичных бит в числе
Помогите пожалуйста решить задание Подсчитать число единичных бит в числе размера CX байт, находящегося по адресу SI. Результат...

Подсчитать число единичных бит в числе 161
Ребята памагите в решение задачки очь нужна ваша помощь на с не с++ Требуеться подчитать число эдиничных бит в числе 161 если...

Подсчитать сколько единичных бит стоит на позициях, номер которых кратен 3
как написать эту программу? имеется целое число,подсчитать сколько единичных бит стоит на позициях, номер которых кратен 3

Подсчитать количество единичных битов в числе произвольной размерности
Подсчитать количество единичных битов в числе произвольной размерности, представленном в виде массива чисел типа longint ). Ввод чисел ...

Подсчитать количество единичных битов в массиве чисел (для Х86)
Добрый! Очень тяжело освоить ассемблер, но сдавать как-то нужно. Если арифметическими опреациями разобралась, то эта задача поставила в...


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Новые блоги и статьи
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru