Строку в число

Тема в разделе "WASM.BEGINNERS", создана пользователем tower120, 4 май 2007.

  1. tower120

    tower120 New Member

    Публикаций:
    0
    Регистрация:
    11 мар 2007
    Сообщения:
    56
    Доброго времени суток!

    Понимаю что вопрос ламерский и часто задаваемый, но... Нужно ввести с клавы 16-ти ричное число(8 знаков) и записать его в ячейку памяти. Нужна процедура. Наверняка кто-то стыкался с подобной проблемой. Готовое решение для своего случая я не нашёл. Язык Ассемблер, реальный режим. DOS/Windows

    З.Ы. Алгоритм не предлегать!
     
  2. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    какая среда? DOS/Windows/Linux или что.

    попробуй sscanf("%x") из libc
     
  3. tower120

    tower120 New Member

    Публикаций:
    0
    Регистрация:
    11 мар 2007
    Сообщения:
    56
    Подправил шапку
     
  4. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    tower120

    Можно глянуть в масме (masm.lib). Я конечно не предлагаю её использовать в дос, но она же вроде в исходниках. Можно ещё использовать сишную либу под Дос.
     
  5. Vov4ick

    Vov4ick Владимир

    Публикаций:
    0
    Регистрация:
    8 окт 2006
    Сообщения:
    581
    Адрес:
    МО
    Вот простейшая процедура, рабочая. Не оптимизирована, писал не я, времени править нет, из своих исходников времени выдирать тоже нет.
    Код (Text):
    1. ;*******************************************************
    2. ;* ПЕРЕВОД ЧИСЛА ИЗ ШЕСТНАДЦАТЕРИЧНОГО КОДА В ДВОИЧНЫЙ *
    3. ;* DS:SI - число в коде ASCII.                         *
    4. ;* Результат возвращается в EAX.                       *
    5. ;*******************************************************
    6. PROC HexToBin32 near
    7.         push    EBX
    8.         push    CX
    9.         push    SI
    10.         cld
    11.         xor     EBX,EBX ;обнуляем накопитель
    12.         xor     CX,CX   ;обнуляем счетчик цифр
    13. @@h0:   lodsb
    14.         ; Проверка на ноль (признак конца строки)
    15.         and     AL,AL
    16.         jz      @@h4
    17.         ; Проверка на диапазон '0'-'9'
    18.         cmp     AL,'0'  
    19.         jb      @@Error
    20.         cmp     AL,'9'  
    21.         ja      @@h1
    22.         sub     AL,'0'
    23.         jmp short @@h3
    24. @@h1:   ; Проверка на диапазон 'A'-'F'
    25.         cmp     AL,'A'  
    26.         jb      @@Error
    27.         cmp     AL,'F'  
    28.         ja      @@h2
    29.         sub     AL,'A'-10
    30.         jmp short @@h3
    31. @@h2:   ; Проверка на диапазон 'a'-'f'
    32.         cmp     AL,'a'  
    33.         jb      @@Error
    34.         cmp     AL,'f'  
    35.         ja      @@Error
    36.         sub     AL,'a'-10
    37. @@h3:   ; Дописать к результату
    38.         ; очередные 4 разряда справа
    39.         shl     EBX,4
    40.         or      BL,AL
    41.         inc     CX
    42.         cmp     CX,8
    43.         jbe     @@h0
    44.         ; Если в числе больше 8 цифр - ошибка
    45.         jmp short @@Error
    46. @@h4:   ; Успешное завершение - результат в EAX
    47.         mov     EAX,EBX
    48.         jmp short @@End
    49. @@Error:; Ошибка - обнулить результат
    50.         xor     EAX,EAX
    51. @@End:  pop     SI
    52.         pop     CX
    53.         pop     EBX
    54.         ret
    55. ENDP HexToBin32
    ЗЫ Сам то что такую простую вещь не придумаешь?
     
  6. tower120

    tower120 New Member

    Публикаций:
    0
    Регистрация:
    11 мар 2007
    Сообщения:
    56
    Vov4ick
    Спасибо, выручил. Неохота было мучаться... Предвкушал немалый размер и долгую отладку.
     
  7. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    tower120
    Лентяй.
     
  8. Vov4ick

    Vov4ick Владимир

    Публикаций:
    0
    Регистрация:
    8 окт 2006
    Сообщения:
    581
    Адрес:
    МО
    Нуу. Так можно всегда бояться. Тебе практика нужна, тогда не будет долгой отладки и код станет чётким и понятным. Если модель велосипеда простая и ты его ещё не изобретал, то можно изобрести для полного понимания и "набития руки".
     
  9. tower120

    tower120 New Member

    Публикаций:
    0
    Регистрация:
    11 мар 2007
    Сообщения:
    56
    Кстати, а каким вы вообще IDE пользуетесь (для приложений в реальных режимах)? А том меня от Turbo Shell уже передёргивает.
     
  10. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    tower120
    А ты прямо и пишешь в "реальном" на ассемблере? Я раньше пользовался Dos Navigator-ом, IMHO довольно удобен, есть подсветка. Но когда перешёл на XP, он отказался нормально работать, пришлось на AsmEd переползать.
     
  11. tower120

    tower120 New Member

    Публикаций:
    0
    Регистрация:
    11 мар 2007
    Сообщения:
    56
    AsmEdit....Скачал, установил, получил ключ, кинул его в папку с экзешником... и ничего. Как был незарегестрирован так и остался. Автор мне помочь не смог...
     
  12. RamMerLabs

    RamMerLabs Well-Known Member

    Публикаций:
    0
    Регистрация:
    11 сен 2006
    Сообщения:
    1.426
    вообще-то AsmEdit бесплатен :)

    см здесь: avtlab.ru
     
  13. tower120

    tower120 New Member

    Публикаций:
    0
    Регистрация:
    11 мар 2007
    Сообщения:
    56
    А я дурак качал это www.asmedit.h14.ru
     
  14. tower120

    tower120 New Member

    Публикаций:
    0
    Регистрация:
    11 мар 2007
    Сообщения:
    56
    RamMerLabs
    Так, а теперь где бы почитать про то как его настраивать?

    А дебаггер где?

    А как в TS как по-русски писать?
     
  15. Vov4ick

    Vov4ick Владимир

    Публикаций:
    0
    Регистрация:
    8 окт 2006
    Сообщения:
    581
    Адрес:
    МО
    Booster, tower120
    Пользую DOS Navigator, привык уже за много лет. :) Под винду тоже есть версия. http://dnosp.com/
     
  16. tower120

    tower120 New Member

    Публикаций:
    0
    Регистрация:
    11 мар 2007
    Сообщения:
    56
    Хм... попробовал переделать приведённую процедуру для DEC to BIN... не получается. Это конечно наверно наглость с моей стороны, но может у кого-то завалялась процедурка перевода 4-х значного DEC'a в BIN?
     
  17. tower120

    tower120 New Member

    Публикаций:
    0
    Регистрация:
    11 мар 2007
    Сообщения:
    56
    Уже нашёл. Смотреть здесь: http://www.listsoft.ru/programs/2590/
     
  18. RamMerLabs

    RamMerLabs Well-Known Member

    Публикаций:
    0
    Регистрация:
    11 сен 2006
    Сообщения:
    1.426
    конечно наверное это наглость! попробуй сам написать!
    иначе так копипастером и останешься!
     
  19. t17fenics

    t17fenics New Member

    Публикаций:
    0
    Регистрация:
    12 янв 2008
    Сообщения:
    5
    Не подскажете что сие означает DS:SI?
     
  20. t17fenics

    t17fenics New Member

    Публикаций:
    0
    Регистрация:
    12 янв 2008
    Сообщения:
    5
    что такое DS:SI разобрался

    Тытаюсь задвинуть туда адрес строки содержащейся в ЕАХ

    Код (Text):
    1. mov DS:[ESI],EAX
    пишет

    Код (Text):
    1. Log data, item 84
    2.   Address = 00401021
    3.   Message = Exception C0000005 (ACCESS_VIOLATION) - Shift+Run/Step to pass exception to the program