Qualcuno può risolvere questo 8080 codice assembly 'di puzzle'?
-
22-09-2019 - |
Domanda
Un mio amico è stato dato 8080 codice assembly come parte di un puzzle che sta cercando di risolvere. Questo è il codice:
3E 02
4F
C6 04
47
11 41 01
21 69 00
19
76
Ha bisogno di valori di B, DE, C e HL
Qualcuno può risolvere questo o indicarlo nella giusta direzione su come eseguire questo?
Aggiorna
Spoiler: La soluzione sembra essere:
C = 02, B = 06, D = 01, E = 41, H = 01, L = AA
Soluzione
Ecco una guida al set di istruzioni 8080: http://www.comsci.us/cpu/8080/isindex.html Il vostro elenco esagonale si presenta come un flusso di istruzioni; si dovrebbe essere in grado di passare da lì. Come deliziosamente old-school!
In bocca al lupo.
Altri suggerimenti
Per avere un riferimento, ecco lo smontaggio:
3E 02 mvi a, 2 ; Move o1 <- immediate data
4F mov c, a ; Move o1 <- o2
C6 04 adi 4 ; Add immediate to A
47 mov b, a ; Move o1 <- o2
11 41 01 lxi d, 141h ; Load register pair with immediate data
21 69 00 lxi h, 69h ; Load register pair with immediate data
19 dad d ; Add register pair to HL
76 hlt ; Halt
È necessario smontarlo.
Cioè, convertire i codici hex op ai loro mnemonica.
Ecco un esempio riferimento .
Si può vedere da questo che 3E è "MVI A, D8", in modo che assomiglia 3E 02 sta mettendo il valore 02 per registro A.
Una volta decodificato il mnemonici, è possibile cercare ciò che realmente significa e capire il programma.
abbastanza facile da fare a mano.
spoiler completo
0000h: 3e02 mvi a, 2h ; A = 20002h: 4f mov c, a ; C = 20003h: c604 adi 4h ; A = 60005h: 47 mov b, a ; B = 60006h: 114101 lxi d, 141h ; DE = 0141h0009h: 216900 lxi h, 069h ; HL = 69h000ch: 19 dad d ; HL = 69h + 141h = 1aah000dh: 76 hltA = 6, B = 6, C = 2, D = 1, E = 41h, H = 1, L = 0aah
Un 8080 disassembler linea qui .
Un set di riferimento 8080 di istruzioni in linea qui .
Non è necessario per farlo funzionare - solo bisogno di tradurlo. Una tabella di 8080 codici operativi come questo , a 10 minuti di lavoro e si dovrà smontato il codice. È quindi possibile simulare mentalmente a lavorare fuori la risposta.
A giudicare da questo, la soluzione migliore sarebbe quella di fare una ricerca per un 8080 emulatore e lanciarlo contro l'emulatore, e ottenere la risposta da esso.
Spero che questo aiuti, I migliori saluti, Tom.
3E 02 ;mvi a, 02h -- load A with 02h
4F ;mov c,a -- move A into C (A remains 02h)
C6 04 ;adi 04h -- a = a + 04h (A now contains 06h)
47 ;mov b,a -- BC pair now contains 0602h
11 41 01 ;lxi d, 0414h -- DE now contains 0141h
21 69 00 ;lxi h, 0069h -- HL now contains 0069h
19 ;dad d -- HL = HL + DE
76 ;hlt -- halt processing