Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

Ассемблер? Это просто! Учимся программировать


Новое направление Портала RusFAQ.ru:
MosHoster.ru - Профессиональный хостинг

РАССЫЛКИ ПОРТАЛА RUSFAQ.RU

/ КОМПЬЮТЕРЫ И ПО / Языки программирования / Assembler (Ассемблер)

Выпуск № 1067
от 21.09.2008, 21:35

Администратор:Калашников О.А.
В рассылке:Подписчиков: 304, Экспертов: 19
В номере:Вопросов: 1, Ответов: 3

Нам важно Ваше мнение об этой рассылке.
Оценить этот выпуск рассылки >>


Вопрос № 144120: Пусть A и B – два 8-разрядных регистра в обыкновенном 16-разрядном процессоре. Следующая процедура выполняет сдвиг регистра A на число разрядов, заданное в регистре B. Loop: SHR A ; shift right A DEC B ; decrement B JNZ Loop ; l...

Вопрос № 144.120
Пусть A и B – два 8-разрядных регистра в обыкновенном 16-разрядном процессоре. Следующая процедура выполняет сдвиг регистра A на число разрядов, заданное в регистре B.

Loop:
SHR A ; shift right A
DEC B ; decrement B
JNZ Loop ; loop again
Напишите программу, которая выполняет сдвиг быстрее. Надо решить задачу без оператора многократного сдвига
Отправлен: 16.09.2008, 19:41
Вопрос задал: Капранов Павел Павлович (статус: Посетитель)
Всего ответов: 3
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Евгений Иванов
Здравствуйте, Капранов Павел Павлович!

mov cl, [B]
mov ax, [A]
shr ax, cl

уcпехов.
---------
Знания - сила
Ответ отправил: Евгений Иванов (статус: Профессор)
Россия, Нижний Новгород
Тел.: +79519145721
WWW: Eugene Ivanov
ICQ: 214889076
----
Ответ отправлен: 16.09.2008, 19:46

Отвечает: Зенченко Константин Николаевич
Здравствуйте, Капранов Павел Павлович!

Ориентируемся на х86 процессор, и считаем такты процессора.
© Цитата:
Loop:
SHR A ; shift right A - 2 такта
DEC B ; decrement B - 3 такта
JNZ Loop ; loop again 4 такта (вып), 16 тактов(не вып)

итого: (2+3+4)*(В-1)+2+3+16
© Цитата:
mov cx,bx;2 такта
Loop_A:
shr ax,1;2 такта
loop Loop_A; loop again 5 тактов(вып), 17 тактов(не вып)

итого: 2+(2+5)*(В-1)+2+17
Легко заметить, что 2+2+17=2+3+16=21
Остается только то, что умножается на (В-1) т.е. (2+3+4) > (2+5).
Второй цикл быстрее.
Удачи!
---------
Итерация от человека, рекурсия — от Бога (Питер Дойч)
Ответ отправил: Зенченко Константин Николаевич (статус: Профессор)
Украина, Киев
Тел.: +380979536619
Адрес: Украина г.Киев
----
Ответ отправлен: 16.09.2008, 20:04

Отвечает: Trulala

;такты:
;DEC reg = 3
;JZ = 16 при осущ. перехода; = 4 без осущ. перехода
;SHR reg,1 = 2
;
;к-во тактов при анализе значения BL = (n-1)*(время[DEC reg] + время[JZ no jump]) + (время[DEC reg] + время[JZ jump]) = (n-1)*(3+4) + (3+16)
;к-во тактов при выполнении сдвига = n*(время[SHR reg,1]) = n*2
;суммарные затраты = (n-1)*(3+4)+(3+16)+n*2 = (n-1)*7+19+n*2 = 7*n-7+19+2*n = 9*n+12

;при n=1 (9*n+12) = 21*n
;при n>1 (9*n+12) < 21*n


shr_AL PROC ;(AL = значение для сдвига, BL = количество разрядов сдвига)

dec bl
jz shr_al_1

dec bl
jz shr_al_2

dec bl
jz shr_al_3

dec bl
jz shr_al_4

dec bl
jz shr_al_5

dec bl
jz shr_al_6

dec bl
jz shr_al_7

dec bl
jz shr_al_8

ret

;3+16
shr_al_1:
shr al,1 ;2
ret
;1*(3+4)+(3+16)
shr_al_2:
shr al,1 ;2*2
shr al,1
ret
;2*(3+4)+(3+16)
shr_al_3:
shr al,1 ;2*3
shr al,1
sh r al,1
ret
;3*(3+4)+(3+16)
shr_al_4:
shr al,1 ;2*4
shr al,1
shr al,1
shr al,1
ret
;4*(3+4)+(3+16)
shr_al_5:
shr al,1 ;2*5
shr al,1
shr al,1
shr al,1
shr al,1
ret
;5*(3+4)+(3+16)
shr_al_6:
shr al,1 ;2*6
shr al,1
shr al,1
shr al,1
shr al,1
ret
;6*(3+4)+(3+16)
shr_al_7:
shr al,1 ;2*7
shr al,1
shr al,1
shr al,1
shr al,1
shr al,1
shr al,1
ret
;7*(3+4)+(3+16)
shr_al_8:
; shr al,1 ;2*8
; shr al,1
; shr al,1
; shr al,1
; shr al,1
; shr al,1
; shr al,1
; shr al,1

;при полном сдвиге получим 0
xor al,al ;3
ret

shr_AL ENDP
Ответ отправил: Trulala (статус: 3-ий класс)
Ответ отправлен: 17.09.2008, 04:41


Вы имеете возможность оценить этот выпуск рассылки.
Нам очень важно Ваше мнение!
Оценить этот выпуск рассылки >>

Отправить вопрос экспертам этой рассылки

Приложение (если необходимо):

* Код программы, выдержки из закона и т.п. дополнение к вопросу.
Эта информация будет отображена в аналогичном окне как есть.

Обратите внимание!
Вопрос будет отправлен всем экспертам данной рассылки!

Для того, чтобы отправить вопрос выбранным экспертам этой рассылки или
экспертам другой рассылки портала RusFAQ.ru, зайдите непосредственно на RusFAQ.ru.


Форма НЕ работает в почтовых программах The BAT! и MS Outlook (кроме версии 2003+)!
Чтобы отправить вопрос, откройте это письмо в браузере или зайдите на сайт RusFAQ.ru.


© 2001-2008, Портал RusFAQ.ru, Россия, Москва.
Авторское право: ООО "Мастер-Эксперт Про"
Техподдержка портала, тел.: +7 (926) 535-23-31
Хостинг: "Московский хостер"
Поддержка: "Московский дизайнер"
Авторские права | Реклама на портале

∙ Версия системы: 5.3 RC 2 от 09.09.2008

Яндекс Rambler's Top100
RusFAQ.ru | MosHoster.ru | MosDesigner.ru | RusIRC.ru
Kalashnikoff.ru | RadioLeader.ru | RusFUCK.ru

В избранное