Pascal czy Assembler?

Odpowiedz Nowy wątek
2019-07-23 13:52
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.

{ 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: furious programming, 2019-07-27 01:14

Pozostało 580 znaków

2019-07-25 19:50
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).


Bardzo lubie Singletony, dlatego robię po kilka instancji każdego.
edytowany 2x, ostatnio: jarekr000000, 2019-07-25 19:53

Pozostało 580 znaków

2019-07-25 21:26
0

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


edytowany 1x, ostatnio: furious programming, 2019-07-25 21:26

Pozostało 580 znaków

2019-07-25 23:15
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, 2019-07-25 23:19

Pozostało 580 znaków

2019-07-26 00:25
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ć.

Szacuje się, że w Polsce brakuje 50 tys. programistów
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 - sugar_hiccup 2019-08-04 03:03

Pozostało 580 znaków

2019-07-26 00:27
0

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


Pozostało 580 znaków

2019-07-26 09:06
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.

Napiszesz coś więcej, co robicie konkretnie? - cerrato 2019-07-26 09:07
Warstwa fizyczna LTE oraz 5G. - RootCause 2019-07-26 21:22
@RootCause: mozna wiedzieć jaka firma? ;) - tdudzik 2019-07-26 21:59
Duża firma telekomunikacyjna z północy - RootCause 2019-07-29 15:10

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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

Robot: CCBot (2x)