新中国教育改革:帮忙分析一下下面的程序吧(MASM32\m32lib\dwtoa.asm)
来源:百度文库 编辑:查人人中国名人网 时间:2024/05/06 08:01:44
程序代码如下
; #########################################################################
; ---------------------------------------------------------------
; 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;
#########################################################################结束