Учебник по ассемблеру (ASM)
 

Ассемблер в примерах - Отображение содержимого регистра eax

Вопрос:
В регистре eax имею число 1178 в 16 - 0х049A.
Как мне его посмотреть в окне Windows?

mov [result],eax
invoke MessageBox,0,result,caption,MB_ICONQUESTION+MB_YESNO
выдает 2 символа с кодами 0х04 и 0х9A
Мне нужно, чтобы в окне было написано "1178" т.е. символы 0х31,0х31,0х37,0х38
Как это сделать?
Ответ:
необходимо преобразовать двоичное число регистра в его текстовое представление. Смотрите в приложении подпрограмму для 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

   Вперёд
   Содержание
Сауны Уфы с бассейном цены, аква