Czy warto się uczyć Assemblera/kodu binarnego?

0

Powiedzcie mi czy warto się uczyć ASM lub kodu zero-jedynkowego i czy jakbym chciał napisać system operacyjny to lepiej czysty C ze wstawkami ASM, sam Assembler czy kod binarny?

0

Jak system to tylko i wyłącznie kod zer-jedynkowy.

0

Kodu binarnego do programowania nie warto się uczyć. Chyba, że masz zamiar konstruować procesory, czy coś w ten deseń.
Obecnie systemy pisze się w C/C++ z wstawkami w ASM. Słyszałem o systemie napisanym całkowicie w ASMie razem z systemem okien, który mieścił się na dyskietce 1.44MB

2

Nigdy nikt nie programował w "kodzie binarnym" (projektowania bramek logicznych nie zaliczam do programowania!). W kodzie maszynowym, jeśli juz, to pisało się raczej za pomocą liczb szesnastkowych ze względu na wygodę adresowania. Zresztą różnica między asemblerem a kodem maszynowym w takiej postaci wcale nie jest taka wielka, ot zamiast mnemoników typu "mov" użyłbyś numeru danego rozkazu. Niemniej dla ułatwienia sobie życia i dla większej czytelności wprowadzono mnemoniki.

Znajomość asemblera jest wartościowa, ale zwykle nie ma sensu pisać w nim bezpośrednio kodu. Niemniej do analizy działania czy do debugowania może się przydać.

Z twoich pytań wynika że nie potrafisz właściwie nic w tym zakresie i miną lata (!) zanim w ogóle będziesz mógł pomyśleć o czymś takim jak pisanie OSa więc moja rada jest taka: nie zawracaj sobie teraz glowy "co będzie lepsze przy pisaniu OSa" tylko naucz sie programować.

0

resztą różnica między asemblerem a kodem maszynowym w takiej postaci wcale nie jest taka wielka, ot zamiast mnemoników typu "mov" użyłbyś numeru danego rozkazu.

Tylko że jest wiele różnych movów zależnie od rodzaju adresowania i użytych rejestrów. Za dużo do zapamiętania. Liczenie względnych ofsetów do skoków przy zmiennej długości rozkazu też przyjemne nie będzie.

1

Programowanie binarne to np.:
płachta Zygalskiego: http://pl.wikipedia.org/wiki/Marian_Rejewski#mediaviewer/File:P%C5%82achta_Zygalskiego_-_decrypting_Enigma.jpg

Czyli ręczne tworzenie kart z kodem binarnym.

Programowanie maszynowe to pewnie wszystko poniżej poziomu assemblera, czyli:

  • kodowanie (edycja, korekty) w kodzie hex
  • programowanie przyciskami (starsze komputery, kalkulatory)

Takie programowanie przydaje się gdy assembler przestaje być wygodny albo wręcz nie jest dostępny.
Nie wymaga nie wiadomo jakiego doświadczenia, robiłem coś takiego po roku pracy z komputerami.

Assembler bardzo się przydaje:

  • przy tworzeniu OS jest niezbędny do uruchomienia niektórych instrukcji specjalnych
  • przy optymalizacji programów C/C++ gdy chcesz podejrzeć co kompilator wymyślił
  • przy optymalizacji programów C/C++ gdy chcesz dodać jakąś wstawkę ASM, która wykorzystuje jakąś ciekawą instrukcję która jest bardzo przydatna w algorytmie, np. POPCNT

To ostatnie można częściowo uniknąć stosując tzw. "compiler intrinsics", czyli instrukcje ASM które są skonwertowane do funkcji wyższego poziomu (a właściwie są ich cieniem).

Stworzenie własnego OS nie jest takie trudne jeśli ma się odpowiednie materiały, przy okazji uczy wielu rzeczy o komputerach.
Na PC można próbować wykorzystywać do tego np. VirtualBox + ew. jakaś automatyzacja przez Pythona, dzięki czemu cykl kompilacja-test-korekta nie będzie taki długi jak przy prawdziwym odpaleniu systemu.

Jeden z pierwszych linków w wynikach dla hasła "simple OS for pc in c":
http://www.cs.bham.ac.uk/~exr/lectures/opsys/10_11/lectures/os-dev.pdf

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