Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 18.03.2012, 09:40   #1
noob asm
Новичок
Джуниор
 
Регистрация: 18.03.2012
Сообщений: 3
По умолчанию Дан массив из 9 байт расматривая его как массив 72 бит подсчитать число нулей в этом массиве.

Дан массив из 9 байт расматривая его как массив 72 бит подсчитать число нулей в этом массиве. Вывести результат на экран.
Уважаемые форумчане мне очень нужна ваша помощь я обращаюсь к вам в первые по данной проблеме и может быть в последний раз!!! Нужно полностью написать данную программу с выводом результата на экран для TASM. Буду очень благодарен если вы мне поможите!!!

Последний раз редактировалось noob asm; 18.03.2012 в 09:42.
noob asm вне форума Ответить с цитированием
Старый 18.03.2012, 10:08   #2
DiemonStar
Старожил
 
Регистрация: 08.02.2012
Сообщений: 2,173
По умолчанию

Цитата:
Нужно полностью написать данную программу
Здесь больше принято помогать, а не решать чужие проблемы. Да и готовые решения найти можно, если поискать хорошо...
Правильно поставленная задача - три четверти решения.
DiemonStar вне форума Ответить с цитированием
Старый 18.03.2012, 10:18   #3
noob asm
Новичок
Джуниор
 
Регистрация: 18.03.2012
Сообщений: 3
По умолчанию

Код:
Data SEGMENT
dat     dd      1000011110101010b
Data ENDS
Ourstack SEGMENT Stack                  
DB 100h DUP (?)                         
Ourstack ENDS                           
 
ASSUME CS:Code, DS:Data, SS:Ourstack    
Code SEGMENT                            
Start:    
 
MOV AX, DATA
MOV DS, AX
xor  AX, AX
xor BX,BX
        lea si,dat              
        mov dx,[si]
        mov cx,16
met:    rcl dx,1
        JNC met_1
met_2:  loop met
        JMP met_3
met_1:  inc bl
        JMP met_2
 
met_3:  mov AX, 4C00h                           
        int 21h                                 
Code ENDS
END Start
помогите хоть сделать чтобы программа выводила результат на экран.

Последний раз редактировалось Stilet; 18.03.2012 в 12:38.
noob asm вне форума Ответить с цитированием
Старый 18.03.2012, 11:38   #4
DiemonStar
Старожил
 
Регистрация: 08.02.2012
Сообщений: 2,173
По умолчанию

1. код лучше выкладывать в специальных тегах - кнопка с решёткой.
2. код обработки лучше сделать так:
Код:
Data SEGMENT
dat db 1,2,3,4,5,6,7,8,9
stp db 0
Data ENDS

Ourstack SEGMENT Stack 
DB 100h DUP (?) 
Ourstack ENDS 

ASSUME CS:Code, DS:Data, SS:Ourstack 
Code SEGMENT 
Start: 
MOV AX, DATA
MOV DS, AX

lea  si, dat ;получаем адрес массива
lea dx, stp ;получаем адрес окончания массива
xor bx, bx  ;очищаем счётчик единиц

cyc1:
mov al, byte ptr [si] ;загружаем байт с содержимым
mov cx, 8 ;инициируем счётчик цикла битов

cyc2:
test al, 1 ;проверяем значение в бите
jnz to_cyc2 ;если не ноль, то дальше
inc bx  ;увеличиваем счётчик нулей
to_cyc2:
shr al,1 ;устанавливаем следующий бит в байте на проверку
loop cyc2 ;прогоняем все 8 битов байта
inc si ;переходим к следующему элементу массива
cmp dx, si ;сравниваем адрес этого элемента с адресом окончания массива
jne cyc1 ;если адреса не совпадают, то заново
;на выходе в bx содержится количество нулей в массиве
met_3: mov AX, 4C00h 
int 21h 
Code ENDS
END Start
Правильно поставленная задача - три четверти решения.
DiemonStar вне форума Ответить с цитированием
Старый 18.03.2012, 15:38   #5
noob asm
Новичок
Джуниор
 
Регистрация: 18.03.2012
Сообщений: 3
По умолчанию

а как сделать вывод результата?
noob asm вне форума Ответить с цитированием
Старый 18.03.2012, 17:19   #6
DiemonStar
Старожил
 
Регистрация: 08.02.2012
Сообщений: 2,173
По умолчанию

например так:
Код:
;В сегмент данных
Trans db '0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'
OutS db 3 dup (' ')
OutS_E db ' ', '$'

;В сегмент кода
push ds
pop  es
lea di, OutS_E
mov dx, bx
lea bx, Trans
out_cyc:
mov al,dl
and al,00001111b
xlat
mov [si], al
shr dx,4
dec si
cmp dx,0
jne out_cyc

lea dx, OutS
mov ah,09h
int 21h
вывод в шестнадцатиричной системе. если не устраивает - на сайте много примеров реализации вывода.
Правильно поставленная задача - три четверти решения.
DiemonStar вне форума Ответить с цитированием
Старый 16.04.2012, 19:04   #7
programmisto1
Пользователь
 
Регистрация: 16.04.2012
Сообщений: 11
По умолчанию

Просто используй команду test для каждого бита в байте (берешь так семь байт), а по команде jne переходи на увеличение. Я знаю алгоритм вывода: делишь на основание системы (10 или любое другое), а остатки составляешь, а затем переворачиваешь, добавляешь 48 и выводишь этот символ
programmisto1 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Дан массив из N целых чисел. Получить из него массив чисел по модулю меньших 10 и отсортировать его(язык си++) mitja-zakelidis Помощь студентам 2 15.03.2012 03:10
дан массив из 10 байт. Подсчитать количество единиц во всех разрядах кратным 3: 3,6,9...75,78 СмирГум Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 0 25.01.2012 10:49
4. Дан одномерный массив. Найдите разность наибольшего и наименьшего чисел в этом массиве. Иван_lk Помощь студентам 0 31.05.2011 20:46
Дан массив, состоящий из символов. Вывести на экран цифру, наиболее часто встречающуюся в этом массиве. Andros_me Помощь студентам 2 21.12.2010 08:50
Как конвертировать массив символов в массив байт davinci C++ Builder 6 30.10.2010 18:09