27.05.2009, 12:42
общий
это ответ
Здравствуйте, Игорь К.!
необходимо преобразовать двоичное число регистра в его текстовое представление.
Смотрите в приложении подпрограмму для fasm
Приложение:
title DB 'EAX =',0
EAX_value_str DB 11 DUP (?)
...
lea edx,[EAX_value_str]
stdcall bin32_to_decim_ascii, eax,edx
invoke MessageBoxA, 0,EAX_value_str,title,MB_OK
...
;--------------------------------------------------------------------------
;подпрограмма перевода двоичного числа в десятичное текстовое представление
;uint - двоичное число, p_result_buf - указатель буфера строки результата
;--------------------------------------------------------------------------
proc bin32_to_decim_ascii, uint:DWORD,p_result_buf:DWORD
push ebx ecx edx edi
mov ebx,[p_result_buf]
add ebx,0Ah
mov BYTE [ebx],0
dec ebx
mov edi,0Ah ;делитель
;счетчик
mov eax,[uint]
cmp eax,10
jb .cnt_1
cmp eax,100
jb .cnt_2
cmp eax,1000
jb .cnt_3
cmp eax,10000
jb .cnt_4
cmp eax,100000
jb .cnt_5
cmp eax,1000000
jb .cnt_6
cmp eax,10000000
jb .cnt_7
cmp eax,100000000
jb .cnt_8
cmp eax,1000000000
jb .cnt_9
mov ecx,0Ah
jmp .div10_loop
.cnt_1:
mov ecx,01h
jmp .div10_loop
.cnt_2:
mov ecx,02h
jmp .div10_loop
.cnt_3:
mov ecx,03h
jmp .div10_loop
.cnt_4:
mov ecx,04h
jmp .div10_loop
.cnt_5:
mov ecx,05h
jmp .div10_loop
.cnt_6:
mov ecx,06h
jmp .div10_loop
.cnt_7:
mov ecx,07h
jmp .div10_loop
.cnt_8:
mov ecx,08h
jmp .div10_loop
.cnt_9:
mov ecx,09h
.div10_loop:
test ecx,ecx
jz .exit
xor edx,edx
div edi ;EAX=частное, EDX=остаток
or dl,110000b
mov [ebx],dl
dec ebx
dec ecx
jmp .div10_loop
.exit:
mov eax,ebx
inc eax
pop edi edx ecx ebx
ret
endp
5
Спасибо! Как раз на fasm и нужно было, но уже ответ Лыскова Игоря Витальевича приспособил.