Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Asm: Общие вопросы > Подсчет количества ненулевых элементов...


Автор: xpamoi 20.1.2010, 15:02
Добрых суток! 
У меня вот таков вопрос... Нужно написать подпрограмму для подсчета ненулевых элементов в сегменте стека(результат поместить в регистр CX) для процессора Intel 80x86 реальный режим работы.?!

Автор: iff 20.1.2010, 21:43
Код

;Используются cx, bp, ax
;При передачи управления коду, написанноме ниже требуется, что бы bp и ax содержали 00
        mov     cx, {колличество однобайтных ячеек в стеке}
a10:    cmp     byte ptr [bp], 00
        je      a20
        inc     ax
a20:    inc     bp
        loop    a10
        mov     cx, ax

Автор: xpamoi 21.1.2010, 04:46
iff, 
Спасибо большое=)) вот только вспомнить не могу что такое "je" ?!

Автор: Mikl_ 21.1.2010, 07:00
Цитата(xpamoi)
вот только вспомнить не могу что такое "je" ?
Студенческая наивность, не может он вспомнить то, что и не знал никогда smile je сокращение от jump if equal синоним jz по-русски "перейти если флаг НУЛЯ равен 1" smile 

Автор: iff 21.1.2010, 16:08
Код

cmp     byte ptr [bp], 00
je      a20

Это означает, что если байт находящийся в ячейки со смещением SS:BP нулевой, то перейти к метке a20, если значение ненулевое, то продолжать выполнять инструкции далее по-порядку. В данном случае при ненулевой ячейки программа (http://forum.vingrad.ru/index.php?showtopic=288008&view=findpost&p=2077010) прибавит 1 к AX. А как вы понимаете, AX, у нас и есть счётчик ненулевых ячеек.

Автор: xpamoi 22.1.2010, 11:03
а вот в самом начале перед всем кодом можно обнулить непосредственно AX и BP коммандой "xor" ?!

Код

xor ax, ax
xor bp, bp

Автор: Mikl_ 22.1.2010, 12:23
xpamoi, 
хочешь mov ax,0 хочешь sub ax,ax хочешь xor ax,ax  smile это вопрос личного вкуса, а на вкус и цвет товарищей нет

Автор: xpamoi 22.1.2010, 12:39
Mikl_, 
спасибо большое =) учтем  smile 

Автор: iff 22.1.2010, 16:07
я бы не советовал использовать mov ax, 0, т.к. эта инструкция генерируют 3 байта машинного кода, а остальные, предлежанные xpamoi, в 2 байта. Возможно так же различия в скорости их выполнения.

Кстате, говоря возможно представленный мною код применчть несколько по иному: можнов bp загрузить смещение начальной ячейки. Например, если надо узнать сколько ненулевых ячеек с 5 по 10, то загрузите в bp 5, в cx 6 и обнулите ax.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)