Pascal czy Assembler?

A1
  • Rejestracja:ponad 6 lat
  • Ostatnio:około 2 miesiące
  • Lokalizacja:Polska
  • Postów:82
0

Witajcie

Postanowiłem poduczyć się trochę assemblera i jest to mój pierwszy początkowy programik z wykorzystaniem stawek assemblerowych. Być może sobie trochę i ułatwiłem, gdyż nic nie instalowałem na kompie a wykorzystałem jedynie kompilator pascala. W celach ćwiczeń, postanowiłem rozwiązać jakiś prosty problem w tym przypadku poruszony na forum.

Napisz program który wprowadzi z klawiatury napis(8znakow) i wyświetli go na ekranie w porządku odwrotnym.

Jestem ciekawy też waszego zdania. Czy takie zaczęcie uczenia się assemblera ma sens i czy można jakoś lepiej rozwiązać owe zadanie. W tym momencie moja wiedza i praktyka pozwalają na zrobienie owego zadania w ten sposób.

Kopiuj
{ Ps. zamiast 8 jest 11 :). }
program Zadanie1;
uses Crt;
var
   tekst: array[1..11] of char;
   i: integer;
begin
     ClrScr;
     writeln('Napisanie i wyświetlenie tekstu na ekranie');
     writeln('Zawartość tablicy TEKST typu char');
     for i := 1 to 11 do
        write(tekst);
     writeln;
     writeln('Przykładowy tekst: ALA MA KOTA');
asm
        mov cx, 0h
        mov cx, seg tekst
        mov si, offset tekst
        mov ds, cx
        mov di, si
        mov cx, 0Bh
        @petla:
              mov ah, 08h
              int 21h
              mov ds:[di], al
              add di, 1
        loop @petla
        mov dx, 0h
        mov cx, 0Bh
        mov di, si { Wyświetlanie od końca - sub di, 1 }
        @petla_dwa:
                   mov dl, ds:[di]
                   mov ah, 02h
                   int 21h
                   add di, 1 { Wyświetlanie od końca - sub di, 1 }
        loop @petla_dwa
end;
     writeln;
     writeln('-------------------Sprawdzenie----------------');
     for i := 1 to 11 do
        write(tekst[i])
end.

Proszę o wasze opinie ewentualnie o jakieś drobne sugestie.
Pozdrawiam


Nieoszlifowany diament
edytowany 14x, ostatnio: flowCRANE
cerrato
Moderator Kariera
  • Rejestracja:około 7 lat
  • Ostatnio:6 minut
  • Lokalizacja:Poznań
  • Postów:8794
3

Za bardzo nie chciało Ci się przyłożyć do zadania pytania, więc tylko się domyślam, o co pytasz :P

Podejrzewam, że sie zastanawiasz, czy podany kod jest w Pascalu, czy w Assemblerze. Jeśli rzeczywiście o to Ci chodziło, to odpowiadam: to jest Pascal, który zawiera wstawkę assemblera.

Zwróć uwagę na fragment

Kopiuj
writeln('Przykładowy tekst: ALA MA KOTA');
asm
mov cx, 0h

W drugiej linii jest słowo kluczowe asm, które rozpoczyna blok pisany w Assemblerze. Poczytać o tym wynalazku możesz tutaj https://pl.wikibooks.org/wiki/Object_Pascal/Wstawki_w_asemblerze oraz tutaj https://wiki.freepascal.org/Asm


vpiotr
  • Rejestracja:ponad 13 lat
  • Ostatnio:prawie 3 lata
1
  1. Popraw wciecia
  2. zmien nazwy petli na wiecej znaczace
  3. zrób stała z "11"
edytowany 1x, ostatnio: vpiotr
flowCRANE
Moderator Delphi/Pascal
  • Rejestracja:ponad 13 lat
  • Ostatnio:około 10 godzin
  • Lokalizacja:Tuchów
  • Postów:12171
0
  1. Zmień identyfikatory z polskich na angielskie.
  2. Kod pisany w Pascalu powinien być zgodny z przyjętą konwencją nazewnictwa i ze stylem jego formatowania.

Pracuję nad własną, arcade'ową, docelowo komercyjną grą z gatunku action/adventure w stylu retro (pixel art), programując silnik i powłokę gry od zupełnych podstaw, przy użyciu Free Pascala i SDL3. Więcej informacji znajdziesz na moim mikroblogu.
edytowany 1x, ostatnio: flowCRANE
cerrato
Moderator Kariera
  • Rejestracja:około 7 lat
  • Ostatnio:6 minut
  • Lokalizacja:Poznań
  • Postów:8794
2

Postanowiłem poduczyć się trochę assemblera i jest to mój pierwszy początkowy programik [...] . Czy takie zaczęcie uczenia się assemblera ma sens

Moim zdaniem obecnie, jeśli nie masz konkretnych powodów, dla których byś miał się uczyć asemblera, to jest to zupełna strata czasu. Jedynie w kilku niszowych zastosowaniach taka wiedza by mogła się Tobie przydać, poza tym jest to sztuka dla sztuki. Kod masz mocno rozciąganiety, bo coś, co w języku wysokiego poziomu zajmie jedną linie, w asm potrzebuje dwóch ekranów. Do tego kod jest znacznie mniej czytelny i trudniej się go pisze. Zysk na wydajności, który miał znaczenie w czasach komputerów 386, w dobie 4-rdzeniowych procków @3GHz jest nieodczuwalny.

Aktualnie jest tendencja do stosowania języków wysokiego poziomu, gotowych bibliotek, modułów, komponentów, frameworków, programowania obiektowego itp. Nawet, jak się nauczysz asm, to masz nikłe szansę, że gdzieś ci się do czegoś przyda. Lepiej ten czas poświęcić na naukę czegoś bardziej perspektywicznego.


Azarien
  • Rejestracja:ponad 21 lat
  • Ostatnio:4 minuty
1
    mov cx, 0h
    mov cx, seg tekst

Dwa razy zapisujesz wartość do tego samego rejestru. Pierwsza instrukcja jest bezcelowa.

    mov ds, cx

Wydaje mi się, że ds jest prawidłowo zainicjalizowane i nie trzeba tego robić, ale mogę się mylić.

    mov di, si
    mov cx, 0Bh
    @petla:
          mov ah, 08h
          int 21h
          mov ds:[di], al

ile według ciebie wynosi al i dlaczego?

edytowany 1x, ostatnio: Azarien
KA
Rejestral to wyjście przerwania 21h(o ile wywołujemy funkcje która coś zwraca) Przy wywołaniu tego przerwania z numerem funkcji (rejestr ah) 08h na wyjściu czyli w al jest odczytany znak. Jeżeli chodzi o optymalizację tam niepotrzebne inkrementuje di instrukcją add di, 1a przecież inc di można zrobić to samo. Dawno nie bawiłem się asmem ale coś mi się przypomina, że zerowanie rejestru przez xor też jest szybsze od mov ale tu nie chodzi o szybkość.
A1
  • Rejestracja:ponad 6 lat
  • Ostatnio:około 2 miesiące
  • Lokalizacja:Polska
  • Postów:82
0
Kopiuj
program Zadanie1;
uses Crt;
const
     n = 27;
var
   tekst: array[1..n] of char;
   i: integer;
begin
     ClrScr;
     writeln('Wersja numer dwa :)');
     { ALA MA KOTA, ALA MA KOTA :) }
     asm
        mov cx, 0h
        mov cx, seg tekst
        mov si, offset tekst
        mov ds, cx
        mov di, si
        mov cx, n
        @petla:
              mov ah, 08h
              int 21h
              mov dl, al
              mov ah, 02h
              int 21h
              mov ds:[di], dl
              add di, 1
        loop @petla
     end;
     writeln;
     writeln('-------------------Sprawdzenie----------------');
     for i := 1 to n do
        write(tekst[i])
end.

O to program wpisujący znaki do tablicy typu char :). Jeśli będziecie mieli jakieś sugestie to chętnie się z nimi zapoznam :).


Nieoszlifowany diament
flowCRANE
@Shizzer: na temat odpowiadaj w postach.
vpiotr
  • Rejestracja:ponad 13 lat
  • Ostatnio:prawie 3 lata
0

W ASM z tego co ja się orientuję pętli się nie wcina, czyli raczej:

Kopiuj
     asm
        mov cx, 0h
        mov cx, seg tekst
        mov si, offset tekst
        mov ds, cx
        mov di, si
        mov cx, n
     @petla:
        mov ah, 08h
        int 21h
        mov dl, al
        mov ah, 02h
        int 21h
        mov ds:[di], dl
        add di, 1
        loop @petla
edytowany 1x, ostatnio: vpiotr
Shizzer
  • Rejestracja:prawie 8 lat
  • Ostatnio:5 miesięcy
  • Postów:231
1

Jeśli będziesz kiedyś pisał więcej kodu w asmie to nie używaj instrukcji loop, bo jest wolna --> https://stackoverflow.com/questions/35742570/why-is-the-loop-instruction-slow-couldnt-intel-have-implemented-it-efficiently. (chyba że optymalizujesz kod pod względem rozmiaru a nie czasu wykonania) Zamiast tego używaj konstrukcji cmp + conditional jump jcc. Ewentualnie zamiast cmp możesz używać test kiedy porównujesz daną wartość z zerem.


KA
  • Rejestracja:prawie 20 lat
  • Ostatnio:około 10 godzin
  • Lokalizacja:Gorlice
1

Moje uwagi w komentarzach, jest tam też opisane co się dzieje przy wywoływaniu przerwania.

Kopiuj
program Zadanie1;
uses Crt;
const
  n = 27;
var
  tekst: array[1..n] of char;
  i: integer;
begin
  ClrScr;
  writeln('Wersja numer dwa :)');
  { ALA MA KOTA, ALA MA KOTA :) }
  asm
    {mov cx, 0h} {calkiem niepotrzebne}
    mov cx, seg tekst
    mov si, offset tekst
    mov ds, cx
    mov di, si
    mov cx, n
  @petla:
    {po co wywolywac 2 funkcje (odczyt i wypisanie
    znaku na ekran jak jest jedna robiaca to i to
    wiec to co w komentarzu nizej do wywalenia}
    { mov ah, 08h
    int 21h
    mov dl, al
    mov ah, 02h
    int 21h
    mov ds:[di], dl
    add di, 1}
    mov ah, 1 {funkcja nr 1 przerwania 21h czyli odczyt}
    int 21h   {znaku z klawiatury z wypisaniem na ekran}
    mov ds:[di], al  {zapis odczytanego znaku do tablicy}
    inc di {dodaje 1 do di po to aby w kolejnym obiegu petli zapisywac znak 
             jako nastepny element tablicy (zastepuje add di, 1)}
    loop @petla
  end;
  writeln;
  writeln('-------------------Sprawdzenie----------------');
  for i := 1 to n do
    write(tekst[i]);
end.

Nie odpowiadam na PW w sprawie pomocy programistycznej.
Pytania zadawaj na forum, bo:
od tego ono jest ;) | celowo nie zawracasz gitary | przeczyta to więcej osób a więc większe szanse że ktoś pomoże.
edytowany 1x, ostatnio: kAzek
FL4RE
  • Rejestracja:prawie 6 lat
  • Ostatnio:około rok
  • Postów:21
2

Ja bym na twoim miejscu sprobowal teraz napisac to samo, ale przy uzyciu funkcji z WinApi/libc w zaleznosci z jakiego systemu korzystasz. Uzywanie przerwan to wg. mnie znak minionej epoki, przydatne gdy procesor nie jest jeszcze w trybie chronionym

KA
  • Rejestracja:prawie 20 lat
  • Ostatnio:około 10 godzin
  • Lokalizacja:Gorlice
1

Nie widzę powodu aby to pisać w czystym WinApi wystarczy w Delphi czy FP (stosując funkcje które są nakładkami na WinApi). Tak samo jak nie widzę powodu miałby być napisany w assemblerze poza jednym bardzo ważnym nauczyciel jest idiotą, który w tych czasach uczy stosowania wstawek assemblera w 16 bitowym Pascalu.


Nie odpowiadam na PW w sprawie pomocy programistycznej.
Pytania zadawaj na forum, bo:
od tego ono jest ;) | celowo nie zawracasz gitary | przeczyta to więcej osób a więc większe szanse że ktoś pomoże.
FL4RE
  • Rejestracja:prawie 6 lat
  • Ostatnio:około rok
  • Postów:21
0

Czy ja wiem, asm przydatna rzecz, jednak jeśli OP będzie chciał dalej się rozwijać w tym kierunku to polecam przenieść się na coś 32 bitowego, a tam już sobie nie poprzerywa :)

edytowany 1x, ostatnio: flowCRANE
KA
OP i Delphi od dawna są wieloplatformowe już od dawna można kompilować programy 32bit a nawet 64bit i to nie tylko pod Windows więc nie ma mowy o rozwoju w tym kierunku.
FL4RE
OP mialem na mysli tworce watku a nie object pascala
sugar_hiccup
hola hola, weźmie 32-bitowego STM-a i sobie poprzerywa aż miło
cerrato
Moderator Kariera
  • Rejestracja:około 7 lat
  • Ostatnio:6 minut
  • Lokalizacja:Poznań
  • Postów:8794
0

asm przydatna rzecz

@FL4RE - a tak właściwie to do czego? Chodzi mi oczywiście o "typowe" zastosowania, takie jak jakaś apka desktopowa, stronka w React czy baza w SQL :P


somedev
Można pisać patche do aplikacji w formie launchera który podmienia wskaźniki na funkcje - widziałem coś takiego do starego VCL jak się nie miało nowego Delphi ;p
PerlMonk
  • Rejestracja:około 6 lat
  • Ostatnio:prawie 3 lata
  • Lokalizacja:Warszawa 🐪
  • Postów:1719
1
cerrato napisał(a):

asm przydatna rzecz

@FL4RE - a tak właściwie to do czego? Chodzi mi oczywiście o "typowe" zastosowania, takie jak jakaś apka desktopowa, stronka w React czy baza w SQL :P

Do robienia programów rozruchowych :D . A tak na poważnie: do optymalizacji.


Nie sztuka uciec gdy w dupie sztuciec. 🐪🐪🐪
Zobacz pozostałe 3 komentarze
somedev
@PerlMonk: nie żartuj. Używanie asm w fotoszopie było by głupotą. Generalnie to nie te czasy gdzie optymalizuje się asm. Owszem - optyalizuje się wiedzą, jak to wykona się na procesorze i żeby wykonało się lepiej, mniej czekało na dane, ale da się to zrobić z poziomu języków wysokiego poziomu jak C++, C# czy Java. Pchanie asm do dużych programów jeśli nie trzeba jest skrajnie nieodpowiedzialne i byłby to pierwszy krok do zwolnienia architekta czy seniora co to klepnął.
PerlMonk
@somedev: Nie napisałem, że fotopracza trzeba pisać w asemblerze.
Shizzer
Optymalizacje w Asmie są opłacalne jeśli pisze je ktoś kto zna architekturę procesorów lepiej niż twórcy kompilatorów, a o to jest dość ciężko. W końcu chcemy być lepsi od kompilatora, nie? Inna sprawa, że optymalizacje w Asmie są bardzo ciekawe i ogólnie Asm jest ciekawy :)
cerrato
@Shizzer: tak, jest ciekawy, ale w 99.6% przypadków także bezsensowny ;)
Shizzer
@cerrato: To się zgadza. W dzisiejszych czasach pisanie 99% programów w Asmie jest pozbawione sensu
FL4RE
  • Rejestracja:prawie 6 lat
  • Ostatnio:około rok
  • Postów:21
0

No co wy Panowie, a taki pentester czy badacz bezpieczeństwa czy nawet pospolity cracker to bez asma sie nie obejdzie.
Sam najbardziej skorzystałem na tej znajomości pisząc cheaty do gierek

cerrato
Ok, ale to i tak jest nisza
Shizzer
  • Rejestracja:prawie 8 lat
  • Ostatnio:5 miesięcy
  • Postów:231
0

Oczywiście masz rację, ale nadal jest to nisza. @cerrato pytał o typowe rozwiązania, a w takich rozwiązaniach jak apki desktopowe, a już tym bardziej webowe Asm nie jest przydatny w dzisiejszych czasach. Co do security to Asm jest świetnym narzędziem - sam często korzystam ;)


edytowany 1x, ostatnio: flowCRANE
Azarien
  • Rejestracja:ponad 21 lat
  • Ostatnio:4 minuty
3

Czy wszystko na tym forum musi być mainstreamowe, nowe i przynoszące zarobek? Czasami ktoś może chcieć napisać coś pod starą czy niszową platformę.

cerrato
Moderator Kariera
  • Rejestracja:około 7 lat
  • Ostatnio:6 minut
  • Lokalizacja:Poznań
  • Postów:8794
0

Oczywiście, że może się bawić assemblerem w ramach pasji/hobby/pracy w jakiejś niszy, ale polecanie komuś asm w kontekście przyszłej pracy jest zwyczajnie nieetyczne i niemoralne :p


PerlMonk
Niemoralne jest płacenie 15k programistom. Toż to normalna praca biurowa.
flowCRANE
Moderator Delphi/Pascal
  • Rejestracja:ponad 13 lat
  • Ostatnio:około 10 godzin
  • Lokalizacja:Tuchów
  • Postów:12171
0
Azarien napisał(a):

Czy wszystko na tym forum musi być mainstreamowe, nowe i przynoszące zarobek?

Też mnie wnerwia takie gadanie. Wiadome, że nie wszystkie technologie nadają się w tym momencie do robienia kariery, jednak masa ludzi programuje z innego powodu niż dla pieniędzy.

cerrato napisał(a):

Oczywiście, że może się bawić assemblerem w ramach pasji/hobby/pracy w jakiejś niszy, ale polecanie komuś asm w kontekście przyszłej pracy jest zwyczajnie nieetyczne i niemoralne :p

Nie przesadzaj – systemy wbudowane to nie nisza, a język bardzo się przydaje. Nie wszystko stoi na Arduino. ;)


Pracuję nad własną, arcade'ową, docelowo komercyjną grą z gatunku action/adventure w stylu retro (pixel art), programując silnik i powłokę gry od zupełnych podstaw, przy użyciu Free Pascala i SDL3. Więcej informacji znajdziesz na moim mikroblogu.
cerrato
Moderator Kariera
  • Rejestracja:około 7 lat
  • Ostatnio:6 minut
  • Lokalizacja:Poznań
  • Postów:8794
0

systemy wbudowane to nie nisza

No jednak tak. Zobacz, ile jest wątków o Java, C#, webmastering, Pythonie, PHP czy nawet tym nieszczęsnym Delphi ;) A ile wątków jest o programowaniu kontrolerów (i to niekoniecznie w assemblerze)? Oczywiście, sama liczba postów nie jest ostatecznym wyznacznikiem, ale jednak o czymś świadczy. Sam osobiście znam wiele osób, które robią desktopach czy web, ale chyba nikogo, kto na poważnie siedzi w kontrolerach.

Moim zdaniem jest to bardzo niszowa działka, a to co napisałem wcześniej (że w 99% przypadków asm się do niczego nie przyda) jest prawdziwe.


jarekr000000
  • Rejestracja:ponad 8 lat
  • Ostatnio:2 dni
  • Lokalizacja:U krasnoludów - pod górą
  • Postów:4707
1
PerlMonk napisał(a):

Do robienia programów rozruchowych :D . A tak na poważnie: do optymalizacji.

Jak kiedyś coś zoptymalizujesz asmem i nie będzie to sztuka dla sztuki to opisz - bo będzie to niezła ciekawostka.
Plus, trzeba będzie twórców jakiegoś kompilatora ochrzanić, bo zrypali (fakt, że bywa).

A ten programik to straszna brydza - jest rok 2019, a tam:
uses crt
int 21h

Sorry, ale w końcówce lat 90tych to już był obciach.
Coś bardziej praktycznego dla asm;
http://www.int80h.org

Btw. sam czasem drapne coś małego w asm na C64. Ale nie służy to absolutnie niczemu.
To nie połowa 20 wieku, asm z programowaniem nie ma wiele wspólnego. Fajne do zabawy, akcji więcej niż w grach typu Battlefield (tylko bywa bardziej brutalny).


jeden i pół terabajta powinno wystarczyć każdemu
edytowany 2x, ostatnio: jarekr000000
flowCRANE
Moderator Delphi/Pascal
  • Rejestracja:ponad 13 lat
  • Ostatnio:około 10 godzin
  • Lokalizacja:Tuchów
  • Postów:12171
0

Warto znać asma – można pisać gry na NES-a i inne stare konsole. To dopiero nisza. :P


Pracuję nad własną, arcade'ową, docelowo komercyjną grą z gatunku action/adventure w stylu retro (pixel art), programując silnik i powłokę gry od zupełnych podstaw, przy użyciu Free Pascala i SDL3. Więcej informacji znajdziesz na moim mikroblogu.
edytowany 1x, ostatnio: flowCRANE
Azarien
  • Rejestracja:ponad 21 lat
  • Ostatnio:4 minuty
0
jarekr000000 napisał(a):
PerlMonk napisał(a):

Do robienia programów rozruchowych :D . A tak na poważnie: do optymalizacji.

Jak kiedyś coś zoptymalizujesz asmem i nie będzie to sztuka dla sztuki to opisz - bo będzie to niezła ciekawostka.
Plus, trzeba będzie twórców jakiegoś kompilatora ochrzanić, bo zrypali (fakt, że bywa).

Ale wiesz że te kompilatory też ludzie piszą, i to - uwaga - często znający asembler?

Ale nie służy to absolutnie niczemu.

Jak już napisałem – nie musi czemuś „służyć”.

edytowany 1x, ostatnio: Azarien
vpiotr
  • Rejestracja:ponad 13 lat
  • Ostatnio:prawie 3 lata
4

Znajomość ASM przydaje się:

  • przy pracy ze sprzętem (myślę że to nie taki mały sektor jak nam się wydaje)
  • przy optymalizacji kodu C/C++ (bez wstawek ASM lub ze wstawkami - co kto lubi)
  • przy obserwowaniu UB w C/C++ na godbolt
  • przy pisaniu swojego kompilatora albo JITa (patrz JIT dla BF)
  • przy czytaniu kodu z lat 80-tych i wcześniejszych
  • po to żeby komuś wytłumaczyć że żeby zrobić left pada nie musi zaciągać pół internetu bo kiedyś kompy miały 1 kB RAM i ludzie na nich jakoś dawali radę pracować.
sugar_hiccup
po to żeby komuś wytłumaczyć że żeby zrobić left pada nie musi zaciągać pół internetu bo kiedyś kompy miały 1 kB RAM i ludzie na nich jakoś dawali radę pracować. o boże, tak bardzo to
flowCRANE
Moderator Delphi/Pascal
  • Rejestracja:ponad 13 lat
  • Ostatnio:około 10 godzin
  • Lokalizacja:Tuchów
  • Postów:12171
0

Do tego jeszcze RE i ogólnie praca związana z malware i antywirami.


Pracuję nad własną, arcade'ową, docelowo komercyjną grą z gatunku action/adventure w stylu retro (pixel art), programując silnik i powłokę gry od zupełnych podstaw, przy użyciu Free Pascala i SDL3. Więcej informacji znajdziesz na moim mikroblogu.
RC
  • Rejestracja:ponad 6 lat
  • Ostatnio:prawie 3 lata
  • Postów:6
4
cerrato napisał(a):

No jednak tak. Zobacz, ile jest wątków o Java, C#, webmastering, Pythonie, PHP czy nawet tym nieszczęsnym Delphi ;) A ile wątków jest o programowaniu kontrolerów (i to niekoniecznie w assemblerze)? Oczywiście, sama liczba postów nie jest ostatecznym wyznacznikiem, ale jednak o czymś świadczy. Sam osobiście znam wiele osób, które robią desktopach czy web, ale chyba nikogo, kto na poważnie siedzi w kontrolerach.

Moim zdaniem jest to bardzo niszowa działka, a to co napisałem wcześniej (że w 99% przypadków asm się do niczego nie przyda) jest prawdziwe.

Oczywiście programistów robiących systemy wbudowane jest mniej niż pozostałych, ale nisza to nie jest.
A czemu ich za bardzo nie widać na tym forum?

  1. W sumie to oni tu są, ale jescze o tym nie wiedzą - ludzie którzy za 5 -10 lat będą robić embedded obecnie zadają podstawowe pytania przede wszystkim w dziale C/C++
  2. Ponadto mają fora bardziej poświęcone tematom hardwareu i embedded, choćby Elektroda.
  3. Większość z obecnie zajmujących się embedded nie ma potrzeby zadawać pytań w takich miejscach - systemy którymi się zajmują są tak specyficzne że wiedzy na forach internetowych na ich temat nie ma.

Prosze nie traktować tych punktów w sposób zupełnie dosłowny, odstępstwa ovczywiście się mogą zdarzać.

Osobiście pracuję w zespole rozwijającym aplikację pracującą na procesorach sygnałowych, jest to ok 40 developerów C/C++ oraz ponad drugie tyle dzięki, którym możemy efektywnie pracować i testować nasz kod (głównie ludzie piszący w pythonie i matlabie choć nie tylko).

Co prawda w asemblerze nie piszemy, bo nie ma szans abyśmy zrobili to lepiej od kompilatora (procesory są VLIW), ale aby wykorzystać to co oferuje procesor a czego nie da się wyrazić przy pomocy C/C++ konieczne jest wykorzystanie intrinsic functions.
I tu pojawia się konieczność jako takiej znajomości asemblera - oglądamy to co wypluł kompilator, nie czysty asembler ale z komentarzami kompilatora, i możemy się zorientować czy i co można jeszcze w kodzie optymalizować.

I nie, nie optymalizujemy w ten sposób każdego kawałka kodu, zasadniczo jedynie kod wykonujący DSP gdzie zysk 1 cykla na iterację pętli przekładać się może na setki czy tysiące cykli wykonania funkcji.
A prosze pamiętać, że przekroczenie budżetu czasowego nawet o kilkanaście mikrosekund może oznaczać że wykonane obliczenia będą bezwartościowe.

cerrato
Napiszesz coś więcej, co robicie konkretnie?
RC
Warstwa fizyczna LTE oraz 5G.
TD
@RootCause: mozna wiedzieć jaka firma? ;)
RC
Duża firma telekomunikacyjna z północy
Kliknij, aby dodać treść...

Pomoc 1.18.8

Typografia

Edytor obsługuje składnie Markdown, w której pojedynczy akcent *kursywa* oraz _kursywa_ to pochylenie. Z kolei podwójny akcent **pogrubienie** oraz __pogrubienie__ to pogrubienie. Dodanie znaczników ~~strike~~ to przekreślenie.

Możesz dodać formatowanie komendami , , oraz .

Ponieważ dekoracja podkreślenia jest przeznaczona na linki, markdown nie zawiera specjalnej składni dla podkreślenia. Dlatego by dodać podkreślenie, użyj <u>underline</u>.

Komendy formatujące reagują na skróty klawiszowe: Ctrl+B, Ctrl+I, Ctrl+U oraz Ctrl+S.

Linki

By dodać link w edytorze użyj komendy lub użyj składni [title](link). URL umieszczony w linku lub nawet URL umieszczony bezpośrednio w tekście będzie aktywny i klikalny.

Jeżeli chcesz, możesz samodzielnie dodać link: <a href="link">title</a>.

Wewnętrzne odnośniki

Możesz umieścić odnośnik do wewnętrznej podstrony, używając następującej składni: [[Delphi/Kompendium]] lub [[Delphi/Kompendium|kliknij, aby przejść do kompendium]]. Odnośniki mogą prowadzić do Forum 4programmers.net lub np. do Kompendium.

Wspomnienia użytkowników

By wspomnieć użytkownika forum, wpisz w formularzu znak @. Zobaczysz okienko samouzupełniające nazwy użytkowników. Samouzupełnienie dobierze odpowiedni format wspomnienia, zależnie od tego czy w nazwie użytkownika znajduje się spacja.

Znaczniki HTML

Dozwolone jest używanie niektórych znaczników HTML: <a>, <b>, <i>, <kbd>, <del>, <strong>, <dfn>, <pre>, <blockquote>, <hr/>, <sub>, <sup> oraz <img/>.

Skróty klawiszowe

Dodaj kombinację klawiszy komendą notacji klawiszy lub skrótem klawiszowym Alt+K.

Reprezentuj kombinacje klawiszowe używając taga <kbd>. Oddziel od siebie klawisze znakiem plus, np <kbd>Alt+Tab</kbd>.

Indeks górny oraz dolny

Przykład: wpisując H<sub>2</sub>O i m<sup>2</sup> otrzymasz: H2O i m2.

Składnia Tex

By precyzyjnie wyrazić działanie matematyczne, użyj składni Tex.

<tex>arcctg(x) = argtan(\frac{1}{x}) = arcsin(\frac{1}{\sqrt{1+x^2}})</tex>

Kod źródłowy

Krótkie fragmenty kodu

Wszelkie jednolinijkowe instrukcje języka programowania powinny być zawarte pomiędzy obróconymi apostrofami: `kod instrukcji` lub ``console.log(`string`);``.

Kod wielolinijkowy

Dodaj fragment kodu komendą . Fragmenty kodu zajmujące całą lub więcej linijek powinny być umieszczone w wielolinijkowym fragmencie kodu. Znaczniki ``` lub ~~~ umożliwiają kolorowanie różnych języków programowania. Możemy nadać nazwę języka programowania używając auto-uzupełnienia, kod został pokolorowany używając konkretnych ustawień kolorowania składni:

```javascript
document.write('Hello World');
```

Możesz zaznaczyć również już wklejony kod w edytorze, i użyć komendy  by zamienić go w kod. Użyj kombinacji Ctrl+`, by dodać fragment kodu bez oznaczników języka.

Tabelki

Dodaj przykładową tabelkę używając komendy . Przykładowa tabelka składa się z dwóch kolumn, nagłówka i jednego wiersza.

Wygeneruj tabelkę na podstawie szablonu. Oddziel komórki separatorem ; lub |, a następnie zaznacz szablonu.

nazwisko;dziedzina;odkrycie
Pitagoras;mathematics;Pythagorean Theorem
Albert Einstein;physics;General Relativity
Marie Curie, Pierre Curie;chemistry;Radium, Polonium

Użyj komendy by zamienić zaznaczony szablon na tabelkę Markdown.

Lista uporządkowana i nieuporządkowana

Możliwe jest tworzenie listy numerowanych oraz wypunktowanych. Wystarczy, że pierwszym znakiem linii będzie * lub - dla listy nieuporządkowanej oraz 1. dla listy uporządkowanej.

Użyj komendy by dodać listę uporządkowaną.

1. Lista numerowana
2. Lista numerowana

Użyj komendy by dodać listę nieuporządkowaną.

* Lista wypunktowana
* Lista wypunktowana
** Lista wypunktowana (drugi poziom)

Składnia Markdown

Edytor obsługuje składnię Markdown, która składa się ze znaków specjalnych. Dostępne komendy, jak formatowanie , dodanie tabelki lub fragmentu kodu są w pewnym sensie świadome otaczającej jej składni, i postarają się unikać uszkodzenia jej.

Dla przykładu, używając tylko dostępnych komend, nie możemy dodać formatowania pogrubienia do kodu wielolinijkowego, albo dodać listy do tabelki - mogłoby to doprowadzić do uszkodzenia składni.

W pewnych odosobnionych przypadkach brak nowej linii przed elementami markdown również mógłby uszkodzić składnie, dlatego edytor dodaje brakujące nowe linie. Dla przykładu, dodanie formatowania pochylenia zaraz po tabelce, mogłoby zostać błędne zinterpretowane, więc edytor doda oddzielającą nową linię pomiędzy tabelką, a pochyleniem.

Skróty klawiszowe

Skróty formatujące, kiedy w edytorze znajduje się pojedynczy kursor, wstawiają sformatowany tekst przykładowy. Jeśli w edytorze znajduje się zaznaczenie (słowo, linijka, paragraf), wtedy zaznaczenie zostaje sformatowane.

  • Ctrl+B - dodaj pogrubienie lub pogrub zaznaczenie
  • Ctrl+I - dodaj pochylenie lub pochyl zaznaczenie
  • Ctrl+U - dodaj podkreślenie lub podkreśl zaznaczenie
  • Ctrl+S - dodaj przekreślenie lub przekreśl zaznaczenie

Notacja Klawiszy

  • Alt+K - dodaj notację klawiszy

Fragment kodu bez oznacznika

  • Alt+C - dodaj pusty fragment kodu

Skróty operujące na kodzie i linijkach:

  • Alt+L - zaznaczenie całej linii
  • Alt+, Alt+ - przeniesienie linijki w której znajduje się kursor w górę/dół.
  • Tab/⌘+] - dodaj wcięcie (wcięcie w prawo)
  • Shit+Tab/⌘+[ - usunięcie wcięcia (wycięcie w lewo)

Dodawanie postów:

  • Ctrl+Enter - dodaj post
  • ⌘+Enter - dodaj post (MacOS)