Filar Społeczności Chell Opublikowano 10 Kwietnia 2017 Filar Społeczności Opublikowano 10 Kwietnia 2017 mam sobie kodzik: ideal p286n model small stack 256h codeseg org 1h jmp start tekst db "1234567$" proc pisz mov si, 6 ;counter do odejmowania indeksu litery zeby ladnie od przodu lecialy mov cx, 7 ;ile razy wykona sie petla, wielkosc stringa petla: mov al, [tekst+si] int 10h sub si, 1 loop petla ret endp start: mov al, 02h;80x25 text int 10h mov bl, 40h;col mov ah, 09h;bede pisac call pisz mov ax, 4c00h int 21h end start dziala on pieknie, jednak chcialbym zeby rutyna pisz przyjmowala argumenty string i length, jednak nie mam pojecia jak temat tych argumentow ugryzc. moze sie skupmy na tym lengthu, bo latwiej - probowalem proc pisz len:byte sub ch, ch mov cl, len mov si, cx sub si, 1 call pisz, offset 25 bezskutecznie, tasm nie chciał. probowałem przed callem pushować offset 25, bezskutecznie. próbowałem później popować ten offset wszędzie gdzie się da, bezskutecznie. co z tymi argumentami? edit: na chwile obecna zastapilem to macrem, jednak wciaz jestem ciekaw edit2: jednak nie, bo mam tam petle
ediepl Opublikowano 10 Kwietnia 2017 Opublikowano 10 Kwietnia 2017 Dawno nie używalem asm ale zobacz czy zadziała proc pisz len:byte sub ch, ch mov cl, [len] mov si, cx sub si, 1 call pisz, 25
Filar Społeczności Chell Opublikowano 10 Kwietnia 2017 Autor Filar Społeczności Opublikowano 10 Kwietnia 2017 jakby to bylo takie proste nie siedzialbym nad tym pol dnia :(
Filar Społeczności Chell Opublikowano 10 Kwietnia 2017 Autor Filar Społeczności Opublikowano 10 Kwietnia 2017 4.1
ediepl Opublikowano 10 Kwietnia 2017 Opublikowano 10 Kwietnia 2017 A można przekazywać argumenty w CALL? Zawsze się to robiło przez stos
Administratorzy gnysek Opublikowano 11 Kwietnia 2017 Administratorzy Opublikowano 11 Kwietnia 2017 a pętli to się nie robiło w stylu (wybaczcie, 7 lat bez assemblera) MOV AX,25 proc pisz sub ax, 1 JNZ pisz ;dalsza czesc kodu JNZ wykona się, gdy wynikiem ostatniej operacji nie było 0 (Jump No Zero).
PsichiX Opublikowano 11 Kwietnia 2017 Opublikowano 11 Kwietnia 2017 tak, argumenty przekazuje sie do procedury przez stos. tylko pamietaj, ze wazna jest konwencja. najpopularniejsze: CDECL i STDCALL. roznia sie one tym, kto zajmuje sie sprzataniem stosu, ale obie wrzucaja na stos w kolejnosci od ostatneigo do pierwszego argumentu. obczaj sobie te konwencje tu: https://en.wikipedia.org/wiki/X86_calling_conventions
Danielus Opublikowano 11 Kwietnia 2017 Opublikowano 11 Kwietnia 2017 Warto też kojarzyć że w x64 przesyła się już przez rejestry( i dopiero nadmiarowe przez stos )
Filar Społeczności Chell Opublikowano 11 Kwietnia 2017 Autor Filar Społeczności Opublikowano 11 Kwietnia 2017 robie co moge z tymi stosami, ale nie dziala nawet taki banal jak format binary org 0x100 jmp start utility db "jakis napis" print: pop cx mov ah, 0x02 mov dx, 0x0000 int 0x10 mov ah, 0x09 mov si, cx sub si, 1 petla: mov al, [utility+si] int 0x10 sub si, 1 loop petla ret start: mov al, 0x02;80x25 text 16col int 0x10 mov bl, 0x07 push 11 call print mov ax, 0x4c00 int 0x21 zawsze wyswietla sobie to co ma, a pozniej losowe znaczki na 4 linijki, bez wzgledu na to co pushuje. chyba, ze tu gdzies powinny wkroczyc te calling conventiony? also, teraz kod z fasma gnysek, to petla i to petla, jak teraz assemblery pozwalaja na takie myki to z nich korzystam
ediepl Opublikowano 12 Kwietnia 2017 Opublikowano 12 Kwietnia 2017 A jak zamiast push i pop cx dasz mov cx,11 ? Ew zamiast loop daj DEC CX, 1; CMP CX, 0; JG petla Przyczyna: przy wywołaniu call na stos wrzucany jest adres powrotu Rozwianie: zamiast pop użyj mov cx, [esp+2]
Filar Społeczności Chell Opublikowano 12 Kwietnia 2017 Autor Filar Społeczności Opublikowano 12 Kwietnia 2017 <3 cudowny jestes, dziekuje
Rekomendowane odpowiedzi
Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto
Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.
Zarejestruj nowe konto
Załóż nowe konto. To bardzo proste!
Zarejestruj sięZaloguj się
Posiadasz już konto? Zaloguj się poniżej.
Zaloguj się