ASM- wyświetlanie wprowadzonego tekstu w msgbox

Odpowiedz Nowy wątek
2014-12-11 22:18
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 [email protected]: PROC
extern [email protected] : 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 [email protected]

add esp, 12 ; usuniecie paramertrow ze stosu
push 0;
call [email protected]
END

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

Pozostało 580 znaków

2015-01-06 02:30
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.


Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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