ZXNet эхоконференция «code.zx»


тема: Задачка от Axor'a #1



от: Vlad Sotnikov
кому: All
дата: 15 Sep 2003
Пpивет, All!

Есть байт X, в нем нyжно обменять местами, напpимеp, 2-й и 0-й биты.

Мой ваpиант таков:

LD B,A
BIT 0,A
JR NZ,bit
RES 0,B
JR $+4
bit SET 0,B
BIT 2,A
JR NZ,bit2
RES 2,B
JR $+4
bit2 SET 2,B
LD A,B

А как можно сделать коpоче и быстpее?



Vega/ex-Style Group.

<филфак-СПбГУ>
FIDO: 2:5030/1512 ZXNET: 500:812/19 E-mail: vega56@mail.ru

от: Kirill Frolov
кому: Vlad Sotnikov
дата: 15 Sep 2003
Hемедленно нажми на RESET, Vlad Sotnikov!

On Sun, 14 Sep 03 23:13:18 +0400, Vlad Sotnikov wrote:


VS> Есть байт X, в нем нyжно обменять местами, напpимеp, 2-й и 0-й биты.
VS> Мой ваpиант таков:

VS> LD B,A
VS> BIT 0,A
VS> JR NZ,bit
VS> RES 0,B
VS> JR $+4
VS> bit SET 0,B
VS> BIT 2,A
VS> JR NZ,bit2
VS> RES 2,B
VS> JR $+4
VS> bit2 SET 2,B
VS> LD A,B

VS> А как можно сделать коpоче и быстpее?

Если сильно быстрей, то так:

ld h, "таблица перекодировки" / 256
ld l, a
ld a, (hl)

Иначе через логические операции (AND, OR, XOR), будет чуть быстрей
нежели в твоём варианте за счёт минимазации количества условных
переходов.

от: Evgeny Goljakov
кому: Vlad Sotnikov
дата: 19 Sep 2003
Привет, Vlad.
Пн 15 Сен 02 Vlad Sotnikov -> All:

VS> Есть байт X, в нем нyжно обменять местами, напpимеp, 2-й и
VS> 0-й биты.

VS> А как можно сделать коpоче и быстpее?

а на сколько тебе сделать короче?
ты еще не посчитал сколько твой вариант, или это нам делать?

Спасибо за внимание.

от: Aleksey Malov
кому: Vlad Sotnikov
дата: 27 Sep 2003
Hi, Vlad!

Monday September 15 2003 at 00:13 Vlad Sotnikov wrote to All about Задачка от
Axor'a #1

VS> Пpивет, All!

VS> Есть байт X, в нем нyжно обменять местами, напpимеp, 2-й и 0-й биты.

VS> Мой ваpиант таков:

VS> LD B,A
VS> BIT 0,A
VS> JR NZ,bit
VS> RES 0,B
VS> JR $+4
VS> bit SET 0,B
VS> BIT 2,A
VS> JR NZ,bit2
VS> RES 2,B
VS> JR $+4
VS> bit2 SET 2,B
VS> LD A,B

tmin = 64
tmax = 78
size = 23

VS> А как можно сделать коpоче и быстpее?

==================
rrca
ld b,a
rrca
ld c,a
rrca
ld d,a
rl b
rla
rl c
rla
rl d
rla

time=60
size=15
=====================

ld c,a
and 7
add a, tab
ld l,a
adc a,tab/256
sub l
ld h,a
ld a,c
and #f8
or (hl)

tab db 0, 4, 2, 6, 1, 5, 3, 7

time=55
size=21
================================

Hу, это первое, что в голову пришло. А вообще, я забывать спектрумовский
ассемблер стал...

Bye, Vlad!
Vivid / Brainwave Team http://www.bwteam.org ICQ: 164514413

от: Aleksey Malov
кому: Aleksey Malov
дата: 27 Sep 2003
Hi, Aleksey!

Saturday September 27 2003 at 00:08 Aleksey Malov wrote to Vlad Sotnikov about
Задачка от Axor'a #1

AM> ==================
AM> rrca
AM> ld b,a
AM> rrca
AM> ld c,a
AM> rrca
AM> ld d,a
AM> rl b
AM> rla
AM> rl c
AM> rla
AM> rl d
AM> rla

AM> time=60
AM> size=15
AM> =====================

Блин. Торможу...

ld b,a
rrca
rrca
rrca
ld c,a
rr b
rla
rlca
rl c
rla

time = 48
size = 12

AM> Hу, это первое, что в голову пришло. А вообще, я забывать
AM> спектрумовский ассемблер стал...

Вот именно. Склероз

Bye, Aleksey!
Vivid / Brainwave Team http://www.bwteam.org ICQ: 164514413

от: Evgeny Goljakov
кому: Aleksey Malov
дата: 29 Sep 2003
Привет, Aleksey.
Сб 27 Сен 02 Aleksey Malov -> Aleksey Malov:

AM> time = 48
AM> size = 12

Hаша Diamodns школа в лице Merlin'a предлoжила бы:

;==#Exchange any 2 bits
;c 2003 Merlin/ZX Diamond
; in: a
;out: a

AND 5 ;(%00000101)
JP PE,W
XOR 5 ;(%00000101)
W ...

time 24
size 7

В отличие от сдвигов может менять любые 2 бита без
изменения обьема кода.

А если нужно не менять остальные биты А:
;#Exchange any 2 bits only
;c 2003 Merlin/ZX Diamond

LD C,A
AND 5
LD A,C
JP PE,W
XOR 5
W ...

time 32
size 9

AM>> Hу, это первое, что в голову пришло. А вообще, я

а мне первое что пришло, это повестка в воинКомат..

AM>> забывать спектрумовский ассемблер стал...

Мерлин меня поразил, он думал 10 сек. над задачей,
незря для Nicron'а мы его читалку выбрали ;)))

Спасибо за внимание.

от: Ivan Roshin
кому: Vlad Sotnikov
дата: 03 Oct 2003
Hello, Vlad!

15 Sep 2003 you wrote:

VS> Есть байт X, в нем нyжно обменять местами, напpимеp, 2-й и
VS> 0-й биты.

VS> Мой ваpиант таков:

VS> LD B,A
VS> BIT 0,A
VS> JR NZ,bit
VS> RES 0,B
VS> JR $+4
VS> bit SET 0,B
VS> BIT 2,A
VS> JR NZ,bit2
VS> RES 2,B
VS> JR $+4
VS> bit2 SET 2,B
VS> LD A,B

VS> А как можно сделать коpоче и быстpее?

У меня Alex Xor тоже это спрашивал, я предложил ему такой
вариант:

Если оба бита равны, то ничего менять не надо. Если не
равны, то меняем их значения на противоположные одним XOR'ом.

LD B,A
LD C,%00000101 ;Единицы в маске соответствуют
;обмениваемым битам.
AND C
JR Z,M1 ;Переход, если оба бита равны 0.
CP C
JR NZ,M2 ;Переход, если биты не равны.
M1 LD C,0 ;Биты равны - обнуляем маску.
M2 LD A,B
XOR C

С уважением, Иван Рощин.

от: Aleksey Malov
кому: Evgeny Goljakov
дата: 04 Oct 2003
*** Answer from area CARBON (Карбонка)

Hi, Evgeny!

Monday September 29 2003 at 03:55 Evgeny Goljakov wrote to Aleksey Malov about
Задачка от Axor'a #1


EG> В отличие от сдвигов может менять любые 2 бита без
EG> изменения обьема кода.

EG> А если нужно не менять остальные биты А:
EG> ;#Exchange any 2 bits only
EG> ;c 2003 Merlin/ZX Diamond

EG> LD C,A
EG> AND 5
EG> LD A,C
EG> JP PE,W
EG> XOR 5
EG> W ...

Круто!!! Hикогда не дружил (в смысле, ни разу ни юзал в своих прогах) с флагом
четности... А надо было бы...

AM>>> забывать спектрумовский ассемблер стал...
EG> Мерлин меня поразил, он думал 10 сек. над задачей,
EG> незря для Nicron'а мы его читалку выбрали ;)))

Да, есть еще кодеры в спектрумовских селеньях...

Bye, Evgeny!
Vivid / Brainwave Team http://www.bwteam.org ICQ: 164514413




Темы: Игры, Программное обеспечение, Пресса, Аппаратное обеспечение, Сеть, Демосцена, Люди, Программирование

Похожие статьи:
Editorial - make a clean breast of it: "что касается моей музыки здесь - то я хотел чтобы она дарила людям душевное тепло, то, которое у меня было в детстве и то, которое я сумел сохранить до настоящего дня..."
Реклама - Молодая симпатичная синклеристка (у меня ZS SCОRРIОN) ищет умного и высокого (не ниже 180см.) владельца Реntаgоnа.
Игры - как написать компьютерную игру (продолжение).

В этот день...   25 августа