DEC -->HEX ребята помогите написать прогу! очень надо

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

  1. Drejan

    Drejan New Member

    Публикаций:
    0
    Регистрация:
    20 май 2007
    Сообщения:
    23
    прога такая конвертор десятичных чисел в HEX, времени неимею написао бы сам, помогите пожалуйста !!! критерии,надо чтобы работала прога на 8086 МП его надо мне запрограмировать! просче говоря в debug'e помогите горю!
     
  2. EvilsInterrupt

    EvilsInterrupt Постигающий азы дзена

    Публикаций:
    0
    Регистрация:
    28 окт 2003
    Сообщения:
    2.428
    Адрес:
    Russia
    Поиск по форуму, было не раз!
     
  3. Drejan

    Drejan New Member

    Публикаций:
    0
    Регистрация:
    20 май 2007
    Сообщения:
    23
    мод спасибо за совет , но всё равно, кто может помогите напишите сюда !!!
     
  4. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    Вот нарыл, давно писал, для загрузчика

    Код (Text):
    1. ;
    2. ; void itoa( buffer, value, radix, 0x00XX00YY );  // XX - letter to fill, YY - number of fills
    3. ;
    4.  
    5. itoa:
    6.    mov  ebx, [esp+12]  ; radix
    7.    mov  eax, [esp+8]   ; value
    8.    mov  edi, [esp+4]   ; buffer
    9.    xor  ecx, ecx       ; счетчик
    10.  
    11.    ; последовательное деление
    12.   _div:
    13.    xor  edx, edx       ; старшая часть делимого, всегда 0
    14.  
    15.    div  ebx        ; EDX:EAX / EBX
    16.  
    17.    mov  dl, byte [edx+small_table]  ; лукап символа по таблице, остаток - индекс
    18.    mov  byte [edi], dl
    19.  
    20.    inc  edi        ; инкремент указателя
    21.    inc  ecx        ; инкремент счетчика
    22.  
    23.    test eax, eax       ; частное = 0 ?
    24.    jz   _q         ; да, закончили деление
    25.  
    26.    jmp _div
    27.   _q:
    28.  
    29.    mov  ax, [esp+16]
    30.    movzx eax, ax
    31.    .if  eax,ne,0
    32.      .while ecx,l,eax
    33.        mov  bl, [esp+18]
    34.        mov  byte [edi], bl
    35.        inc  edi
    36.        inc  ecx
    37.      .endw
    38.    .endif
    39.  
    40.    mov  byte [edi], 0
    41.  
    42.    ; переворот строки
    43.    mov  edi, [esp+4]   ; переходим снова в начало буфера
    44.    mov  edx, ecx       ; копируем число символов
    45.   _r:              ; цикл реверса буфера
    46.    mov  al, byte [edi+ecx-1]     ; загружаем левый байт
    47.    mov  esi, edx
    48.    sub  esi, ecx
    49.    mov  ah, byte [edi+esi]   ; загружаем правый байт
    50.  
    51.    cmp  ecx, esi         ; хватит?
    52.    jna _qq
    53.  
    54.    mov  byte [edi+ecx-1], ah     ; меняем местами
    55.    mov  byte [edi+esi], al
    56.  
    57.    loop _r
    58.   _qq:
    59.  
    60.    ret  16
    61. small_table db '0123456789abcdefghijklmnopqrstuvwxyz'
    62. large_table db '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ'
    Она для 32бит, перепиши сам для 16 бит.
    Прототип:
    void itoa( buffer, value, radix, 0x00XX00YY )

    Первый параметр - буфер, куда записать число
    Второй - число
    Третий - нужная система счисления
    Четвертый параметр состоит из двух слов. XX содержит код символа, которым нужно слева будет дополнить строку, YY - фиксированная длина буфера.
    Число автоматически дополняется символами XX, чтобы колво цифр стало равно YY
     
  5. EvilsInterrupt

    EvilsInterrupt Постигающий азы дзена

    Публикаций:
    0
    Регистрация:
    28 окт 2003
    Сообщения:
    2.428
    Адрес:
    Russia
    Aquila, IceStudent
    Не токо вы модераторы,но и я:
    :-P
     
  6. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    EvilsInterrupt
    Four-F'а забыл))
     
  7. Drejan

    Drejan New Member

    Публикаций:
    0
    Регистрация:
    20 май 2007
    Сообщения:
    23
    легко сказать перепеши на 16бит,)) знал бы как ето делаеться из 32б, 32 есче неизучал! если ето недолго плиз мозгоните кто нить,повторяюсь я бы сам сделал кабы знал 32б. А обьём работы большой??
     
  8. Drejan

    Drejan New Member

    Публикаций:
    0
    Регистрация:
    20 май 2007
    Сообщения:
    23
    ах да да да,забыл,спасибо всем! надеюсь поблагодарю вас в двойне )
     
  9. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    надо всего лишь использовать 16битные регистры) вроде никаких команд, которых нет в 8086, я не юзал (кроме MOVZX, которая эмулируется легко)
     
  10. Drejan

    Drejan New Member

    Публикаций:
    0
    Регистрация:
    20 май 2007
    Сообщения:
    23
    согласен,вроде все проги есть,тока вот,мне 32б незнаком и аналог регистров и адресаций 16б нзн, плз если есть какие линки с уже сделаными примерами! буду благодарен! ух уж ето програмирование ))
     
  11. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    EAX - 32разрядное расширение над AX. AX - младшее слово. К старшему слову прямой адресации нету.
    И так для всех регистров почти.

    Ах да, у меня же адресация 32битная используется. Придется похитрить, чтобы на 16битную переписать, там правила строже.
     
  12. Drejan

    Drejan New Member

    Публикаций:
    0
    Регистрация:
    20 май 2007
    Сообщения:
    23
    да адресация построже,ну всё же с адресацие я разобрался бы,помогите с остальным разобратся, впринципе можно попробовать,но всё же мои усилия без вашей помощи будут пустые! хелп!
     
  13. Drejan

    Drejan New Member

    Публикаций:
    0
    Регистрация:
    20 май 2007
    Сообщения:
    23
    больше непможите ? ааа, помогите!
     
  14. Drejan

    Drejan New Member

    Публикаций:
    0
    Регистрация:
    20 май 2007
    Сообщения:
    23
    HELP !!! пожалуйста товарищи,сжальтесь и помогите !!! решение етой програмы очень важно для меня!! Great помоги)))
     
  15. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    У меня зачет завтра) Меня матан сейчас больше интересует
     
  16. Drejan

    Drejan New Member

    Публикаций:
    0
    Регистрация:
    20 май 2007
    Сообщения:
    23
    ну вот )) матан а что имено, матека ето серьёзно, ну лады а что если ты мне поможешь ну допустм завтра? допустим на твоё усмотрение,тебе решать помочь мне или нет, Но етот вопрос важен для меня. помоги пожалуйста когда будешь времечко иметь. ответь что считаешь по етому поводу ??
     
  17. Drejan

    Drejan New Member

    Публикаций:
    0
    Регистрация:
    20 май 2007
    Сообщения:
    23
    Помогит хоть кто нибуть сделать ету программу прошу вас! кто имет времечка,очень важная проблема эта для меня!
     
  18. Vov4ick

    Vov4ick Владимир

    Публикаций:
    0
    Регистрация:
    8 окт 2006
    Сообщения:
    581
    Адрес:
    МО
    Тебе нужен именно конвертер из 10 в 16 или процедурина для вывода на экран (преобразования в строку) в HEX ?
     
  19. Drejan

    Drejan New Member

    Публикаций:
    0
    Регистрация:
    20 май 2007
    Сообщения:
    23
    ну ето , мненужно на дебугере запрограмировать 8086 проц, чтобы он конвертировал из десятичной в шемтнадцатеричную, вот такая бойда, потом я его буду проверять(после того как на debug'e сделал) есче и на сим. , кр4 сам код нужен, и именно 16бит. 8086
     
  20. Vov4ick

    Vov4ick Владимир

    Публикаций:
    0
    Регистрация:
    8 окт 2006
    Сообщения:
    581
    Адрес:
    МО
    Вот две мои старенькие процедуры:
    Код (Text):
    1. proc int2hex
    2. ;               AX = input word ES:DI -> end of string
    3.                 std
    4.                 mov     cl,4
    5. digit:
    6.                 mov     bl,al
    7.                 and     al,1111b
    8.                 add     al,'0'
    9.                 cmp     al,'9'
    10.                 jbe     @@done
    11.                 add     al,'A'-'9'-1
    12. @@done:
    13.                 STOSB
    14.                 mov     al,bl
    15.                 shr     ax,cl
    16.                 jnz     digit
    17.                 ret
    18. endp int2hex
    Код (Text):
    1. proc text2num ; DS:SI -> end of string
    2.                 mov     bx,1
    3.                 xor     cx,cx
    4.                 std
    5. @@getbyte:
    6.                 lodsb
    7.                 cmp     al,'0'
    8.                 jb      not_num
    9.                 cmp     al,'9'
    10.                 ja      not_num
    11.  
    12.                 sub     al,'0'
    13.                 cbw
    14.                 mul     bx       ; DX:AX = AX*BX
    15.                 add     cx,ax
    16.                 mov     ax,10
    17.                 mul     bx
    18.                 mov     bx,ax
    19.                 jmp     @@getbyte
    20. not_num:
    21.                 ret
    22. endp text2num  ; CX=result