ASM- wyświetlanie wprowadzonego tekstu w msgbox

0

Chciałbym żeby wprowadzony przeze mnie tekst był wyświetlany w msgboxie. obecje mój program pokazuję ilość liter wpisanych przeze mnie.

.686
.model flat                                                            
extern __write: PROC
extern __read: PROC
extern _ExitProcess@4: PROC
extern _MessageBoxA@16 : PROC
public _main
.data
obszar db 12 dup (?)
cyfry db 12 dup (?)
.code

liczba_na_tekst:
mov eax, ebx
mov ebx, 10
mov edi, 10
mov ecx, 10
obieg:
mov edx, 0      ; zerowanie starszej czesic dzielnej
div ebx         ; dzielenie przez 10, iloraz w eax, reszta w ebx
add dl, 30H ; zamiana reszty na kod ASCII
mov cyfry [edi], dl ; przeslanie reszty do rejestru edi
sub edi, 1 ; zmienjszenie indexu biezacego o 1
sub ecx, 1      ; zmniejszenie licznika petli
jnz obieg ; skocz na pocztek petli, gdy ecx rozne od 0   ; obszar cyfry zostanie wypelniony kodami ASCII, np. 27 zstsnaieie wyslweitone jako 0000000027
 
mov ecx,10 ; licznik obiegu petli, przy usuwaniu zer nieznaczacych
mov edi,1 ; index bie?acy
 
usuwanie:
mov dl, cyfry[edi]; pobranie kolejnej cyfry
cmp dl, '0' ;
jne wyskok ; skok gduy napotkano cyfre rozna od zera
mov byte ptr cyfry[edi], '*' ; wpisanie kodu spacjiw  miejsdce zera
add edi, 1; zwiekszernie indexu
 
loop usuwanie ; skok na pocz1tek petli
mov cyfry[0], 10h
mov cyfry[11], 0
jmp wyskok
 
wczytaj32 PROC
        push 12
        push OFFSET obszar
        push 0
        call __read
        add esp, 12
        mov ecx , OFFSET obszar ;adres tablicy obszar
 
 
zliczanie :
        mov al,[ebx+ecx] ; pobranie komórki pamięci wyznaczonej przez rejestr ecx do rejestru al. pobranie kolejnego znaku z tablicy obszar
		
        add ebx ,1 ; zwiekszenie indexu
        cmp al ,10 ; sprawdzenie czy nie kliknął się enter
        je koniec_obliczen
        jmp zliczanie
 
koniec_obliczen:
		sub ebx, 1
       
        ret ;powrot do programu głównego
        wczytaj32 ENDP
 
_main:
 
        call wczytaj32
 
       jmp liczba_na_tekst

wyskok: 
mov byte PTR cyfry[0], 10		; nowa linia
mov byte PTR cyfry[11], 10		; nowa linia

mov byte PTR cyfry[11], 0		; nowa linia
push 0
push OFFSET cyfry
push OFFSET cyfry ; adres obszaru z cyframi
push 0

call _MessageBoxA@16

add esp, 12 ; usuniecie paramertrow ze stosu
push 0;
call _ExitProcess@4
END

 

jakby ktoś pomógł byłbym wdzięczny

0

Toć to istny "armagieddon" assemblerowy, popraw formatowanie (wyrównaj odstępy, zobaczysz jak czytelniejszy stanie się kod), zamień wszystko na normalne funkcje np. "nazwa_funkcji proc uses esi edi ebx, Parametr1:dword, Parametr2:dword", funkcje WinAPI korzystają z konwencji STDCALL, dlatego nie musisz korygować stosu po ich wywoływaniu (w przeciwieństwie do funkcji z biblioteki MSVCRT.dll), przerzuć się na pakiet MASM hutch-a, nie deklaruj ręcznie funkcji, z których korzystasz (include + includelib załatwia sprawę).

Jeśli to poprawisz - obiecuję, że Ci pomogę dalej z tym kodem.

1 użytkowników online, w tym zalogowanych: 0, gości: 1