• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

question-closed Assembler w c++

Object Storage Arubacloud
0 głosów
2,087 wizyt
pytanie zadane 1 listopada 2017 w C i C++ przez Jakub 0 Pasjonat (23,120 p.)
zamknięte 2 listopada 2017 przez Jakub 0

Witam serdecznie, ostatnio poznałem taki artykuł (zaznaczam że o asm nic nie wiem) :https://www.p-programowanie.pl/cpp/polaczenie-assemblera-i-cpp/

Jednak przy testowaniu tych funkcji (pracuje w visual studio) wyskakuje mi błąd kompilacji:


C2400    błąd składni wbudowanego asemblera w "kod operacji"; znaleziono "("    dostep do zmiennej lokalnej  

lub

Błąd    C2290    składnia C++ "asm" zignorowana. Użyj __asm.    dostep do zmiennej lokalnej  

za to nie ma błędu kompilacji przy przykładach ze strony microsoft: https://msdn.microsoft.com/pl-pl/library/45yd4tzz.aspx

Nie wiem w ogóle z czego wynikają błędy kompilacji. Będę bardzo wdzięczny za pomoc :). Mam jeszcze takie pytanko czy asm użyty w c++ ma takie same funkcje jak czysty? Bardzo przepraszam i wiem że pytanie może wydawać się żałosne ale naprawdę o assembler nic nie wiem, nie mogę znaleźć informacji dotyczących wykorzystania go pod c++ a naprawdę zawsze mnie interesował (a po co mam pisać w czystym asm skoro w c++ mogę go wykorzystać). Dziękuje za wyrozumiałość i pozdrawiam

komentarz zamknięcia: Juz znam odpowiedz
1
komentarz 1 listopada 2017 przez Eryk Andrzejewski Mędrzec (164,260 p.)
edycja 1 listopada 2017 przez Eryk Andrzejewski

Podaj jakiego używasz kompilatora. Wstawki języka asemblera, z tego co mi wiadomo, nie należą do standardu języka C++ i każdy kompilator może je implementować inaczej.

Ups, nie zauważyłem, że podałes. Wybacz.

1 odpowiedź

+1 głos
odpowiedź 1 listopada 2017 przez j23 Mędrzec (194,920 p.)
wybrane 2 listopada 2017 przez Jakub 0
 
Najlepsza

W artykule masz przykłady dla g++, w Visualu wygląda to nieco inaczej (czyt. o wiele lepiej):

int fun2(int a, int b)
{
        int suma;
 
        __asm
        {
                mov eax, [ebp + 8] ; można też tak: mov eax, a
                add eax, [ebp + 12] ; mov eax, b
                add eax, 1 
                mov [ebp-4], eax
        }
 
        return suma;
}

 

komentarz 2 listopada 2017 przez Jakub 0 Pasjonat (23,120 p.)
Dzięki wielkie, nie skupiłem się co pisze na tych stronkach...

Mam tylko jeszcze jedno małe pytanie, czy możliwości asm pod c++ są takie same?
1
komentarz 2 listopada 2017 przez Eryk Andrzejewski Mędrzec (164,260 p.)
No a czemu nie?
1
komentarz 2 listopada 2017 przez DragonCoder Nałogowiec (36,500 p.)
Co rozumiesz przez takie same? Kod asemblerowy, bedzie zawsze kodem aseblerowym, wiec jego tlumaczenie na jezyk maszynowy zajmuje chwile, nie wazne czy piszesz w c++ i robisz wstawke.
komentarz 2 listopada 2017 przez Jakub 0 Pasjonat (23,120 p.)
Tak sie dla pewności zapytałem, dzięki i pozdrawiam
1
komentarz 2 listopada 2017 przez DragonCoder Nałogowiec (36,500 p.)
Ok, tylko warto przemyslec czy warto wstawiac wastawke z asseblera :), bo czasami to duzy naklad na napisanie kodu a maly pod wzgledem czasu :)
1
komentarz 2 listopada 2017 przez Eryk Andrzejewski Mędrzec (164,260 p.)
Czasami trzeba, np. pisząc HAL do OSa. No ale zawsze można też ten kod pisać w osobnym pliku, typowym dla języka asemblera, zamiast korzystać ze wstawek.
komentarz 2 listopada 2017 przez Jakub 0 Pasjonat (23,120 p.)
Ale chyba wygodniej użyć wstawki niż użerać sie z kompilacją asemblera :)
1
komentarz 2 listopada 2017 przez Eryk Andrzejewski Mędrzec (164,260 p.)

A jakie z tym użeranie? Nie ma w tym nic trudnego. Powiedziałbym nawet, że używanie wstawek jest trudniejsze, przynajmniej na GCC (chociaż pewnie czasaami wygodniejsze - jeśli chcemy coś umieścić w tym samym pliku, co jakiś kod C, czy C++, ale na dłuższą metę chyba lepiej stosować osobne pliki, jeśli musimy napisać sporo kodu). wink

komentarz 2 listopada 2017 przez Jakub 0 Pasjonat (23,120 p.)
Ale cieżko dobrać asm odpowiedni dla danego CPU itd... jak ja miałem problem z instalacja SFML po VS to co dopiero skompilować program w asemblerze pod moim komputerem :/
1
komentarz 2 listopada 2017 przez Eryk Andrzejewski Mędrzec (164,260 p.)
Ale przecież asm we wstawkach też musi być dopasowany do architektury procesora, na ARM kod ze wstawkami języka asemblera dla x86 Ci się nie skompiluje.
1
komentarz 2 listopada 2017 przez Eryk Andrzejewski Mędrzec (164,260 p.)

jak ja miałem problem z instalacja SFML po VS

Dlatego nie lubię IDE. Wiele rzeczy utrudniają, zamiast pomagać. Ja używam Linuksa i piszę ręcznie pliki kompilacji i problemu nie mam (instalacja biblioteki to jedno polecenie, a dodanie jej do projektu to kilka flag do linkera.)

 to co dopiero skompilować program w asemblerze pod moim komputerem

Ależ to wywołanie jednej komendy. laugh

1
komentarz 2 listopada 2017 przez DragonCoder Nałogowiec (36,500 p.)
Jak sie nie myle sa 3 glowne assemblery. Wiec kod assemblerowy, az tak bardzo nie roznia sie. Zamiast ide, mozesz uzywac edytora i podpisac samemu kompilator i tyle :)
komentarz 2 listopada 2017 przez Jakub 0 Pasjonat (23,120 p.)

Ale przecież asm we wstawkach też musi być dopasowany do architektury procesora, na ARM kod ze wstawkami języka asemblera dla x86 Ci się nie skompiluje.

Tak jak mówię o asm nic nie wiem i tu widać moją niewiedzę... tzn że kiedy coś piszemy w assembler to musimy się martwić nie tylko o odpowiedni kompilator ale też jego składnia musi być dopasowana do architektury?? Myślę żeby korzystać ze wstawek asemblerowych ponieważ umiem tylko podstawy c++ i nie ma sensu jakoś porządnie brać się za kolejny język (w tym przypadku za asm), zamiast tego trochę bym z nim poeksperymentował :)

1
komentarz 2 listopada 2017 przez DragonCoder Nałogowiec (36,500 p.)
Umiem podstawy, wiec po co Ci aaembler? Ja osobiscie wstawki z assemblera uzywalbym tylko przy wiekszych projektach, gdzie liczy sie wydajnosc. Opanuj lepiej pythona, bo to fajne i mile udogodnienie z C++
1
komentarz 2 listopada 2017 przez j23 Mędrzec (194,920 p.)
Daruj sobie te wstawki. Dziś prawie w ogóle nie stosuje się ich z wyjątkiem może 1% specyficznych zastosowań, z którymi prawdopodobnie nie będziesz miał do czynienia.
komentarz 2 listopada 2017 przez Jakub 0 Pasjonat (23,120 p.)
spoko. pytanie zadałem tylko z ciekawości. Myślę że zerknę na asm dopiero kiedy jakiś program będzie tego potrzebował

Podobne pytania

0 głosów
1 odpowiedź 1,088 wizyt
pytanie zadane 24 października 2017 w Assembler przez Frendom Pasjonat (18,900 p.)
0 głosów
0 odpowiedzi 805 wizyt
pytanie zadane 22 marca 2017 w Assembler przez bamboleo320 Początkujący (450 p.)
0 głosów
0 odpowiedzi 116 wizyt
pytanie zadane 14 stycznia 2017 w Assembler przez Jędrzej Dembowski Użytkownik (740 p.)

92,579 zapytań

141,429 odpowiedzi

319,657 komentarzy

61,962 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...