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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 24.12.2013, 08:45   #1
123445556776578
Заблокирован
 
Регистрация: 24.12.2013
Сообщений: 1
По умолчанию Помогите, пожалуйста, разработать программу подсчета количества двоичных нулей в двухбайтовой переменной на ассемблере.

Код:
.MODEL SMALL
.STACK 100h
.DATA
;dvuhbaitovaya dw 65530
buf1 db 17, 00, 17 dup ('$')
entr db 10,13,'$'
.CODE
START:
xor ax, ax
mov ax, @DATA
mov ds, ax
;mov ah, 0ah
;mov dx, offset buf1
;int 21h
mov ax, 65
mov cx, 16
xor dx,dx 
op:
shl ax, 1
jc equals
dec cx
cmp cx,0
je exit
jmp op
equals:
inc dx
dec cx
cmp cx,0
jnc op
exit:
mov ax, 15
sub ax, dx
mov bl,10
div bl
add ah, 30h 
add al, 30h 
mov dl,al
mov bl,ah
mov ah, 02h
int 21h
mov dl,bl
int 21h
mov ah,4ch
int 21h
end start
end


___________
Код нужно оформлять по правилам:
тегом [CODE]..[/СODE]
(кнопочка на панели форматирования с решёточкой #)
Не забывайте об этом!

Модератор.

Последний раз редактировалось Serge_Bliznykov; 24.12.2013 в 09:07.
123445556776578 вне форума Ответить с цитированием
Старый 24.12.2013, 09:25   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

я бы такой код предложил:

Код:
.MODEL SMALL
.STACK 100h
.DATA
MyNumbers dw 0FF15h ;65

.CODE
START:
  mov ax, @DATA
  mov ds, ax
  mov ax, MyNumbers
  mov cx, 16
  xor dx,dx 
op:
  test ax, 1
  jnz cont
  inc dx
cont:
  shr ax, 1
  loop op

  mov ax, dx
  mov bl,10
  div bl
  add ah, 30h 
  add al, 30h 
  mov dl,al
  mov bl,ah
  mov ah, 02h
  int 21h
  mov dl,bl
  int 21h

  mov ax,4C00h
  int 21h
end start
end
Serge_Bliznykov вне форума Ответить с цитированием
Старый 24.12.2013, 09:27   #3
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Я автора за ник залочил.
И кстати эта тема - кросспост.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 24.12.2013, 09:57   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Я автора за ник залочил.
я видел. и то, что автора залочили. И то, что тему удалили.
Всё это произошло, пока я код писал.
я её восстановил из удалённых, обидно было свой код выбрасывать, вдруг пригодится кому-нибудь!

Цитата:
Сообщение от Stilet Посмотреть сообщение
И кстати эта тема - кросспост.
упс. я такую не нашёл, можно ссылочку на дублирующую тему?
Serge_Bliznykov вне форума Ответить с цитированием
Старый 24.12.2013, 10:55   #5
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
упс. я такую не нашёл
Неа. Я походу из-за восстановления этой темы решил что она кросспостная
Но все равно ник фтопку.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 24.12.2013, 11:30   #6
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Но все равно ник фтопку.
дык, не спорю. Никто его восстанавливать и не собирается!
Serge_Bliznykov вне форума Ответить с цитированием
Старый 24.12.2013, 13:39   #7
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,331
По умолчанию

http://graphics.stanford.edu/~seande...ntBitsSetNaive
Может кому пригодится
waleri вне форума Ответить с цитированием
Старый 25.12.2013, 01:53   #8
Son Of Pain
Участник клуба
 
Регистрация: 23.12.2010
Сообщений: 1,129
По умолчанию

А еще в новых процессорах есть инструкция popcnt (population count), которая возвращает количество установленных битов.

Потому я бы написал что-то вроде:
Код:
popcnt bx, ax
mov ax, 16
sub ax, bx
Son Of Pain вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите, пожалуйста. Разработать программу, выделив процедуры PaNdA888 C++ Builder 3 09.12.2013 11:30
Задача на асемблере: Написать программу для подсчета количества вхождений в строку 3-й буквы Вашей фамилии. Vlt Помощь студентам 0 13.03.2013 21:01
Запись заданного количества нулей в StringGrid rainbow Общие вопросы Delphi 6 13.06.2012 12:20
Сложение двоичных чисел в Ассемблере Дмитрий142 Помощь студентам 0 26.04.2011 18:26
С++ Составить функцию для подсчета числа серий положительных, отрицательных чисел и нулей KASPEER Помощь студентам 0 13.01.2010 15:19