怪物猎人ol和世界比:帮忙分析一下下面的程序吧(MASM32\m32lib\dwtoa.asm)

来源:百度文库 编辑:高校问答 时间:2024/05/04 07:39:35
我知道着是一个把32位二进制数转化成十进制数并输出的程序,但是我想请朋友帮忙看看每一步程序的说明 ,谢谢大家了
程序代码如下

; #########################################################################

; ---------------------------------------------------------------
; This procedure was originally written by Tim Roberts
;
; Part of this code has been optimised by Alexander Yackubtchik
; ---------------------------------------------------------------

.386
.model flat, stdcall ; 32 bit memory model
option casemap :none ; case sensitive

.code

; #########################################################################

dwtoa proc dwValue:DWORD, lpBuffer:DWORD

; -------------------------------------------------------------
; convert DWORD to ascii string
; dwValue is value to be converted
; lpBuffer is the address of the receiving buffer
; EXAMPLE:
; invoke dwtoa,edx,ADDR buffer
;
; Uses: eax, ecx, edx.
; -------------------------------------------------------------

push ebx
push esi
push edi

mov eax, dwValue
mov edi, [lpBuffer]

or eax,eax
jnz sign

zero:
mov word ptr [edi],30h
jmp dw2asc

sign:
jns pos
mov byte ptr [edi],'-'
neg eax
inc edi

pos:
mov ecx,429496730
mov esi, edi

.while (eax > 0)
mov ebx,eax
mul ecx
mov eax,edx
lea edx,[edx*4+edx]
add edx,edx
sub ebx,edx
add bl,'0'
mov [edi],bl
inc edi
.endw

mov byte ptr [edi], 0 ; terminate the string

; We now have all the digits, but in reverse order.

.while (esi < edi)
dec edi
mov al, [esi]
mov ah, [edi]
mov [edi], al
mov [esi], ah
inc esi
.endw

dw2asc:

pop edi
pop esi
pop ebx

ret

dwtoa endp

; #########################################################################

end

原来写这个程序罗伯茨添;
这已是最佳发挥了亚历山大Yackubtchik代码;
---------------------------------------------------------------0.386.
示范单位、Stdcall;
选择32个示范点记忆CaseMap:无;
如此敏感.
代码;
#########################################################################------------------------------------------------------------;
将串转换为dword.
dwvalue是价值转换; Lpbuffer地址是接收缓冲;
例如:;
引用Dwtoa,EDX,ADDR缓冲;
.
用途:EAX,ECX,EDX. .
-------------------------------------------------------------把EBX推动ESI推动EDIMOVEAX,DWVALUEMOVEDI[Lpbuffer]或EAX,EAXJNZ签署零:MOV字PTR,EDI,而非H就业选配计划DW2ASC标志:JNS带MOV字节PTR[电子数据交换],'-'南德EAX间EDI带:MOVECX,429496730MOVESI,EDI.
而(EAX>0)MOVEBX,EAXMULECXMOVEAX,EDXLea女士EDX[EDX*4+EDX,EDX增加,EDX分EBX,EDX加上基本法,''0 MOV[电子数据交换]EDI基本法第七.
ENDW字节MOVPTR[电子数据交换]0.
终止串;
现在所有的数字,而是以扭转. .
而DEC(ESI<EDI)EDIMOVAl[ESI]MOV阿[EDI电子数据交换,MOV[]一张al[ESI]AH间ESI.
ENDWDW2ASC:EDI流行流行流行ESIEBX成年DWTOAENDP;
#########################################################################结束