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. |
|
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. |
|
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. |
|
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-bitowahttps://pl.wikipedia.org/wiki/Architektura_64-bitowaDomyś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... |
|
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. |
|
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). |
|
« 1 » |