Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

standard instrukcji maszynowych

Ostatnio zmodyfikowano 2017-05-30 14:11
Autor Wiadomość
Sztywny
Temat założony przez niniejszego użytkownika
standard instrukcji maszynowych
» 2017-05-28 21:24:54
Witam,
czy istnieje jakiś standard określający absolutne minimum instrukcji maszynowych, które musi implementować każdy CPU 32-64 bitowy?
Chciałem napisać wstawkę w ASM do bootloadera, a priorytetem jest właśnie uniwersalność dla intela i amd.
P-161705
1aam2am1
» 2017-05-28 22:26:21
Tak takim standardem jest x86 lub amd64. Sam typ procesora określa w jakim standardzie został zbudowany. Oczywiście niema zgodności np pomiędzy x86 i armeabi bo to są zbyt różne budowy.
P-161709
jankowalski25
» 2017-05-29 00:02:12
Standardu jako takiego, który musiałby być implementowany przez każdy procesor (nieważne, ilu bitów będzie używał jako jednostki), nie ma. Jako najbardziej ogólną podstawę możesz uznać maszynę Turinga, jeśli chcesz pisać coś na bardzo niskim poziomie abstrakcji, co będzie maksymalnie przenośne.

Jeśli szukasz czegoś w miarę przenośnego, ale nieco bardziej złożonego, to ewentualnie możesz kombinować z jakimś kodem pośrednim, który zostanie później przerobiony na to, co trzeba (chociażby wykorzystując bytecode Javy). Niemniej jednak na podstawie tego, co piszesz wydaje mi się, że zwykły kod x86 powinien wystarczyć.

Mimo wszystko, wcześniej czy później zajdzie potrzeba wygenerowania kodu dla konkretnego procesora (czasami nawet w locie, ale zawsze to musi być w formacie, który dany procesor rozumie). Z tym bootloaderem, to w przypadku UEFI można to zapisać nawet w C++, więc być może poradzisz sobie bez wstawek.
P-161715
Rashmistrz
» 2017-05-30 01:02:26
czy istnieje jakiś standard określający
absolutne minimum instrukcji maszynowych
"standard instrukcji maszynowych"
to właśnie jest architektura procesora.

które musi implementować każdy CPU 32-64 bitowy?
https://pl.wikipedia.org/wiki​/Architektura_32-bitowa
https://pl.wikipedia.org/wiki​/Architektura_64-bitowa
Domyślam się, że chodzi Ci o rodzinę x86(_32) i x86_64.

Chciałem napisać wstawkę w ASM do bootloadera, [...]
Znajdź asembler danej architektury dla której piszesz bootloader.

[...], a priorytetem jest właśnie
uniwersalność dla intela i amd.
... Domyśliłem się wyżej, jednak zakładam,
że wykluczasz całkowite przestarzalce.
__________________________________________

Jak chcesz odpowiednią odpowiedź
to zadaj odpowiednie pytanie...
P-161770
Sztywny
Temat założony przez niniejszego użytkownika
» 2017-05-30 09:59:10
Nie wiem czy to będzie dobre pytanie,
ale wydaje mi się, że instrukcje z 32bit procesorów mogą być wykonywane na procesorach 64bit, tak?
Przecież to tylko inna długość słowa.

@jankowalski25
mógłbyś rozwinąć pomysł z java bytecode?
Poniekąd istnieją kompilatory, pozwalające na kompilację c/c++ do właśnie takiego przejściowego kodu i wykonanie go na jvm

Wydaje mi się jednak za dużo roboty z ASM. Prościej będzie skorzystać z gnu-efi lub edk2.
P-161783
jankowalski25
» 2017-05-30 14:11:40
mógłbyś rozwinąć pomysł z java bytecode?
Wspominałeś o przenośności pomiędzy różnymi architekturami procesorów, więc dorzuciłem wzmiankę o bytecode Javy. Niektórzy próbują pisać takie bootloadery. Sprowadza się to do tego, że na każdej maszynie stawiasz jakąś maszynę wirtualną, która może w locie (albo przed załadowaniem programu, zależy od sytuacji) zamieniać ten bytecode na instrukcje zrozumiałe dla danego procesora. Wtedy masz jeden program, który powinien ruszyć na różnych procesorach.

Prościej będzie skorzystać z gnu-efi lub edk2.
Na tej samej stronie masz opis, jak zacząć tworzenie bootloadera pod UEFI.

instrukcje z 32bit procesorów mogą być wykonywane na procesorach 64bit, tak?
Zależy od architektury, zwykle jest taka możliwość, ewentualnie czasami trzeba przejść do jakiegoś "trybu zgodności", aby uniknąć różnych niuansów związanych z nieco innym działaniem niektórych instrukcji. W przypadku x64 masz to opisane w trybach pracy (w linku podanym przez Rashmistrza).
P-161792
« 1 »
  Strona 1 z 1