Сейчас на форуме: ==DJ==[ZLO], Magister Yoda, Rio (+6 невидимых) |
eXeL@B —› Основной форум —› Dec 2 hex на асме |
Посл.ответ | Сообщение |
|
Создано: 27 февраля 2005 21:42 · Личное сообщение · #1 |
|
Создано: 27 февраля 2005 22:24 · Личное сообщение · #2 |
|
Создано: 27 февраля 2005 22:24 · Личное сообщение · #3 |
|
Создано: 27 февраля 2005 22:28 · Личное сообщение · #4 |
|
Создано: 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" |
|
Создано: 28 февраля 2005 07:14 · Личное сообщение · #6 |
|
Создано: 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 на асме |