🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

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
#1747
Author: Korsarz Jej Królewskiej Mości I ...
Date: Tue, 25 Mar 2008 19:42
6 lines
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
#1748
Author: Bogdan (bogdro)
Date: Wed, 26 Mar 2008 12:16
18 lines
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
#1749
Author: Wiktor S.
Date: Wed, 26 Mar 2008 22:37
17 lines
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
#1750
Author: Bogdan (bogdro)
Date: Thu, 27 Mar 2008 10:33
33 lines
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
#1751
Author: Wiktor S.
Date: Thu, 27 Mar 2008 15:52
47 lines
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
#1757
Author: Bartosz Wójcik
Date: Thu, 27 Mar 2008 23:38
43 lines
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
#1761
Author: Korsarz Jej Królewskiej Mości I ...
Date: Fri, 28 Mar 2008 09:07
11 lines
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
#1762
Author: Michal Schulz
Date: Fri, 28 Mar 2008 09:32
18 lines
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
#1763
Author: Korsarz Jej Królewskiej Mości I ...
Date: Fri, 28 Mar 2008 09:39
10 lines
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
#1764
Author: Jedrzej Dudkiewicz
Date: Fri, 28 Mar 2008 09:48
12 lines
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
#1752
Author: Bogdan (bogdro)
Date: Fri, 28 Mar 2008 17:09
35 lines
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
#1758
Author: Bogdan (bogdro)
Date: Fri, 28 Mar 2008 17:10
68 lines
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
#1768
Author: Bogdan (bogdro)
Date: Fri, 28 Mar 2008 17:10
42 lines
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
#1765
Author: Bogdan (bogdro)
Date: Fri, 28 Mar 2008 17:10
28 lines
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
#1753
Author: Wiktor S.
Date: Fri, 28 Mar 2008 17:23
16 lines
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
#1759
Author: Bartosz Wójcik
Date: Fri, 28 Mar 2008 21:28
23 lines
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
#1754
Author: Michał Walenciak
Date: Sat, 29 Mar 2008 07:51
35 lines
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
#1767
Author: Michał Walenciak
Date: Sat, 29 Mar 2008 07:58
20 lines
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
#1760
Author: Bogdan (bogdro)
Date: Sat, 29 Mar 2008 09:42
38 lines
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
#1755
Author: Bogdan (bogdro)
Date: Sat, 29 Mar 2008 09:42
56 lines
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
#1756
Author: Michał Walenciak
Date: Sat, 29 Mar 2008 10:38
28 lines
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
#1769
Author: Korsarz Jej Królewskiej Mości I ...
Date: Sat, 29 Mar 2008 22:52
8 lines
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
#1766
Author: Korsarz Jej Królewskiej Mości I ...
Date: Sat, 05 Apr 2008 12:56
42 lines
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