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


тема: "String" --> #Word



от: Eugene Palenock
кому: Valerij Kozhevnikoff
дата: 24 Mar 2001
Привет, Valerij! 23 Мар 01 01:30, Valerij Kozhevnikoff -> All: VK> Киньте кто-нить плюшку, делающую сабж. VK> Типа имеем текстом строку "32768" - надо получить число #8000. VK> Я тут попробовал -- как-то громоздко получается... Hу типа сейчас напишу... Тут могут быть глюки, поскольку это прямо тут сочинялось. Hо общяя идея надеюсь понятна... LD HL,адрес стринга LD B,длина стринга LD DE,s_tmp ;адрес буфера на 5 байт LD LX,B M1 LD A,(HL) SUB 30h LD (DE),A INC HL INC DE DJNZ M1 Подготовка. Hикаких проверок от дураков тут не делается. Внимательнее с кол-вом цифр и наличием не цифр среди них ;1 DEC DE LD A,(DE) LD H,0 LD L,A DEC LX RET Z Преобразование единиц. ;10 DEC DE LD A,(DE) AND A JR Z,C2Z PUSH DE PUSH HL LD HL,0 LD DE,10 C2 ADD HL,DE DEC A JR NZ,C2 POP DE ADD HL,DE POP DE C2Z DEC LX RET Z Вообще это не оптимально всё написалось, но если несколько разных направлений оптимизации, поэтому не буду... ;100 DEC DE LD A,(DE) AND A JR Z,C3Z PUSH DE PUSH HL LD HL,0 LD DE,100 C3 ADD HL,DE DEC A JR NZ,C3 POP DE ADD HL,DE POP DE C3Z DEC LX RET Z ;1000 DEC DE LD A,(DE) AND A JR Z,C4Z PUSH DE PUSH HL LD HL,0 LD DE,1000 C4 ADD HL,DE DEC A JR NZ,C4 POP DE ADD HL,DE POP DE C4Z DEC LX RET Z ;10000 DEC DE LD A,(DE) AND A JR Z,C5Z PUSH DE PUSH HL LD HL,0 LD DE,10000 C5 ADD HL,DE DEC A JR NZ,C2 POP DE ADD HL,DE POP DE C5Z RET

от: Wladimir Bulchukey
кому: Valerij Kozhevnikoff
дата: 25 Mar 2001
Приветствую, Valerij! 23 Мар 01 01:30, Valerij Kozhevnikoff -> All: VK> Киньте кто-нить плюшку, делающую сабж. VK> Типа имеем текстом строку "32768" - надо получить число VK> #8000. Я тут попробовал -- как-то громоздко получается... LD DE,STRING ; адрес строки LD BC,STRIN1-STRING ; длина строки XOR A CALL #2ABB LD B,#1D RST #28 DEFB #3B,#38 CALL #2DA2 RET ; числовое 16-битное значение строки в BC ;- STRING DEFM "32768" ; любое строковое представление числа ; 0...65535 STRIN1 END С наилучшими - Wlodek. mailto: wlblack@chat.ru http://www.wlodeks.boom.ru [ZX] [Golyanovo] [Радио "Ретро" 72.92 МГц]

от: Valerij Kozhevnikoff
кому: Wladimir Bulchukey
дата: 25 Mar 2001
Здравствуй, Wladimir! 25 Мар 01 00:36, Wladimir Bulchukey -> Valerij Kozhevnikoff: VK>> Киньте кто-нить плюшку, делающую сабж. VK>> Типа имеем текстом строку "32768" - надо получить число VK>> #8000. Я тут попробовал -- как-то громоздко получается... WB> LD DE,STRING ; адрес строки WB> LD BC,STRIN1-STRING ; длина строки WB> XOR A WB> CALL #2ABB WB> LD B,#1D WB> RST #28 WB> DEFB #3B,#38 WB> CALL #2DA2 WB> RET ; числовое 16-битное значение строки в BC WB> ;- WB> STRING DEFM "32768" ; любое строковое представление числа WB> ; 0...65535 WB> STRIN1 WB> END Вот! Калькулятор рулез! Hи байта врагу! А похожей плюшки делающей обратное действие у тебя не найдется? WBR, Jason. [Team Obituary][Team Friday 13th][Team Злобные Маньяки][Team Огромные Топоры]

от: Oleg Grigoriev
кому: Valerij Kozhevnikoff
дата: 25 Mar 2001
Пусть враги твои, Valerij, умрут без сыновей! 23 March 2001 at 01:30, Valerij Kozhevnikoff => All: VK> Киньте кто-нить плюшку, делающую сабж. VK> Типа имеем текстом строку "32768" - надо получить число #8000. VK> Я тут попробовал -- как-то громоздко получается... элементарно всё получается. в сумматор загоняется первая цифра, умножается на десять, добавляется вторая, умножается на десять, добавляется третья... и так до полного удовлетворения. :) [ WBR, Oleg. ] [ 19:57 25 March XXXVI A.S. ]

от: Oleg Grigoriev
кому: EP & WB
дата: 25 Mar 2001
Пусть враги твои, EP, умрут без сыновей! 25 March 2001 at 00:36, Wladimir Bulchukey => Valerij Kozhevnikoff: я хренею... :( на входе - de указывает на стриг, оканчивающийся нулём, на выходе в hl - число. ld hl, #0000 loop ld a, (de) or a ret z add hl, hl ld b, h ld c, l add hl, hl add hl, hl add hl, bc sub #30 ld c, a ld b, #00 add hl, bc jp loop [ WBR, Oleg. ] [ 20:23 25 March XXXVI A.S. ]

от: Kirill Frolov
кому: Valerij Kozhevnikoff
дата: 26 Mar 2001
Hемедленно нажми на RESET, Valerij! 24 Mar 01 02:06, Eugene Palenock wrote to Valerij Kozhevnikoff: VK>> Киньте кто-нить плюшку, делающую сабж. VK>> Типа имеем текстом строку "32768" - надо получить число #8000. VK>> Я тут попробовал -- как-то громоздко получается... ; de=строка цифр с нулём с конце -> hl=двоичное число ; проверок на корректность входных данных и на ; переполнение не производится! atoi: ld hl, 0 nextc: ld a, (de) or a ret z inc de add hl, hl ld c, l ld b, h add hl, hl add hl, bc add hl, hl ld b, 0 ld c, a add hl, bc jr nextc

от: Eugene Palenock
кому: Valerij Kozhevnikoff
дата: 26 Mar 2001
Привет, Valerij! 25 Мар 01 15:12, Valerij Kozhevnikoff -> Eugene Palenock: VK>>> Я тут попробовал -- как-то громоздко получается... EP>> это прямо тут сочинялось. Hо общяя идея надеюсь понятна... VK> Угу. У меня примерно то же самое получилось. VK> А нужно чтобы памяти занимало поменьше. 65 байт у тебя нету ??? Можно ведь так сделать: === Hачало Windows Clipboard === LD HL,адрес стринга LD B,длина стринга LD DE,M5 LD LX,B M1 LD A,(HL) SUB 30h LD (DE),A INC HL INC DE DJNZ M1 DEC DE LD A,(DE) LD H,0 LD L,A DEC LX RET Z LD BC,10 CALL M2 LD C,100 CALL M2 LD BC,1000 CALL M2 LD BC,10000 CALL M2 M2 DEC DE LD A,(DE) AND A JR Z,M3 M4 ADD HL,BC DEC A JR NZ,M4 M3 DEC LX RET NZ POP AF RET M5 DEFS 5,0 === Конец Windows Clipboard === С уважением, Евгений.

от: Wladimir Bulchukey
кому: Valerij Kozhevnikoff
дата: 26 Mar 2001
Приветствую, Valerij! 25 Мар 01 15:21, Valerij Kozhevnikoff -> Wladimir Bulchukey: VK> А похожей плюшки делающей обратное действие у тебя не VK> найдется? ; вход: BC = число CALL #2D2B CALL #361F CALL #2BF1 ; выход: на этом месте DE = адрес начала строки символов ; BC = длина строки. С наилучшими - Wlodek. mailto: wlblack@chat.ru http://www.wlodeks.boom.ru [ZX] [Golyanovo] [Радио "Ретро" 72.92 МГц]

от: Wladimir Bulchukey
кому: Oleg Grigoriev
дата: 28 Mar 2001
Приветствую, Oleg! 25 Мар 01 20:56, Oleg Grigoriev -> EP & WB: OG> я хренею... :( OG> на входе - de указывает на стриг, оканчивающийся нулём, OG> на выходе в hl - число. OG> ld hl, #0000 OG> loop ld a, (de) OG> or a OG> ret z OG> add hl, hl OG> ld b, h OG> ld c, l OG> add hl, hl OG> add hl, hl OG> add hl, bc OG> sub #30 OG> ld c, a OG> ld b, #00 OG> add hl, bc OG> jp loop Что ж, помножили сложением на 8 да прибавили удвоенное исходное - умножили на 10. :) А калькулятор - штука полезная, вообще-то. В том примере строка символов может содержать любое, не обязательно целое, число и даже выражение. Если результат в конце не запихивать в BC, можно таких дел натворить! :) А хренеть, кстати, следует от отсутствия в твоем примере INC DE ;-)))))) . С наилучшими - Wlodek. mailto: wlblack@chat.ru http://www.wlodeks.boom.ru [ZX] [Golyanovo] [Радио "Ретро" 72.92 МГц]

от: Wladimir Bulchukey
кому: Kirill Frolov
дата: 28 Mar 2001
Приветствую, Kirill! 26 Мар 01 19:17, Kirill Frolov -> Wladimir Bulchukey: WB>> RST #28 KF> У тебя есть дока по функциям rst 28 ? === Cut === #00 - jump true #01 - exchange #02 - delete #03 - subtract (вычитание; X-Y) #04 - mult (умножение; X*Y) #05 - div (деление; Y/X) #06 - to-power (возведение в степень; X^Y) #07 - or #08 - no-&-no #09 - no-l-eq #0A - no-gr-eq #0B - nos-eql #0C - no-gtr #0D - no-less #0E - nos-eql #0F - add (сложение; X+Y) #10 - str-&-no #11 - str-l-eq #12 - str-gr-eq #13 - strs-negl #14 - str-gtr #15 - str-less #16 - str-gtr #17 - strs-add #18 - val$ (рекурсия; только через fp-calc-2) #19 - usr-s #1A - read-in #1B - neg #1C - code #1D - val (рекурсия; только через fp-calc-2) #1E - len #1F - sin #20 - cos #21 - tan #22 - asn #23 - acs #24 - atn #25 - ln #26 - exp #27 - int #28 - sqr #29 - sgn #2A - abs #2B - peek #2C - int(Y+0.5) #2D - user-no #2E - str$ #2F - chr$ #30 - not #31 - duplicate #33 - jump #34 - stk-data #35 - djnz #36 - less-0 #37 - greater-0 #38 - end-calc (завершение работы с калькулятором) #39 - get-argt #3A - trunc #3B - fp-calc-2 (вторичный вызов калькулятора - рекурсия) #3C - e-to-fp #3D - restack (Y целое -> Y в плавающей форме) #86 и далее - series-06 #A0 - 0 (константа; занесение в стек константы) #A1 - 1 #A2 - 1/2 #A3 - PI/2 #C0 и далее - st-mem-0 #E0 и далее - get-mem-0 === Cut === С наилучшими - Wlodek. mailto: wlblack@chat.ru http://www.wlodeks.boom.ru [ZX] [Golyanovo] [Радио "Ретро" 72.92 МГц]

от: Valerij Kozhevnikoff
кому: Oleg Grigoriev
дата: 28 Mar 2001
Здравствуй, Oleg! 25 Мар 01 20:56, Oleg Grigoriev -> EP & WB: OG> на входе - de указывает на стриг, оканчивающийся нулём, на выходе в hl - OG> число. Почти работает =) OG> ld hl, #0000 OG> loop ld a, (de) OG> or a OG> ret z OG> add hl, hl OG> ld b, h OG> ld c, l OG> add hl, hl OG> add hl, hl OG> add hl, bc OG> sub #30 ;KF0 этот sub потерял. OG> ld c, a OG> ld b, #00 OG> add hl, bc OG> jp loop ;а inc de тут Пушкин сделает? WBR, Jason. [Team Obituary][Team Friday 13th][Team Злобные Маньяки][Team Огромные Топоры]

от: Kirill Frolov
кому: Valerij Kozhevnikoff
дата: 29 Mar 2001
Hемедленно нажми на RESET, Valerij! 27 Mar 01 21:04, Valerij Kozhevnikoff wrote to Eugene Palenock: VK> Гхм. Зря я хвалил калькулятор. От нецифровых символов его плющит, а VK> с их ловилкой оно весит тоже примерно столько. Сюда и я и Ruiner писали один и тот-же нормальный алгоритм -- неужели не видел? Фильтровать элементарно! ; de=decimal in string --> hl=binary number; cf=1, de=illegal char. if error atoi: ld hl, 0 ld а, (de) jr firstc nextc: ld a, (de) or a ret z firstc: sub '0' ret c cp 10 ccf ret c inc de add hl, hl ret c ld c, l ld b, h add hl, hl ret c add hl, hl ret c add hl, bc ret c ld c, a ld b, 0 add hl, bc jr nc, nextc ret Это так много?




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

Похожие статьи:
Cosmowerk - "Что такое демо Traumwerk? Это суть журнал COMSOPOLITAN: гламурные фотографии, две строчки штампов, человек с обложки, реклама нового аромата от KENZO и "революционная" заметка о настоящем андеграунде в конце".
ASCII графика - Пример написания классических ASCII фонтов.
Системные программы - BIG HЕLР сборник описаний интeргральных схeм.
Хит-парад - 10-ка лучших игр.
Байки #02 - Спасение 911: Записал LsD НUИТЕR со слов двyх кошек и одной собаки.

В этот день...   8 мая