User Tag List

Страница 3 из 6 ПерваяПервая 123456 ПоследняяПоследняя
Показано с 21 по 30 из 59

Тема: Програмирование

  1. #21

    Регистрация
    19.11.2006
    Адрес
    г.Слоним Гродненской области
    Сообщений
    1,283
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    4
    Поблагодарили
    4 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от rasmer Посмотреть сообщение
    имхо кросс-ассемблеры рулят... тотже самый сджасм.... вообще в очередной раз скажу что идеальной считаю для программера связку sjasm+unreal
    Я вообще-то реал имел ввиду. Нету у меня на работе ПЦ, связист я. А спектрум есть, и даже иногда выкраиваю время на него.

  2. #22

    Регистрация
    19.11.2006
    Адрес
    г.Слоним Гродненской области
    Сообщений
    1,283
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    4
    Поблагодарили
    4 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Подскажите, кому не лень, как перевести число из HEX в DEC. Переклинило меня не могу сообразить. Все что приходит в голову так это или составить таблицу или тупо отнимать по 10 и проверять на заём. Нужна компактная процедура перевода однобайтного числа в диапазоне #00-#63 в десятичные 0-99. Ну пожалуйста!
    Последний раз редактировалось valeron; 15.09.2008 в 20:52.

  3. #23

    Регистрация
    31.08.2007
    Адрес
    Kharkov
    Сообщений
    37
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    0
    Поблагодарили
    0 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от valeron Посмотреть сообщение
    Все что приходит в голову так это или составить таблицу или тупо отнимать по 10 и проверять на заём.
    Можно использовать "средний" вариант - держать таблицу из семи BCD-чисел (0,16,32,48,64,80,96), а потом корректировать. Т.е получается выборка из таблицы и одно или два вычитания (на 10 для младших разрядов) с инкрементами (для старших).
    А.. ну и еще 1-3 сдвига на 4 бита (в зависимости от того, хранить в таблице упакованные числа или нет, и должно ли число на выходе быть упакованным). По-моему есть какая-то команда BCD-корректировки после сложения, с ее помощью можно немного соптимизировать.
    Последний раз редактировалось Shwartz; 15.09.2008 в 22:08.

  4. #24

    Регистрация
    17.01.2005
    Адрес
    Cherepovets
    Сообщений
    121
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    0
    Поблагодарили
    0 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от valeron Посмотреть сообщение
    Подскажите, кому не лень, как перевести число из HEX в DEC. Переклинило меня не могу сообразить. Все что приходит в голову так это или составить таблицу или тупо отнимать по 10 и проверять на заём. Нужна компактная процедура перевода однобайтного числа в диапазоне #00-#63 в десятичные 0-99. Ну пожалуйста!
    Не понятна суть вопрса - что именно должно быть на входе процедуры и что на выходе - строка символов, к примеру db "#4b", или само число - db #4b?

  5. #25

    Регистрация
    06.05.2006
    Адрес
    Ливны, Орловская обл
    Сообщений
    1,169
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    0
    Поблагодарили
    0 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Вот тут инфа не поможет?
    http://baze.au.com/misc/z80bits.html

  6. #26

    Регистрация
    19.11.2006
    Адрес
    г.Слоним Гродненской области
    Сообщений
    1,283
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    4
    Поблагодарили
    4 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Shwartz Посмотреть сообщение
    Можно использовать "средний" вариант ...
    Ты натолкнул меня на одну идею, щас обмозгую, может как раз и получится компактно и быстро.

    Добавлено через 5 минут
    Цитата Сообщение от Kurles Посмотреть сообщение
    Не понятна суть вопрса - что именно должно быть на входе процедуры и что на выходе - строка символов, к примеру db "#4b", или само число - db #4b?
    Есть переменная - один байт. По ходу дела её значение меняется в некотором диапазоне. Задача - регулярно выводить на экран в человеческом (десятичном) виде текущее значение. Например если переменная равна #10 то на экран нужно выводить 16, если #1F то 31 и т.д.

    Добавлено через 7 минут
    Цитата Сообщение от NovaStorm Посмотреть сообщение
    Вот тут инфа не поможет?
    http://baze.au.com/misc/z80bits.html
    Спасибо за ссылку, я хоть и учил английский, но литературный, так что с трудом разбираю что там к чему, но сайт, без сомнения, полезный. Tnx.
    Последний раз редактировалось valeron; 16.09.2008 в 11:16. Причина: Добавлено сообщение

  7. #27

    Регистрация
    14.01.2005
    Адрес
    Ekaterinburg
    Сообщений
    2,726
    Спасибо Благодарностей отдано 
    19
    Спасибо Благодарностей получено 
    148
    Поблагодарили
    91 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от valeron
    ...как перевести число из HEX в DEC. Переклинило меня не могу сообразить. Все что приходит в голову так это или составить таблицу или тупо отнимать по 10 и проверять на заём. Нужна компактная процедура перевода однобайтного числа в диапазоне #00-#63 в десятичные 0-99.
    Если я правильно понял, то вот вариант:
    Код:
    ;****************************************************
    ;	 a =>  bc
    ;	[0..63h] => ['00'..'99']
    ;****************************************************
    bin2bcd:  
    	ld	c,10                
    	ld	b,'0'-1
    ; делить исходное число на 10
    div10:	inc	b		;старший нибл
    	sub	c
    	jr	nc,div10
    ; переполнение
    	add	a,c
    	add	a,'0'
    	ld	c,a		;младший нибл
    	ret
    ;****************************************************
    Регистры B и C содержат соответственно старший и младший ASCII коды результирующего числа.
    Последний раз редактировалось caro; 16.09.2008 в 12:40.

  8. #28

    Регистрация
    17.01.2005
    Адрес
    Cherepovets
    Сообщений
    121
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    0
    Поблагодарили
    0 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от valeron Посмотреть сообщение
    Подскажите, кому не лень, как перевести число из HEX в DEC. Переклинило меня не могу сообразить. Все что приходит в голову так это или составить таблицу или тупо отнимать по 10 и проверять на заём. Нужна компактная процедура перевода однобайтного числа в диапазоне #00-#63 в десятичные 0-99. Ну пожалуйста!
    Ну тогда тупо отнимать по десять и проверять на заем - это очень удачная идея =) Реализацию уже вроде написали.

  9. #29

    Регистрация
    19.11.2006
    Адрес
    г.Слоним Гродненской области
    Сообщений
    1,283
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    4
    Поблагодарили
    4 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от caro Посмотреть сообщение
    Если я правильно понял, то вот вариант:[CODE];************************************************* ***
    ...
    Регистры B и C содержат соответственно старший и младший ASCII коды результирующего числа.
    CARO, ну просто огромное спасибо. Такая короткая процедура что я потрясен. Вот для сравнения то что я сегодня родил, сохраню для истории, потом когда-нибудь прикольно будет почитать

    org #7800
    tabl
    DB #00 - таблица десятичных значений для старшего полубайта
    DB #16 - для пересчета шестнадцатиричных чисел в десятичный
    DB #32 - вид для диапазона от нуля до ста.
    DB #48 - таблица не должна попадать на переход адресов через
    DB #64 - круглое значение (например #7800, #7900,#7A00 и т.д)
    DB #80
    DB #96

    HEX>DEC
    LD C,A - сохранить исходное число
    AND #0F - взять мл.полубайт
    OR A - сбросить флаги
    DAA - преобразовать в десятичный вид
    LD B,A - запомнить в регистре В
    LD HL,tabl - адрес начала таблицы для старшего полубайта
    LD A,C - берем исходное число
    RRCA - выделяем старший полубайт
    RRCA -
    RRCA -
    RRCA -
    AND #0F - и подготавливаем индексацию таблицы
    ADD A,L - индексация
    LD L,A -
    LD A,(HL) - берем из таблицы десятичное значение ст.полубайта
    ADD A,B - складываем с десятичным значение мл. полубайта
    OR A - сбрасываем флаги
    DAA - еще раз чтобы при сложении избавится от переполнения
    RET мл.полубайта

    Ну пожалуй эта процедура равномерна по времени исполнения и там где это критично вполне может подойти в качестве альтернативы.
    Последний раз редактировалось valeron; 16.09.2008 в 23:08.

  10. #30

    Регистрация
    31.08.2007
    Адрес
    Kharkov
    Сообщений
    37
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    0
    Поблагодарили
    0 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    У меня совсем дурацкий вариант с 26-байтной таблицей

    Код:
        ;  a - исходное число
        ;на выходе:
        ;  b - первый символ
        ;  с - второй символ
    HexToDec
        ld   l, a       ;определяем смещение в таблице
        srl  l
        srl  l
        res  0, l
    
        ld   h, 0       ;если выровнять Table на 256 байт,
        ld   de, Table  ;то эти строки можно заменить на 
        add  hl, de     ;       ld h, Table / 256
    
        ld   b, (hl)    ;старшая цифра
        inc  hl
        and  7
        add  (hl)       ;младшая цифра
        cp   "9" + 1     
        jr   c, EndHexToDec ;если > 9
        inc  b          ;увеличиваем старшую
        sub  10         ;уменьшаем младшую
    EndHexToDec
        ld   c, a
        ret
    Table
        db   "00081624324048566472808896"

Страница 3 из 6 ПерваяПервая 123456 ПоследняяПоследняя

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Похожие темы

  1. Ответов: 21
    Последнее: 23.02.2005, 20:56

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •