да , нужна и процедура которая делает из результата всё наоборот![]()
да , нужна и процедура которая делает из результата всё наоборот![]()
С любовью к вам, Yandex.Direct
Размещение рекламы на форуме способствует его дальнейшему развитию
правильно я раскомментил ?
Код:ld hl,OutPut ld de,0 ; счётчик бит ( 0-260 ) exx ld hl,Input ld b,35 ; счётчик байт lab1 ld a,(hl) ld c,8 ; счётчик бит в байте lab2 rla : 7 бит в Carry exx jr c,lab3 ; если Carry =0 ( установлен ) то ld (hl),e ; иначе записывем текущий номер бита в результат inc hl ; +1 адрес результата ld (hl),d inc hl ; +1 адрес результата lab3 inc de ; увеличиваем счётчик бит exx dec c ; уменьшаем 8 битовый проход jr nz,lab2 ; биты еще остались ? inc hl ; перешли к следующему байту последовательности djnz lab1 ret
Всё почти так и есть.Сообщение от Orionsoft
Только тут:
Код:jr c,lab3 ; если Carry = 1 ( установлен ) то блок пропускается, иначе...
Последний раз редактировалось SAM style; 12.02.2007 в 23:29.
Все любят гипножабу
" Этюды " - рулят !![]()
а процедура наоборот делающая ?
если не трудно![]()
Вход - список номеров выключеных байт (словами, по 2 байта). Список заканчивается словом #FFFF.
Можно ещё одну придумать, побыстрее, но только если список будет упорядоченым - от меньшего к большему.Код:ld hl,Output ; сначала устанавливаем все биты ld b,35 lab0 ld (hl),#FF inc hl djnz lab0 ld hl,Input lab1 ld e,(hl) ; берём номер бита inc hl ld d,(hl) inc hl ld a,d ; если он #FFFF - выход and e inc a ret z push hl ld a,e ; вычисляем маску для этого бита and 7 ld c,#7F jr z,lab3 lab2 rrc c dec a jr nz,lab2 lab3 ld a,d ; вычисляем адрес байта, в котором этот бит находится rra rr e rra rr e rra rr e ld d,0 ld hl,OutPut add hl,de ld a,(hl) ; сбрасываем бит and c ld (hl),a pop hl jr lab1 ; переходим к следующему номеру
Все любят гипножабу
За что люблю спектрум - самая добрая платформа =)
SAMstyle![]()
Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)