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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 12.04.2012, 18:50   #1
strelec025
Новичок
Джуниор
 
Регистрация: 12.04.2012
Сообщений: 1
По умолчанию Определение мощности множества

Задание:
Необходимо реализовать подпрограмму function Card(var A; M:byte):byte, выполняющую подсчет и возвращающую реальное число элементов множества (мощность множества). Ошибка превышения M предельного значения не контролируется.
A - множество, представленное последовательностью битов, каждый бит которого показывает, принадлежит элемент с данным порядковым номером множеству или нет;
M - объявленное число элементов.

Мой текст программы:
Подпрограмма:
Цитата:
Код:
code segment byte public
     assume cs:code, ds:code
     public Card
Card proc far
A    equ dword ptr [bp+6]
M    equ byte ptr [bp+10]
Res  equ byte ptr [bp+12]
     push  bp      ; сохранение bp
     mov   bp,sp   ; настройка bp на вершину стека
     push  ds      ; сохранение ds
     lea   cx,M    ; мощность множетсва (объявленная)
     xor   bl,bl   ; обнуление счетчика реального количества элементов множества
     lea   ax,A    ; множество A
.386
m1:  bt    ax,cx   ; сравнить cx-ый бит, является ли элементом множества(1-да,0-нет)
     jnc   m2      ; если бит=0, то на m2
     add   bl,1    ; если бит=1, то счетчик+1
m2:  loop  m1      ; зацикливание, пока M не обнулится
     mov   Res,bl  ; реальная мощность множества
     pop   ds      ; восстановить ds
     pop   bp      ; восстановить bp (sp изменен корректно)
     ret   6       ; выход с удалением A,M
Card endp
code ends
end
Вызов подпрограммы:
Цитата:
Код:
code segment
     assume cs:code, ds:code
     M  db  10
mnozh struc
     E  db  256 dup(?)
mnozh ends
     extrn Card:far
start:
     mov  ax,code
     mov  ds,ax
     A mnozh <01011100b>
     
     push ds
     mov  ax,offset A.E
     push ax
     push ds
     mov  al,M
     push ax
     call Card
     pop  bx
     pop  ds
     
     mov  dl,[bx]
     mov  ah,2
     int  21h
     
     mov  ax,4c00h
     int  21h

code ends
end start
Не могу понять почему не выводит мощность множества, выдает символ '['.
Подскажите в чем ошибся, люди добрые.
strelec025 вне форума Ответить с цитированием
Старый 12.04.2012, 21:49   #2
DiemonStar
Старожил
 
Регистрация: 08.02.2012
Сообщений: 2,173
По умолчанию

Цитата:
Код:
 
lea   cx,M    ; мощность множетсва (объявленная)
xor   bl,bl   ; обнуление счетчика реального количества элементов множества
lea   ax,A    ; множество A
хмм.. а что вы в итоге хотите там получить?
Правильно поставленная задача - три четверти решения.
DiemonStar вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
хватит ли мощности блока питания rUs_LAN Компьютерное железо 2 25.02.2012 22:33
Измерение мощности AMR voronuk Мультимедиа в Delphi 0 31.05.2011 11:19
усилитель мощности своими руками alex(21) Компьютерное железо 3 27.03.2011 12:10
увеличение мощности лазера PSX Пепел Феникса Общие вопросы по программированию, компьютерный форум 0 28.04.2010 15:28