Сейчас на форуме: ==DJ==[ZLO], Magister Yoda, Rio (+6 невидимых)

 eXeL@B —› Основной форум —› Dec 2 hex на асме
Посл.ответ Сообщение

Ранг: 53.8 (постоянный)
Активность: 0.040
Статус: Участник

Создано: 27 февраля 2005 21:42
· Личное сообщение · #1

Есть строка из 12 десятичных цифр + нулевой байт. Требуется преобразовать число из этой строки в hex строку. Стандартные функции masm32 такого не могут, т.к. число явно вылазит за dword. Помогите это реализовать на асме (masm32).




Ранг: 1288.1 (!!!!), 273thx
Активность: 1.290
Статус: Участник

Создано: 27 февраля 2005 22:24
· Личное сообщение · #2

bkslash
Заюзай на дельфе к примеру функу StrToInt64 и рипни код...



Ранг: 103.1 (ветеран), 3thx
Активность: 0.070.01
Статус: Участник

Создано: 27 февраля 2005 22:24
· Личное сообщение · #3

Смотри тут:
flatassembler.net/examples/basecnv.zip

там хоть и фасм, но всё предельно просто

-----
Crack your mind, save the planet





Ранг: 1288.1 (!!!!), 273thx
Активность: 1.290
Статус: Участник

Создано: 27 февраля 2005 22:28
· Личное сообщение · #4

Styx
Твой пример больше 32 разрядов не считает



Ранг: 210.5 (наставник), 2thx
Активность: 0.140
Статус: Участник

Создано: 28 февраля 2005 01:52 · Поправил: arnix
· Личное сообщение · #5

Не знаю поможет ли, но вот обратный алгоритм:
.486
.model flat,stdcall
option casemap:none

include \masm32\include\Windows.inc
include \masm32\include\masm32.inc
include \masm32\include\kernel32.inc
include \masm32\include\user32.inc

includelib \masm32\lib\user32.lib
includelib \masm32\lib\masm32.lib
includelib \masm32\lib\kernel32.lib

i64toa proto WORD,WORD

.data
testint1     dq 7FFFFFFFFFFFFFFFh
testint2     dq -1234567890123456789
caption1    db "POSITIVE 64 bit integer",0
caption2    db "NEGATIVE 64 bit integer",0
testbuff    db 64 dup(32) ,0

.code

start:
invoke i64toa,ADDR testint1,ADDR testbuff
invoke MessageBox,0,ADDR testbuff,ADDR caption1,0
invoke i64toa,ADDR testint2,ADDR testbuff
invoke MessageBox,0,ADDR testbuff,ADDR caption2,0
invoke ExitProcess,0

i64toa proc uses ebx ecx edx edi esi lpLargeWORD,lpBufferWORD
 
   mov edi,lpLarge
   mov ebx,[edi]            ; low 32 bits
   mov ecx,[edi+4]          ; high 32 bits
   
   mov edi,lpBuffer
   or ecx, ecx
   jns positive
   mov byte ptr [edi],'-' ; integer is negative
   inc edi
   not ebx
   not ecx
   add ebx,1
   adc ecx,0

positive:
;--------------------------------
    xor eax, eax          ; push the 0 to end string
    push eax
    mov esi,10 ; decoding the 64 bit binary to ASCII
    
@@:     sub edx,edx
     test ecx,ecx         ; avoid dividing numhi
     jz not64             ; if it's already 0
    
     mov eax,ecx
     div esi              ; divide numhi by 10...
     mov ecx,eax

not64:  mov eax,ebx
     div esi              ; .... then numlo by 10, using
     mov ebx,eax          ; first remainder in edx
     add dl,30h           ; new remainder plus 30h is the digit
     push edx             ; store it in the stack for printing
     or eax,ecx
     jnz @B               ; keep looping until no digits left
;---------------------------------------------------------------
;  conversion  finished
;  copy from stack to testbuff 
;  +123456..................  pop to testbuff after sign
;---------------------------------------------------------------

move:
    pop eax
    mov [edi],al        ; move......
    inc edi
    or eax,eax
    jnz move
    ret
i64toa   endp

end start 
Пойми как всё происходит и напиши функцию atoi64 А вообще спроси об этом (или ищи в форуме) на h**p://board.win32asmcommunity.net и h**p://board.flatassembler.net Правка: Хмм, вместа тех смайликов думаю понятно что нужно писать двоиточье и букву "D"



Ранг: 53.8 (постоянный)
Активность: 0.040
Статус: Участник

Создано: 28 февраля 2005 07:14
· Личное сообщение · #6

Ara пишет:
Заюзай на дельфе к примеру функу StrToInt64 и рипни код...

Tnx =) Пишу как раз кейген к Делфи проге =)




Ранг: 605.2 (!), 341thx
Активность: 0.470.25
Статус: Модератор
Research & Development

Создано: 02 марта 2005 13:41
· Личное сообщение · #7

Convert

This package includes three procedures to convert a 32Bit DWORD
to a zero-terminated string.
* DWORD to DEC-STRING (signed or unsigned)

* DWORD to HEX-STRING (with or without leading "0")

* DWORD to BIN-STRING

www.mycgiserver.com/~bratalarm/sources/brat_convert.zip

можно использовать как основу для переделок

-----
EnJoy!



 eXeL@B —› Основной форум —› Dec 2 hex на асме
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


Максимальный размер аттача: 500KB.
Ваш логин: german1505 » Выход » ЛС
   Для печати Для печати