simpele int naar string werkt niet

Status
Niet open voor verdere reacties.

jorants

Gebruiker
Lid geworden
22 mei 2006
Berichten
105
hoi allemaal,

ik begin net met x86 asm en probeer een int naar string subroutine te schrijven.
Ik heb iets wat goed compiled maar wat vastloop als ik het draai:

Code:
.386 
.model flat, stdcall 
option casemap :none 
include \masm32\include\windows.inc 
include \masm32\include\kernel32.inc 
include \masm32\include\masm32.inc 
includelib \masm32\lib\kernel32.lib 
includelib \masm32\lib\masm32.lib 
.const
    newLine db 0Dh,0Ah,0 
.data 
    char db " ",0

.code
start:
    jmp main
    
printnum:
	push 0
        mov ebx,10
	printnuml1:
	div ebx
	add edx,30h
	push edx
	cmp eax,0
	je printnuml1
	pop eax
	printnuml2:
	mov char,al
	invoke StdOut, addr char
	pop eax
	cmp eax,0
	je printnuml2
	ret

 
main:
    mov eax,324
    call printnum
    invoke StdOut, addr newLine
    invoke ExitProcess, 0 
end start

het maakt me nog even niet uit of de procedure omslachtig is, ik vind het raar dat hij vast loopt en ik kan de fout niet vinden.
wat ik wil doen:
zet het getal in eax
push een 0 als herkenning
while(eax !=0)
{
deel eax door 10.
push de remainder+30h
}
pop eax
while(eax!=0)
{
print wat in eax is
pop eax
}
ga vrooilijk door met wat je eerst deed.....

alvast hartstikke bedankt,

Joran
 
hoi,

paar uur later en ik ben er uit.
Voor alsiemnd het nog wil weten:
er waren 2 problemen, een foute compare (je waar jne moest zijn bij beide loops)
en wat voor de error zorgt: DIV, je moet eerst edx leeg maken zodat EDX:EAX niet te groot is en na de deling niet in EAX past.
nieuwe code: (met beter char uit funtie)
Code:
.386 
.model flat, stdcall 
option casemap :none 
include \masm32\include\windows.inc 
include \masm32\include\kernel32.inc 
include \masm32\include\masm32.inc 
includelib \masm32\lib\kernel32.lib 
includelib \masm32\lib\masm32.lib 
.data 

.code 
start: 
jmp main

numprint:
    push 0
    mov ebx,10
    numprintloop1:
    sub edx,edx
    div ebx
    add edx,30h
    push edx
    cmp eax,0
    jne numprintloop1
    numprintloop2:
    invoke StdOut, esp
    pop edx
    cmp edx,0
    jne numprintloop2
    ret

main:
 mov eax,265d
 call numprint
 invoke ExitProcess, 0 
end start
 
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan