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

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

От Vlad Sotnikov Кому All 15.09.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.09.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.09.2003

Привет, Vlad. Пн 15 Сен 02 Vlad Sotnikov -> All: VS> Есть байт X, в нем нyжно обменять местами, напpимеp, 2-й и VS> 0-й биты. VS> А как можно сделать коpоче и быстpее? а на сколько тебе сделать короче? ты еще не посчитал сколько твой вариант, или это нам делать? Спасибо за внимание.

От Aleksey Malov Кому Vlad Sotnikov 27.09.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.09.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.09.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.10.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.10.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