[ASM] Perspektywy...

0

Mam pytanie do osób programujących w Assemblerze, o zastosowanie praktyczne tego języka.
Uściślijmy;
Nie potrafię w nim programować, chociaż zawsze chciałem.
Nie rozpoczynam tego wątku dla udowodnienia wyższości ktoregoś języka.
Zastanawiam się tylko nad szybkoscią tworzenia aplikacji w tymże, i gdzie on jest wykorzystywany komercyjnie, poza pisaniem sterowników.
Nie chce też aby ktos mi udowadniał, że mam calkowitę kontrole nad tym co robie.
Chodzi mi o wymiar praktyczny, oderwany od samego kodowania,czy po prostu jest zapotrzebowanie natego typu programistów.

P.S. Nie szukam języka którego mam sie nauczyć aby zarabiać kase, pytam bo tak mnie ostatnio naszło

0

hmm z asmem daleko nie zajedziesz, w chwili obecnej to tylko dodatek, ale potezny dodatek...

0

Chociaż Polska to kraj Wielkich Programistów Delphi (przejrzyj oferty pracy... no może teraz to J2EE i .NET hehe :D ), to na pewno znajomość programowania w assemblerze może być pomocna (nawet nie tyle pod konkretny procesor ale samo podejście od strony niskopoziomowego kodu). Jednak nie łudź się, że uda ci się ewentualnie pisać duże programy tylko w asm. Z drugiej strony zawsze jakiś sterownik/procesor może się trafić do oprogramowania :) i to niżej niż w Javie :>

0

No nie zamierzam pisać projektów w ASM, ale tak ciekawość mnie dopadła, bo patrze ile ludzi szuka pomocy dotyczącej Assemblera, czyli mozna wnioskować, że są to kolejne roczniki informatyki które muszą zaliczyć przedmiot na studiach.
U mnie język programowania determinuje szef w firmie także nie planuje przerzucania się na razie... No chyba że z VB.NET na C#.NET, ale to bez znaczenia.
Z drugiej strony, wierze, że ma on jakieś wykorzystanie poza nauką...

0

Jeśli chodzi o asemblera to jest tak:

Jeśli programujesz sprzętowo (np.: mikrokomputery weźmy na to rodziny 80x51), to robisz to przede wszystkim w asm51, bo asembler to tak na prawdę opis działania sprzętu. Warto uczyć się asemblera, bo można zrozumieć istotę działania procesora i zakres jego zadań - to tak na prawde czyni kogoś programistą lub elektronikiem. Asm jest tez przydatny do pisania systemów operacyjnych.

Jeśli jednak chcesz pisać programy użytkowe (lub nawet sterowniki), to można to równie dobrze napisać w języku wyższego poziomu i czasem nawet, przy dobrym kompilatorze, otrzymasz kod bardziej uproszczony, niż zrobiłbyś to samemu. Jak potrzebujesz stworzyć software, w którym zależy ci na kontroli każdej z funkcji sprzętowych, to ma to jeszcze sens, ale jak ważna jest dla ciebie istota problemu + ewentualnie interfejs użytkownika, to o asemblerze możesz zapomnieć.

Pisanie użytkowych aplikacji w asemblerze jest bezsensownym nadmiarem pracy.

0

Należy dodać jeszcze, że znajomość Assemblera może znacząco wpłynąć na optymalność kodu pisanego w języku wyższego poziomu.

Bo wiedząc np. że dzielenie jest jedną z najwolniejszych instrukcji a operacje bitowe realizowane są w 1 takcie procka (jak parowalne, to uznać można, że czas = 1/2 taktu ;)) to sprawdzając parzystość liczby w wielkiej pętli zamiast zrobic tak (bardzo popularne)

if (a%2) {}

zrobisz tak

if (a&1) {}
0

Do niedawna nie zauwazalem Asma! Ale na szczescie opamietalem sie. Asm jest na prawde przydatny. Wiadomo, ze nikt nie pisze w nim wielkich programow ale bez niego niektore operacje to masakra. Warto nauczyc sie go choc troszeczke by zrozumiec lepiej istote dzialania komputera - nigdy nie wiadomo czy nie zainteresujesz sie bezpieczenstwem, virusami, overcodingiem itp. Wiekszosc ludzi Asma kojazy z monotonnym wklepywaniem w notatniku: mov ax, 01h itd. lecz sa calkiem mile i funkcjonalne srodowiska graficzne jak: Radasm. Gotowe makra.

0

Fajnie temat trochę się rozruszał, ja sam znam podstawy ASM-a takie jak uczą na studiach Informatycznych - których coprawda nie przeszedłem, ale egzamin z ASM-a zdałem...
Daje on oczywiście podstawy jak to wszystko działa w komputerze itd. tylko ja programując nigdy nie zastanawiałem się nad tym by mieć pełną kontrolę nad sprzętem,po prostu nie było mi to potrzebne, wpływa to pewnie na to, że ważniejsze dla odbiorcy mojego oprogramowania jest interface i możliwość realizowania logiki biznesowej.
Natomiast moim takim niespełnionym <ort>mażeniem </ort>jest bardzo dobre poznanie ASM-a, ale tym to chyba na emeryturze się zajmę...
Dlatego chciałem oderwać Was od kodów i kodowania i spytać jak patrzycie na przydatność ASM-a w aspekcie praktycznym, może ktoś ma np. jakiś przykład, że użył ASM-a bo pasował do tego idealnie a innym języką czegoś brakowało...

0
Marooned napisał(a)

Należy dodać jeszcze, że znajomość Assemblera może znacząco wpłynąć na optymalność kodu pisanego w języku wyższego poziomu.

Oj może, może... :/

Marooned napisał(a)

[...] to sprawdzając parzystość liczby w wielkiej pętli zamiast zrobic tak (bardzo popularne)

if (a%2) {}

zrobisz tak

if (a&1) {}

Widzisz Panczo, to jest argument dla którego NIE należy uczyć się assemblera albo inaczej - nie należy przenosić wiedzy z assemblera do języka wyższego poziomu. Dlaczego? Ano to nie ma żadnego znaczenia dla kompilatora czy zapisze a%2, czy a&1, to w ogóle mnie nie interesuje co on wygeneruje, a wygeneruje identyczny kod, a jeśli nawet nie - to co z tego??? Kompilator optymalizuje(!) kod i to bardziej globalnie niż człowiek. Nie uważajcie mnie za konserwatystę kompilatorowego, ja naprawdę programowałem w asm+rev.eng :>
Z drugiej strony asm przydaję się ale proszę nie uogólniajcie... I nie wymyślajcie własnych teorii dlaczego coś tak działa.
Rozumiem, że działania modulo vs. and miało dać efekt: dzielenie vs operacja bitowa... No niestety, tak nie musi być :P
Kod cpp:

#include <stdio.h>
int main()
{
    int a;
    scanf( "%d", &a );

    if ( a % 2 ) printf("a");
    if ( a & 1 ) printf("a");        
        
    unsigned int b = a;
    if ( a % 2 ) printf("b");
    if ( a & 1 ) printf("b");

    int tab[1000];
    for (int i=0; i<1000; i++)
        if (tab[i]%2) printf("t");

    for (int i=0; i<1000; i++)
        if (tab[i]&1) printf("t");
}

GCC 3.4.2 (x86, flaga -O1), fragmenty dla testów:

; [...]
;
; test w ifach
; zauważcie optymalizację kompilatora printf("a") do putchar() !!
;
	call	_scanf
	testb	$1, -4012(%ebp)
	je	L2
	movl	$97, (%esp)
	call	_putchar
L2:
	testb	$1, -4012(%ebp)
	je	L3
	movl	$97, (%esp)
	call	_putchar
L3:
	testb	$1, -4012(%ebp)
	je	L4
	movl	$98, (%esp)
	call	_putchar
L4:
	testb	$1, -4012(%ebp)
	je	L5
	movl	$98, (%esp)
	call	_putchar
L5: 
; [....]
;
; testy w pętlach
;
L10:
	testb	$1, -4008(%ebp,%ebx,4)
	je	L8
	movl	$116, (%esp)
	call	_putchar 
; [....]
	testb	$1, -4008(%ebp,%ebx,4)
	je	L13
	movl	$116, (%esp)
	call	_putchar
L13: 

Testy są identyczne

test $1, value

, a nie inaczej :D
Ta wiedza assemblerowa naprawdę jest w kompilatorze.

0

Ja nie przenosze tej wiedzy bo jej nie posiadam ;)
Pracuje zawodowo jako programista, teraz to juz bardziej kordynator programistów i mówiąc szczerze nigdy za bardzo nie rozpatrywałem programowania w kategoriach czy tak zadać warunek czy tak co będzie wydajniejsze... Wychodzę z zalożenia, że to ma robić za mnie kompilator i tyle, jakbym zastanawiał się nad każdym takim warunkiem to wtedy chyba bym zaczął pisać od razu w assemblerze.
Oczywiście optymalizuje swój kod i ulepszam, ale według zaleceń w moim wypadku Microsoftu, a te rozwarzania o których pisze w pierwszym akapicie dla mnie nie mają sensu, programista nie jest od tego by wykonywać prace za kompilator. Takie jest moje zdanie o tworzeniu aplikacji.
ASM natomiast mnie pasjonuje i ciekawi, więc rozwijam swoją teorie, że głownie uczą się go studenci informatyki + róznej maści crackerzy, hackerzy i wirusolodzy,
chociaż ci ostatni dla mnie się troszkę zdewaulowali, bo teraz byle łebek ściąga z netu generator wrusów itd. i uważa się za hacekera...

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