forum speccy.pl

ZX Spectrum => PROGRAMOWANIE => Wątek zaczęty przez: KWF w 2018.10.20, 19:54:58

Tytuł: Deasemblacja - dylemat nowicjusza
Wiadomość wysłana przez: KWF w 2018.10.20, 19:54:58
Mam dwie linijki kodu maszynowego w liczbach dziesiętnych:
- p0: 175, 237, 79, 253, 233,
- p1: 62, 128, 237, 79, 253, 233,

Przepisałem je sobie w systemie szesnastkowym:
- p0: AF ED 4F FD E9
- p1: 3E 80 ED 4F FD E9

Na moje oko wynika, że:
- p0:
AF     xor a
ED 4F  ld r,a
FD E9  jp (iy)

- p1:
3E 80  ld a,0x80
ED 4F  ld r,a
FD E9  jp (iy)

Jeśli mylę się, proszę poprawcie mnie.
Tytuł: Odp: Deasemblacja - dylemat nowicjusza
Wiadomość wysłana przez: steev w 2018.10.21, 01:49:15
Nie mylisz się :)
;
;  DZ80 V3.3.6 Z80 Disassembly of code.bin
;  10/21/18 1:47
;
        org     0
;
        xor     a               ; 0000  af              /
        ld      r,a             ; 0001  ed 4f           mO
        jp      (iy)            ; 0003  fd e9           }i
;
        ld      a,80h           ; 0005  3e 80           >.
        ld      r,a             ; 0007  ed 4f           mO
        jp      (iy)            ; 0009  fd e9           }i
Tytuł: Odp: Deasemblacja - dylemat nowicjusza
Wiadomość wysłana przez: KWF w 2018.10.21, 08:46:18
Podziękował ślicznie i "pomagas" poszedł.
Tytuł: Odp: Deasemblacja - dylemat nowicjusza
Wiadomość wysłana przez: dr.df0 w 2019.02.20, 23:56:21
BTW, jest taka ciekawa biblioteka w Perlu, której użycie po zainstalowaniu może wyglądać tak:

use CPU::Z80::Disassembler;

@opcodes = qw{ 175 237 79 253 233 };

$dis = CPU::Z80::Disassembler->new;
$addr = 0;
for $c (@opcodes) {
    $dis->memory->poke($addr++, $c);
}
$dis->write_dump;

Uruchomienie powyższego kodu daje taki wynik:

$ perl t.pl
0000 AF         xor a
0001 ED4F       ld r,a
0003 FDE9       jp (iy)
Tytuł: Odp: Deasemblacja - dylemat nowicjusza
Wiadomość wysłana przez: steev w 2019.02.21, 01:27:54
Muszę zapamiętać :)