Thread View: pl.comp.lang.asm
23 messages
23 total messages
Started by Korsarz Jej Królewskiej Mości I ...
Tue, 25 Mar 2008 19:42
Metody programowania
Author: Korsarz Jej Królewskiej Mości I ...
Date: Tue, 25 Mar 2008 19:42
Date: Tue, 25 Mar 2008 19:42
6 lines
1261 bytes
1261 bytes
Jakie metody programowania można przypisać tworzonym źródłom w języku asemblera? Języki wyższego poziomu posiadają na przykład programowanie strukturalne, obiektowe, itd. Czy źródło w języku asemblera pisze się w sposób wygodny dla zrozumienia rozwiązywanego zadania, czy w sposób pośredni (stosując makropolecenia), czy jakoś inaczej? -- „No to czemu aż ci łapki drżą na klawiaturze - "Panei", brak "ń", zwracanie się per Pan, brak kropki na końcu zdania.” Message-ID: <fosbqp$jtn$1@zeus.man.szczecin.pl>
Re: Metody programowania
Author: Bogdan (bogdro)
Date: Wed, 26 Mar 2008 12:16
Date: Wed, 26 Mar 2008 12:16
18 lines
1947 bytes
1947 bytes
Korsarz Jej Królewskiej Mości I Rp. Królowej „Marysienki” pisze: > Jakie metody programowania można przypisać tworzonym źródłom w języku asemblera? Języki wyższego poziomu posiadają na przykład programowanie strukturalne, obiektowe, itd. Ja myślę, że strukturalne. W asemblerze nie ma klas, dziedziczenia, przeciążenia itp. Za to są funkcje i procedury (nie metody). > Czy źródło w języku asemblera pisze się w sposób wygodny dla zrozumienia rozwiązywanego zadania, czy w sposób pośredni (stosując makropolecenia), czy jakoś inaczej? Wszystko zależy od problemu i od tego, czego wolno używać/ma się do dyspozycji. Można po prostu napisać kod z 1 funkcją, można napisać kod z wieloma funkcjami, można stosować makra (np. do operacji we/wy lub do prostych operacji arytmetycznych). -- Pozdrawiam/Regards - Bogdan (GNU/Linux & FreeDOS) Kurs asemblera x86 (DOS, GNU/Linux):http://rudy.mif.pg.gda.pl/~bogdro Grupy dyskusyjne o asm: pl.comp.lang.asm alt.pl.asm alt.pl.asm.win32 www.JabberPL.org www.TorProject.org Soft (EN): miniurl.pl/bogdro-soft
Re: Metody programowania
Author: Wiktor S.
Date: Wed, 26 Mar 2008 22:37
Date: Wed, 26 Mar 2008 22:37
17 lines
1543 bytes
1543 bytes
> Ja myślę, że strukturalne. W asemblerze nie ma klas, dziedziczenia, > przeciążenia itp. Za to są funkcje i procedury (nie metody). Obiektowo tez na upartego mozesz pisac. >> Czy źródło w języku asemblera pisze się w sposób wygodny dla >> zrozumienia rozwiązywanego zadania, czy w sposób pośredni (stosując >> makropolecenia), czy jakoś inaczej? > można stosować makra (np. do operacji we/wy lub > do prostych operacji arytmetycznych). Lub do automatycznego i uproszczonego generowania pokreconych struktur, jak te wszystkie GDT itp. w trybie chronionym ;-) -- Azarien
Re: Metody programowania
Author: Bogdan (bogdro)
Date: Thu, 27 Mar 2008 10:33
Date: Thu, 27 Mar 2008 10:33
33 lines
2344 bytes
2344 bytes
Wiktor S. pisze: >> Ja myślę, że strukturalne. W asemblerze nie ma klas, dziedziczenia, >> przeciążenia itp. Za to są funkcje i procedury (nie metody). > > Obiektowo tez na upartego mozesz pisac. Na bardzo upartego pewnie tak. Ale wprost nie zadeklarujesz 2 funkcji/etykiet o tej samej nazwie (czy to globalnych, czy to w strukturze), nie tak jak np. w środku klasy w C++. Tu by trzeba było jakiś większy mechanizm. Może HLA oferuje jakieś zaczątki klasowości, ale nie pamiętam dokładnie. Niby rozdział "Classes and Objects" w AoA32 jest. >>> Czy źródło w języku asemblera pisze się w sposób wygodny dla >>> zrozumienia rozwiązywanego zadania, czy w sposób pośredni (stosując >>> makropolecenia), czy jakoś inaczej? > >> można stosować makra (np. do operacji we/wy lub >> do prostych operacji arytmetycznych). > > Lub do automatycznego i uproszczonego generowania pokreconych struktur, > jak te wszystkie GDT itp. w trybie chronionym ;-) O, to prawda, o tym zapomniałem :) Makr można też używać do deklarowania tablic o znanym wzorcu, w czasie kompilacji. W FASMie czegoś takiego używałem, choć nie pamiętam już po co :) -- Pozdrawiam/Regards - Bogdan (GNU/Linux & FreeDOS) Kurs asemblera x86 (DOS, GNU/Linux):http://rudy.mif.pg.gda.pl/~bogdro Grupy dyskusyjne o asm: pl.comp.lang.asm alt.pl.asm alt.pl.asm.win32 www.JabberPL.org www.TorProject.org Soft (EN): miniurl.pl/bogdro-soft
Re: Metody programowania
Author: Wiktor S.
Date: Thu, 27 Mar 2008 15:52
Date: Thu, 27 Mar 2008 15:52
47 lines
2506 bytes
2506 bytes
> Na bardzo upartego pewnie tak. Ale wprost nie zadeklarujesz 2
> funkcji/etykiet o tej samej nazwie (czy to globalnych, czy to w
> strukturze), nie tak jak np. w środku klasy w C++.
Oczywiście wiesz, że wewnętrznie, w plikach obiektowych kompilowanych przez
C++, azwy SĄ różne.
>>> można stosować makra (np. do operacji we/wy lub
>>> do prostych operacji arytmetycznych).
>> Lub do automatycznego i uproszczonego generowania pokreconych
>> struktur, jak te wszystkie GDT itp. w trybie chronionym ;-)
> O, to prawda, o tym zapomniałem :)
> Makr można też używać do deklarowania tablic o znanym wzorcu, w
> czasie kompilacji.
Mniej więcej miałem to na myśli :-)
(jedno z wielu moich makr na ten temat:)
struc descr
d_lim: resw 1 ; +0
d_base_l: resw 1 ; +2
d_base_m: resb 1 ; +4
d_attr_1: resb 1 ; +5
d_attr_2: resb 1 ; +6
d_base_h: resb 1 ; +7
endstruc
%macro makedeskr 9 ; name base lim ring exe dir/conf wri/read gran 32bit
%1 istruc descr
at d_lim, dw %3 & 0FFFFh
at d_base_l, dw %2 & 0FFFFh
at d_base_m, db (%2 >> 16) & 0FFh
at d_attr_1, db 144 | (%4<<5) | (%5<<3) | (%6<<2) | (%7<<1)
at d_attr_2, db (%8<<7) | (%9<<6) | ((%3 >> 16) & 0Fh)
at d_base_h, db (%2 >> 24) & 0FFh
iend
%endmacro
--
Azarien
Re: Metody programowania
Author: Bartosz Wójcik
Date: Thu, 27 Mar 2008 23:38
Date: Thu, 27 Mar 2008 23:38
43 lines
2155 bytes
2155 bytes
On Thu, 27 Mar 2008 11:33:00 +0100, Bogdan (bogdro) wrote: > Na bardzo upartego pewnie tak. Ale wprost nie zadeklarujesz 2 > funkcji/etykiet o tej samej nazwie (czy to globalnych, czy to w > strukturze), nie tak jak np. w środku klasy w C++. Tu by trzeba było > jakiś większy mechanizm. Może HLA oferuje jakieś zaczątki klasowości, > ale nie pamiętam dokładnie. Niby rozdział "Classes and Objects" w > AoA32 jest. hmm chyba male niedopatrzenie z tymi nazwami "w strukturach" (no chyba, ze ci biegalo o same nazwy struktur), pierwsze z brzegu jakie sie nawinelo (MASM + windows.inc) SELCHANGE STRUCT nmhdr NMHDR <> chrg CHARRANGE <> seltyp WORD ? SELCHANGE ENDS ENDROPFILES STRUCT nmhdr NMHDR <> hDrop DWORD ? cp DWORD ? fProtected DWORD ? ENDROPFILES ENDS i do obu sie odwolujesz tak samo .data? struktura1 SELCHANGE <?> struktura2 ENDROPFILES <?> .code mov eax,offset struktura1 assume eax:ptr SELCHANGE mov edx,[eax].nmhdr.hwndFrom mov eax,offset struktura2 assume eax:ptr ENDROPFILES mov edx,[eax].nmhdr.hwndFrom -- Bartosz Wójcik | www.pelock.com
Re: Metody programowania
Author: Korsarz Jej Królewskiej Mości I ...
Date: Fri, 28 Mar 2008 09:07
Date: Fri, 28 Mar 2008 09:07
11 lines
2102 bytes
2102 bytes
> Jakie metody programowania można przypisać tworzonym źródłom w języku > asemblera? Języki wyższego poziomu posiadają na przykład programowanie > strukturalne, obiektowe, itd. Czy źródło w języku asemblera pisze się w > sposób wygodny dla zrozumienia rozwiązywanego zadania, czy w sposób > pośredni (stosując makropolecenia), czy jakoś inaczej? Przeczytałem wszystkie odpowiedzi i nasuwa mi się coś takiego, że asembler nie posiada wyższej warsty kodu, tylko każdy szczególik trzeba dłutem dopracować, pomijając oczywiście struktury danych, które idą z taśmy. Ale nie rozumiem, dlaczego tak jest i czy tak musi być? Oczywiście znam projekt ‟High-level Assembly”, lecz jest on raczej nastawiony na rozbudowane makropolecenia; nawet wtedy gdy dane makropolecenie jest wbudowane w język, zachowuje się ono tylko jak generator czegoś idącego w ilość. Nie ma jakby takiego optymalizatora kodu, który pozwalałby mimo swoich zmian zachować kontrolę nad kodem. A może wcale nie chodzi o optymalizator? -- „Pozwalam sobie odpowiedzieć na priva, a to ze względu na przykłady i informacje, które zamierzam "disclose", a które, choć nie są "confidential", to jednak nie są za bardzo przeznaczone dla "third parties"” Message-ID: <fjthnv$5ct$1@news.supermedia.pl>
Re: Metody programowania
Author: Michal Schulz
Date: Fri, 28 Mar 2008 09:32
Date: Fri, 28 Mar 2008 09:32
18 lines
1673 bytes
1673 bytes
Korsarz Jej Królewskiej Mości I Rp. KrĂłlowej âMarysienkiâ wrote: >> Jakie metody programowania moĹźna przypisaÄ tworzonym ĹşrĂłdĹom w jÄzyku >> asemblera? JÄzyki wyĹźszego poziomu posiadajÄ na przykĹad programowanie >> strukturalne, obiektowe, itd. Czy ĹşrĂłdĹo w jÄzyku asemblera pisze siÄ w >> sposĂłb wygodny dla zrozumienia rozwiÄ zywanego zadania, czy w sposĂłb >> poĹredni (stosujÄ c makropolecenia), czy jakoĹ inaczej? > PrzeczytaĹem wszystkie odpowiedzi i nasuwa mi siÄ coĹ takiego, Ĺźe asembler > nie posiada wyĹźszej warsty kodu, [...] > Ale nie rozumiem, dlaczego tak jest i czy tak musi byÄ? Bo to jest wlasnie assembler. Jesli oczekujesz "wyzszej warstwy kodu" to zainteresuj sie C/C++. O zgrozo (a moze na szczescie ;)) C jest obecnie uwazany za taki assembler wysokiego poziomu :) -- Michal Schulz
Re: Metody programowania
Author: Korsarz Jej Królewskiej Mości I ...
Date: Fri, 28 Mar 2008 09:39
Date: Fri, 28 Mar 2008 09:39
10 lines
2117 bytes
2117 bytes
Michal Schulz zapisał: > Bo to jest wlasnie assembler. Jesli oczekujesz "wyzszej warstwy kodu" to > zainteresuj sie C/C++. O zgrozo (a moze na szczescie ;)) C jest obecnie > uwazany za taki assembler wysokiego poziomu :) No wlasnie tak sie sklada, ze znam C, i uwazam, ze to jest asembler wysokiego poziomu, ale tylko i wylacznie wtedy, gdy wylaczy sie w kompilatorze C optymalizator (czego czesto tak naprawde nie da sie wylaczyc do konca, mimo ze dokumentacja mowi, ze sie da). Ale C opiera sie na troche innej koncepcji niz jezyk asemblera, poniewaz wprowadza wlasne instrukcje blokowe, ktore sa nieobecne w jezyku maszynowym (chociaz mozna uznac, ze ograniczenia blokow —takie jak instrukcje warunkowego skoku— sa obecne). A mnie chodzi o cos takiego, ze kiedy chce napisac na przyklad procedure ‘inline’ to moge ja wywolac tylko jawnie jako odrebna procedure albo bawic sie z makropoleceniami, i takich przykladow moglbym poszukac wiecej. To nie jest ani C, ani zwykly asembler. -- „Pozwalam sobie odpowiedzieć na priva, a to ze względu na przykłady i informacje, które zamierzam "disclose", a które, choć nie są "confidential", to jednak nie są za bardzo przeznaczone dla "third parties"” Message-ID: <fjthnv$5ct$1@news.supermedia.pl>
Re: Metody programowania
Author: Jedrzej Dudkiewicz
Date: Fri, 28 Mar 2008 09:48
Date: Fri, 28 Mar 2008 09:48
12 lines
2286 bytes
2286 bytes
Korsarz Jej Królewskiej Mości I Rp. Królowej „Marysienki” wrote: > Michal Schulz zapisał: >> Bo to jest wlasnie assembler. Jesli oczekujesz "wyzszej warstwy kodu" to >> zainteresuj sie C/C++. O zgrozo (a moze na szczescie ;)) C jest obecnie >> uwazany za taki assembler wysokiego poziomu :) > No wlasnie tak sie sklada, ze znam C, i uwazam, ze to jest asembler wysokiego poziomu, ale tylko i wylacznie wtedy, gdy wylaczy sie w kompilatorze C optymalizator (czego czesto tak naprawde nie da sie wylaczyc do konca, mimo ze dokumentacja mowi, ze sie da). Ale C opiera sie na troche innej koncepcji niz jezyk asemblera, poniewaz wprowadza wlasne instrukcje blokowe, ktore sa nieobecne w jezyku maszynowym (chociaz mozna uznac, ze ograniczenia blokow —takie jak instrukcje warunkowego skoku— sa obecne). A mnie chodzi o cos takiego, ze kiedy chce napisac na przyklad procedure ‘inline’ to moge ja wywolac tylko jawnie jako odrebna procedure albo bawic sie z makropoleceniami, i takich przykladow moglbym poszukac wiecej. To nie jest ani C, ani zwykly asembler. Jest gość, nazywa się Randall Hyde o ile dobrze pamiętam, pisze książki o asemblerze. Promuje w nich coś, co się nazywa HLA, "High Level Assembler" - może to jest to, o co Ci chodzi? JD
Re: Metody programowania
Author: Bogdan (bogdro)
Date: Fri, 28 Mar 2008 17:09
Date: Fri, 28 Mar 2008 17:09
35 lines
1896 bytes
1896 bytes
Wiktor S. pisze:
>> Na bardzo upartego pewnie tak. Ale wprost nie zadeklarujesz 2
>> funkcji/etykiet o tej samej nazwie (czy to globalnych, czy to w
>> strukturze), nie tak jak np. w środku klasy w C++.
>
> Oczywiście wiesz, że wewnętrznie, w plikach obiektowych kompilowanych
> przez C++, azwy SĄ różne.
Oczywiście. To by się linker pogubił dopiero :) Chodzi mi o to, że
można napisać coś w stylu
class A
{
void f(int a);
void f(char b);
}
natomiast nie można wewnątrz jednej przestrzeni nazw w asemblerze (np.
plik) zrobić 2 takich samych nazw:
f:
...
ret
f:
...
ret
Dwa osobne pliki, dwie struktury itp. to osobne przestrzenie nazw.
--
Pozdrawiam/Regards - Bogdan (GNU/Linux & FreeDOS)
Kurs asemblera x86 (DOS, GNU/Linux):http://rudy.mif.pg.gda.pl/~bogdro
Grupy dyskusyjne o asm: pl.comp.lang.asm alt.pl.asm alt.pl.asm.win32
www.JabberPL.org www.TorProject.org Soft (EN): miniurl.pl/bogdro-soft
Re: Metody programowania
Author: Bogdan (bogdro)
Date: Fri, 28 Mar 2008 17:10
Date: Fri, 28 Mar 2008 17:10
68 lines
3074 bytes
3074 bytes
Bartosz Wójcik pisze: > On Thu, 27 Mar 2008 11:33:00 +0100, Bogdan (bogdro) wrote: > >> Na bardzo upartego pewnie tak. Ale wprost nie zadeklarujesz 2 >> funkcji/etykiet o tej samej nazwie (czy to globalnych, czy to w >> strukturze), nie tak jak np. w środku klasy w C++. Tu by trzeba było >> jakiś większy mechanizm. Może HLA oferuje jakieś zaczątki klasowości, >> ale nie pamiętam dokładnie. Niby rozdział "Classes and Objects" w >> AoA32 jest. > > hmm chyba male niedopatrzenie z tymi nazwami "w strukturach" (no chyba, ze > ci biegalo o same nazwy struktur), Chodziło o więcej niż jedno pole z tą samą nazwą, w każdej danej pojedynczej strukturze. > pierwsze z brzegu jakie sie nawinelo > (MASM + windows.inc) > > SELCHANGE STRUCT > nmhdr NMHDR <> > chrg CHARRANGE <> > seltyp WORD ? > SELCHANGE ENDS > > ENDROPFILES STRUCT > nmhdr NMHDR <> > hDrop DWORD ? > cp DWORD ? > fProtected DWORD ? > ENDROPFILES ENDS > > i do obu sie odwolujesz tak samo Chodzi o to "nmhdr"? Oczywiście, że tak można, bo struktura definiuje przestrzeń nazw. Innymi słowy, "nmhdr" nie jest nazwą globalną. Nie napiszesz SELCHANGE STRUCT nmhdr NMHDR <> chrg CHARRANGE <> seltyp WORD ? nmhdr db ? SELCHANGE ENDS Prawda? Nie napiszesz też w asemblerze f1: ... ret f1: ... ret (w sensie że obie etykiety są w jednej przestrzeni nazw, np. obie są po prostu globalne). Natomiast w klasie (tworzącą przestrzeń nazw) można mieć 2 funkcje o tej samej nazwie (lecz o różnych listach parametrów). Mogę się mylić, ale może nawet można mieć 2 zmienne o takiej samej nazwie i pomęczyć kompilator, by wywnioskował, o którą biega. -- Pozdrawiam/Regards - Bogdan (GNU/Linux & FreeDOS) Kurs asemblera x86 (DOS, GNU/Linux):http://rudy.mif.pg.gda.pl/~bogdro Grupy dyskusyjne o asm: pl.comp.lang.asm alt.pl.asm alt.pl.asm.win32 www.JabberPL.org www.TorProject.org Soft (EN): miniurl.pl/bogdro-soft
Re: Metody programowania
Author: Bogdan (bogdro)
Date: Fri, 28 Mar 2008 17:10
Date: Fri, 28 Mar 2008 17:10
42 lines
3725 bytes
3725 bytes
Korsarz Jej Królewskiej Mości I Rp. Królowej „Marysienki” pisze: >> Jakie metody programowania można przypisać tworzonym źródłom w języku >> asemblera? Języki wyższego poziomu posiadają na przykład programowanie >> strukturalne, obiektowe, itd. Czy źródło w języku asemblera pisze się w >> sposób wygodny dla zrozumienia rozwiązywanego zadania, czy w sposób >> pośredni (stosując makropolecenia), czy jakoś inaczej? > Przeczytałem wszystkie odpowiedzi i nasuwa mi się coś takiego, że asembler nie posiada wyższej warsty kodu, tylko każdy szczególik trzeba dłutem dopracować, pomijając oczywiście struktury danych, które idą z taśmy. Ale nie rozumiem, dlaczego tak jest i czy tak musi być? Oczywiście znam projekt ‟High-level Assembly”, lecz jest on raczej nastawiony na rozbudowane makropolecenia; nawet wtedy gdy dane makropolecenie jest wbudowane w język, zachowuje się ono tylko jak generator czegoś idącego w ilość. Nie ma jakby takiego optymalizatora kodu, który pozwalałby mimo swoich zmian zachować kontrolę nad kodem. A może wcale nie chodzi o optymalizator? Według mnie, "najwyższą" warstwą kodu dostępną w asmie są procedury/makroinstrukcje (zależy od kompilatora). Dlaczego tak jest? Bo to jest właśnie asembler - język PROCESORA. Procesor nie zna pojęcia klasy, procedury, makra itp. Po prostu wykonuje instrukcje pod wskazanym adresem. A jak pojawia się instrukcja CALL, to my dumnie nazywamy to procedurą, zaś procesor nazywa to: "zapamiętaj gdzie jesteś i zacznij wykonywanie tam". Czy tak musi być? To jest właśnie smak asemblera - wszystko pisze się ręcznie. Mamy szczęście, że nie musimy wklepywać kodów hex/bin każdej instrukcji, że kompilatory mają mechanizmy struktur, makroinstrukcji i inne udogodnienia dla programistów. Może i jakieś cechy z wyższych języków by się czasem przydały, ale to już by było odchodzenie od asemblera w kierunku tychże wyższych języków. Asembler powinien dawać pełną kontrolę nad kodem. Tu kompilator nie poprawia kodu według własnego widzimisię. Tu programista ma optymalizować. Z resztą, optymalizacja w asemblerze nie musi być banalna. Co z tego, że kompilator zamieni moje "powolne" mov eax, 0 na "hiperszybkie" xor eax, eax (dające ten sam efekt), skoro spaprze mi połowę rejestru flag? Istnieją pewne optymalizacje rozmiarowe, np. używanie krótszych form instrukcji, ale do optymalizacji na szybkość potrzeba dużo więcej analizy, np. zależności między instrukcjami. -- Pozdrawiam/Regards - Bogdan (GNU/Linux & FreeDOS) Kurs asemblera x86 (DOS, GNU/Linux):http://rudy.mif.pg.gda.pl/~bogdro Grupy dyskusyjne o asm: pl.comp.lang.asm alt.pl.asm alt.pl.asm.win32 www.JabberPL.org www.TorProject.org Soft (EN): miniurl.pl/bogdro-soft
Re: Metody programowania
Author: Bogdan (bogdro)
Date: Fri, 28 Mar 2008 17:10
Date: Fri, 28 Mar 2008 17:10
28 lines
2864 bytes
2864 bytes
Korsarz Jej Królewskiej Mości I Rp. Królowej „Marysienki” pisze: > Michal Schulz zapisał: >> Bo to jest wlasnie assembler. Jesli oczekujesz "wyzszej warstwy kodu" to >> zainteresuj sie C/C++. O zgrozo (a moze na szczescie ;)) C jest obecnie >> uwazany za taki assembler wysokiego poziomu :) > No wlasnie tak sie sklada, ze znam C, i uwazam, ze to jest asembler wysokiego poziomu, ale tylko i wylacznie wtedy, gdy wylaczy sie w kompilatorze C optymalizator (czego czesto tak naprawde nie da sie wylaczyc do konca, mimo ze dokumentacja mowi, ze sie da). Ale C opiera sie na troche innej koncepcji niz jezyk asemblera, poniewaz wprowadza wlasne instrukcje blokowe, ktore sa nieobecne w jezyku maszynowym (chociaz mozna uznac, ze ograniczenia blokow —takie jak instrukcje warunkowego skoku— sa obecne). A mnie chodzi o cos takiego, ze kiedy chce napisac na przyklad procedure ‘inline’ to moge ja wywolac tylko jawnie jako odrebna procedure albo bawic sie z makropoleceniami, i takich przykladow moglbym poszukac wiecej. To nie jest ani C, ani zwykly asembler. Prawdą jest, że instrukcji blokowych nie ma w języku procesora, są tylko skoki warunkowe. Jeśli Ci ich brak, używaj MASMa/FASMa, które umożliwiają pisanie takich wyrażeń: .if eax > 0 .else .endif (lub podobnych). O ile w FASMie są to makra, to w MASMie już nie, tylko elementy składni kompilatora. W C nie ma procedur "inline". Zaś same te procedury różnią się w większości przypadków od makropoleceń tylko sprawdzaniem typu. Jak piszesz w C++ procedurę "inline", to jest ona "wklejana" przez kompilator w miejsce wywołania, dokładnie jak makro w asemblerze. -- Pozdrawiam/Regards - Bogdan (GNU/Linux & FreeDOS) Kurs asemblera x86 (DOS, GNU/Linux):http://rudy.mif.pg.gda.pl/~bogdro Grupy dyskusyjne o asm: pl.comp.lang.asm alt.pl.asm alt.pl.asm.win32 www.JabberPL.org www.TorProject.org Soft (EN): miniurl.pl/bogdro-soft
Re: Metody programowania
Author: Wiktor S.
Date: Fri, 28 Mar 2008 17:23
Date: Fri, 28 Mar 2008 17:23
16 lines
1270 bytes
1270 bytes
> natomiast nie można wewnątrz jednej przestrzeni nazw w asemblerze (np. > plik) zrobić 2 takich samych nazw: > > f: > ... > ret > > f: > ... > ret Nie można. Ale to akurat "syntaktyczny lukier", nie obowiązkowa cecha obiektowości :-) -- Azarien
Re: Metody programowania
Author: Bartosz Wójcik
Date: Fri, 28 Mar 2008 21:28
Date: Fri, 28 Mar 2008 21:28
23 lines
1662 bytes
1662 bytes
On Fri, 28 Mar 2008 18:10:24 +0100, Bogdan (bogdro) wrote: > SELCHANGE STRUCT > nmhdr NMHDR <> > chrg CHARRANGE <> > seltyp WORD ? > nmhdr db ? > SELCHANGE ENDS no takiego czegos to nawet i w C++ nie skompilujesz (2 razy to samo pole, chyba, ze unie sobie zrobisz z "nmhdr", co tez mozna robic w asm), ale juz: SELCHANGE STRUCT nmhdr NMHDR <> ; ze pole i struktura maja ta sama nazwe? chrg CHARRANGE <> seltyp WORD ? ; nmhdr db ? SELCHANGE ENDS kompiluje sie bezproblemowo pod MASMem -- Bartosz Wójcik | www.pelock.com
Re: Metody programowania
Author: Michał Walenciak
Date: Sat, 29 Mar 2008 07:51
Date: Sat, 29 Mar 2008 07:51
35 lines
1627 bytes
1627 bytes
Bogdan (bogdro) wrote:
>
> Oczywiście. To by się linker pogubił dopiero :) Chodzi mi o to, że
> można napisać coś w stylu
>
> class A
> {
> void f(int a);
> void f(char b);
> }
>
> natomiast nie można wewnątrz jednej przestrzeni nazw w asemblerze (np.
> plik) zrobić 2 takich samych nazw:
>
> f:
> ...
> ret
>
> f:
> ...
> ret
>
> Dwa osobne pliki, dwie struktury itp. to osobne przestrzenie nazw.
>
mozesz za to zdefiniować makro o nazwie "f" które w zależnosci od typu
parametru wywoła f1 bądź f2 ;)
mysle ze w c mimo ze wygląda ładniej to działa tak samo :)
pozdro
--
Michał Walenciak, gg: 3729519, mail: Kicer86 na gmail kropka com
http://kicer.elsat.net.pl
Re: Metody programowania
Author: Michał Walenciak
Date: Sat, 29 Mar 2008 07:58
Date: Sat, 29 Mar 2008 07:58
20 lines
1449 bytes
1449 bytes
Michal Schulz wrote: > > Bo to jest wlasnie assembler. Jesli oczekujesz "wyzszej warstwy kodu" > to zainteresuj sie C/C++. O zgrozo (a moze na szczescie ;)) C jest > obecnie uwazany za taki assembler wysokiego poziomu :) > generalnie c sobie swietnie radzi z optymalizacją kodu i nieraz mnie tym zaskakiwał. jednak z drugiej strony jak widze ze połowa rejestrów nieuzywana a on mieli stosem albo kopiuje cos wte i wewte bez celu to mi sie odechciewa i wole pisać swój srednio zoptymalizany kod w asmie ;) pozdrawiam -- Michał Walenciak, gg: 3729519, mail: Kicer86 na gmail kropka com http://kicer.elsat.net.pl
Re: Metody programowania
Author: Bogdan (bogdro)
Date: Sat, 29 Mar 2008 09:42
Date: Sat, 29 Mar 2008 09:42
38 lines
2342 bytes
2342 bytes
Bartosz Wójcik pisze: > On Fri, 28 Mar 2008 18:10:24 +0100, Bogdan (bogdro) wrote: > >> SELCHANGE STRUCT >> nmhdr NMHDR <> >> chrg CHARRANGE <> >> seltyp WORD ? >> nmhdr db ? >> SELCHANGE ENDS > > no takiego czegos to nawet i w C++ nie skompilujesz (2 razy to samo pole, > chyba, ze unie sobie zrobisz z "nmhdr", co tez mozna robic w asm), Tu był przykład na polach, ale ja ciągle uparcie mówię o przeciążeniu funkcji. Można mieć np. 2 funkcje "nmhdr" w jednej klasie w C++. > ale juz: > > SELCHANGE STRUCT > nmhdr NMHDR <> ; ze pole i struktura maja ta sama nazwe? > chrg CHARRANGE <> > seltyp WORD ? > ; nmhdr db ? > SELCHANGE ENDS > > kompiluje sie bezproblemowo pod MASMem Pole struktury jest w strukturze, a zmienna typu strukturalnego - gdzie indziej (plik, funkcja, ...). Tu nie ma 2 nazw w tej samej "przestrzeni", to nie jest przeciążenie. Można to robić w asmie, w C i w czymkolwiek, gdzie są struktury. -- Pozdrawiam/Regards - Bogdan (GNU/Linux & FreeDOS) Kurs asemblera x86 (DOS, GNU/Linux):http://rudy.mif.pg.gda.pl/~bogdro Grupy dyskusyjne o asm: pl.comp.lang.asm alt.pl.asm alt.pl.asm.win32 www.JabberPL.org www.TorProject.org Soft (EN): miniurl.pl/bogdro-soft
Re: Metody programowania
Author: Bogdan (bogdro)
Date: Sat, 29 Mar 2008 09:42
Date: Sat, 29 Mar 2008 09:42
56 lines
2617 bytes
2617 bytes
Michał Walenciak pisze:
> Bogdan (bogdro) wrote:
>
>> Oczywiście. To by się linker pogubił dopiero :) Chodzi mi o to, że
>> można napisać coś w stylu
>>
>> class A
>> {
>> void f(int a);
>> void f(char b);
>> }
>>
>> natomiast nie można wewnątrz jednej przestrzeni nazw w asemblerze (np.
>> plik) zrobić 2 takich samych nazw:
>>
>> f:
>> ...
>> ret
>>
>> f:
>> ...
>> ret
>>
>> Dwa osobne pliki, dwie struktury itp. to osobne przestrzenie nazw.
>>
>
> mozesz za to zdefiniować makro o nazwie "f" które w zależnosci od typu
> parametru wywoła f1 bądź f2 ;)
Jakoś pewnie się da. W FASMie (w którym można sprawdzać typ
parametru makra) powinno się dać bez większych kłopotów. Ale to nie
definiuje 2 funkcji o tej samej nazwie, bo kod musi być pod różnymi
etykietami.
> mysle ze w c mimo ze wygląda ładniej to działa tak samo :)
W C posiadanie 2 symboli o identycznej nazwie jest zabronione. Może
ewentualnie w 1 pliku obiektowym i CRT, to wtedy może linker sobie
wybierze.
W C++ to nie działa tak samo, jak makro. Nazwy funkcji są dekorowane
w pliku obiektowym, np. z
void f(int i);
dostajesz "_f_int" (na przykład), a z
void f(char c);
dostajesz "_f_char". Różne symbole, linker się nie gubi, a programista
widzi 2 funkcje z tą samą nazwą.
--
Pozdrawiam/Regards - Bogdan (GNU/Linux & FreeDOS)
Kurs asemblera x86 (DOS, GNU/Linux):http://rudy.mif.pg.gda.pl/~bogdro
Grupy dyskusyjne o asm: pl.comp.lang.asm alt.pl.asm alt.pl.asm.win32
www.JabberPL.org www.TorProject.org Soft (EN): miniurl.pl/bogdro-soft
Re: Metody programowania
Author: Michał Walenciak
Date: Sat, 29 Mar 2008 10:38
Date: Sat, 29 Mar 2008 10:38
28 lines
1808 bytes
1808 bytes
Bogdan (bogdro) wrote: > Michał Walenciak pisze: > >> mysle ze w c mimo ze wygląda ładniej to działa tak samo :) > > W C posiadanie 2 symboli o identycznej nazwie jest zabronione. Może > ewentualnie w 1 pliku obiektowym i CRT, to wtedy może linker sobie > wybierze. > W C++ to nie działa tak samo, jak makro. Nazwy funkcji są dekorowane > w pliku obiektowym, np. z > > void f(int i); > > dostajesz "_f_int" (na przykład), a z > > void f(char c); > > dostajesz "_f_char". Różne symbole, linker się nie gubi, a programista > widzi 2 funkcje z tą samą nazwą. > wiesz wszystko zalezy od punktu widzenia :) w kodzie masz 2 te same ale w źródle asemblera/pliku obiektowym który tworzy c/c++ juz nie ;) -- Michał Walenciak, gg: 3729519, mail: Kicer86 na gmail kropka com http://kicer.elsat.net.pl
Re: Metody programowania
Author: Korsarz Jej Królewskiej Mości I ...
Date: Sat, 29 Mar 2008 22:52
Date: Sat, 29 Mar 2008 22:52
8 lines
1368 bytes
1368 bytes
Są przynajmniej dwa poziomy optymalizacji:
1. zmiana słów na inne (czyli na przykład rozkazu na inny)
2. budowanie zdań za programistę ściśle według jego ustaleń (czyli przekształcanie ogólnej struktury programu).
--
qo |) CPL<=dataDPL CPL==/>=codeDPL:conform'/nc';max=CPL! AV0ID bHp
_x/ , CPL<=TSS,gateDPL CPL>=/==dest_DPL:/(jmp&nc') ,RPL!- #GP -o0o
| ng __ -- __ -- __ -- __ -- __ -- __ -- __ -- __ -x86-, EV3RY o0o
,__ -- __ -- Current/Requested/DescriptorPrivilegeLevel C/R/DPL , d4y m:#=
Re: Metody programowania
Author: Korsarz Jej Królewskiej Mości I ...
Date: Sat, 05 Apr 2008 12:56
Date: Sat, 05 Apr 2008 12:56
42 lines
3856 bytes
3856 bytes
Bogdan (bogdro) zapisał:
> Korsarz Jej Królewskiej Mości I Rp. Królowej „Marysienki” pisze:
>> Michal Schulz zapisał:
>>> Bo to jest wlasnie assembler. Jesli oczekujesz "wyzszej warstwy kodu"
>>> to zainteresuj sie C/C++. O zgrozo (a moze na szczescie ;)) C jest
>>> obecnie uwazany za taki assembler wysokiego poziomu :)
>> No wlasnie tak sie sklada, ze znam C, i uwazam, ze to jest asembler
>> wysokiego poziomu, ale tylko i wylacznie wtedy, gdy wylaczy sie w
>> kompilatorze C optymalizator (czego czesto tak naprawde nie da sie
>> wylaczyc do konca, mimo ze dokumentacja mowi, ze sie da). Ale C opiera
>> sie na troche innej koncepcji niz jezyk asemblera, poniewaz wprowadza
>> wlasne instrukcje blokowe, ktore sa nieobecne w jezyku maszynowym
>> (chociaz mozna uznac, ze ograniczenia blokow —takie jak instrukcje
>> warunkowego skoku— sa obecne). A mnie chodzi o cos takiego, ze kiedy
>> chce napisac na przyklad procedure ‘inline’ to moge ja wywolac tylko
>> jawnie jako odrebna procedure albo bawic sie z makropoleceniami, i
>> takich przykladow moglbym poszukac wiecej. To nie jest ani C, ani
>> zwykly asembler.
>
> Prawdą jest, że instrukcji blokowych nie ma w języku procesora, są
> tylko skoki warunkowe. Jeśli Ci ich brak, używaj MASMa/FASMa, które
> umożliwiają pisanie takich wyrażeń:
>
> .if eax > 0
> .else
> .endif
>
> (lub podobnych). O ile w FASMie są to makra, to w MASMie już nie, tylko
> elementy składni kompilatora.
No tak… skoki warunkowe wystarczają, by zachować funkcjonalność instrukcji blokowych, ale zwykle nie używa się kompilatora C tylko po to, by używać go bez optymalizacji kodu. I o to mi chodzi. Natomiast nie odpowiadają mi instrukcje blokowe języka C, a dokładnie ich funkcjonalność. Przy czym mógłby ktoś powiedzieć: „To jakie mają być te instrukcje blokow?”. Ale właśnie sam o to pytam, bo może już coś takiego istnieje.
Tak, słyszałem już nieraz, że mówię o rozwiązaniach, które istnieją w ‟Lispie” i podobnych językach, ale to jest inna grupa języków, a mnie chodzi o język imperatywny, który nie wydaje rozkazów instrukcjami asemblera, gdyż jest wiele różnych procesorów.
> W C nie ma procedur "inline". Zaś same te procedury różnią się w
> większości przypadków od makropoleceń tylko sprawdzaniem typu. Jak
> piszesz w C++ procedurę "inline", to jest ona "wklejana" przez
> kompilator w miejsce wywołania, dokładnie jak makro w asemblerze.
No… nie tak prosto jest wklejana…
--
qo |) CPL<=dataDPL CPL==/>=codeDPL:conform'/nc';max=CPL! AV0ID bHp
_x/ , CPL<=TSS,gateDPL CPL>=/==dest_DPL:/(jmp&nc') ,RPL!- #GP -o0o
| ng __ -- __ -- __ -- __ -- __ -- __ -- __ -- __ -x86-, EV3RY o0o
,__ -- __ -- Current/Requested/DescriptorPrivilegeLevel C/R/DPL , d4y m:#=
Thread Navigation
This is a paginated view of messages in the thread with full content displayed inline.
Messages are displayed in chronological order, with the original post highlighted in green.
Use pagination controls to navigate through all messages in large threads.
Back to All Threads