To znaczy, że przez ręce?
Ręcznie pobieramy arkusz instrukcji dla mikroprocesora, poznajemy tryby adresowania i inne problemy z reprezentacją danych, a następnie przekształcamy je w coś wygodnego, na przykład w notację szesnastkową.
Następnie należy wprowadzić te informacje do pamięci urządzeń, używając procesu specyficznego dla urządzenia (plik z dysku, plik z linii szeregowej, wpisany z panelu przedniego z kilkoma przełącznikami).
Oczywiście, mogą występować różne rodzaje problemów z łańcuchem narzędzi, które trzeba wymyślić, aby umieścić swój plik binarny w maszynie. Jeśli robisz to po prostu dla śmiechu, szesnastkowy, ołówek i podkładka od lat pasują do wielu lat.
Edytuj -
Musisz wiedzieć kilka rzeczy.
Po pierwsze, kody operacyjne i kody operacyjne muszą znać tryby adresowania.
Rozważ to 6502:
LDA #$00
LDA $00
LDA $1234
To są trzy różne instrukcje dotyczące 6502.
Pierwsze ładunku akumulatora (A) z $ 00, 0 w hex. Symbol # informuje asembler, że używasz "bezpośredniego" trybu adresowania (6502 ma 13 trybów całkowitego adresowania).
Drugi ładuje Akumulator z wartością lokalizacji pamięci pod adresem $ 0000. W modelu 6502 ma tryb "zerowej strony", dzięki czemu można łatwiej uzyskać dostęp do pamięci z pierwszej strony pamięci (adresy 0000- $ 00FF).
Trzeci ładuje Akumulator z wartością lokalizacji pamięci pod adresem 1234 USD. To jest adresowanie absolutne, po prostu określając rzeczywisty adres pamięci, którą jesteś zainteresowany.
Podkreślam ten przykład, ponieważ na pierwszy rzut oka wszystkie te trzy wyglądają tak samo. Ale tak naprawdę, wszystkie kompilują się do 3 różnych instrukcji lub opcodów. Dlatego ważne jest, aby zrozumieć, co mówi zespół, aby można było wybrać poprawny kod operacyjny procesora.
Teraz, jeśli spojrzysz na opcode guide dla 6502 i przejrzysz instrukcję LDA, zobaczysz różne, binarne wartości dla każdej instrukcji.
Tak więc, w tym przypadku, co można uzyskać:
$A9 $00
$A5 $00
$AD $12 $34
to jest binarny (w hex) reprezentowania tych 3 instrukcji.
Pierwsza, A9, przeznaczona jest do "bezpośredniego" trybu adresowania, druga, A5, do adresowania strony zerowej, a na koniec do $ AD dla Absolutu.
Należy również zauważyć, że po argumentach są argumenty. W przypadku 6502, po prostu podążają za strumieniem bajtów. Różne procesory robią różne rzeczy.Zauważ, że dla Absolutu mamy 2 bajty, 12 $ i 34 $, z których każdy reprezentuje połowę całego, 16-bitowego adresu. Uważam, że to prawda, że najważniejszy bajt adresu jest najważniejszy, ale może być odwrócony ($ A9 34 $ 12).
To podstawa ręcznego składania.
Inną rzeczą wartą zapamiętania są problemy, takie jak lokalizacja, w której zostanie załadowany zespół. To wpłynie na wartości dla takich rzeczy jak twoje etykiety.
W 6502:
label: LDA #$00
JMP label
Jeśli zespół jest począwszy od adresu $ 1000, to będzie to zebrać do:
$A9 $00
$4C $10 $00
Jeśli montaż zaczyna się od adresu $ 5555, a następnie:
$A9 $00
$4C $55 $55
Zobacz, instrukcja JMP (skok) (4C) potrzebuje adresu do skoku i etykiety w twoim assemie bly jest względne względem jego lokalizacji w programie. Dogodnie w tym przypadku etykieta jest na samym początku. Ale możesz zobaczyć, jak adres jest kodowany do końcowego kodu maszynowego.
6502 to ŁATWY (naprawdę łatwy) montaż. Nowoczesne procesory, cóż, nie są. Nowoczesne asemblery wykonują dla ciebie dużo pracy, a ty masz bardziej skomplikowane procesory z większymi zestawami instrukcji i takie rzeczy jak problemy z wyrównaniem - te wszystkie są niedostępne w 6502. Ale jako asembler ręczny, jesteś odpowiedzialny za wszystkie te niuanse.
Twój mikroprocesorowy podręcznik ma ci powiedzieć te niuanse. Ale dzięki nowoczesnym, skomplikowanym procesorom, nie jest to łatwe do zrobienia i uczenia się.
Niekoniecznie chcę cię od tego odwieść, ale bądź świadomy, że może to być dużo pracy.
Ale to jest esencja tego, co musisz zrobić.
Jaką architekturę? –
Procesor to NIOS2. Czy to ma znaczenie? – JustinBieber