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
|