C'è un assemblatore che sto scrivendo che si trova all'interno del file asm.c
che si trova in questo repository . Utilizza il set di istruzioni situato nel file specs
per produrre un binario di output. (Il programma che eseguirà questo binario non è ancora stato creato - l'inizio si trova in main.c
.) Usando il programma di esempio chiamato echochar.sdmasm
, l'assemblatore emette il binario desiderato. Qui è in esadecimale:
90 00 a0 00
Ma lo fa solo finora su una macchina Windows sotto Cygwin. (Non l'ho ancora testato sotto Linux.) Su un Mac basato su Intel, questo è il binario risultante:
00 90 00 a0
Questa sembra una differenza in endianness, ma ho pensato che ciò potesse accadere solo quando due processori sono completamente diversi. Questa sembra essere ed endian differenza tra sistemi operativi, non processori. È proprio così, o c'è qualcos'altro qui che non sto ottenendo?
È appena riuscito a testarlo su Linux - l'errore di output si verifica come avviene su Mac.
Ok, qualcos'altro sta succedendo del tutto. Uscita da hd
su Linux:
00000000 00 90 00 a0 |....|
00000004
Output da hexdump
su Linux:
0000000 9000 a000
0000004
Questo è davvero dispari. Non riesco a stabilire quale sia l'output corretto.