Autor Wątek: Problem ze zmienną ZXSpin-Asembler  (Przeczytany 9743 razy)

trojacek

  • *****
  • Wiadomości: 6831
  • Miejsce pobytu:
    Warszawa
Odp: Problem ze zmienną ZXSpin-Asembler
« Odpowiedź #15 dnia: 2016.11.16, 12:42:55 »
Ja to wszystko rozumiem.
Tylko nie mogę pojąć dlaczego
mogę zrobić tak
ld a,(zmienna)
a nie mogę zrobić
ld e,(zmienna)

Trochę jest to zaskakujące.

Moim zdaniem nie jest zaskakujące. Rejestr A to tzw. akumulator - rejestr wyróżniony. Oferuje on więcej operacji na swojej zawartości, niż inne rejestry. Jest to konstrukcyjna zaszłość jeszcze z epoki kalkulatorów, która spokojnie przetrwała burzliwy rozwój mikroprocesorów, począwszy od Intel 4004, 4040, 8008, potem 8080 i dochodzimy do Z80.

Cytuj
Natomiast definiowanie zmiennych (etykiet):
zmienna db wartość
nie określa typu czy jest to 8-bit czy 16-bit, dlatego występuje błąd "value out of range".
Przykładem może być zmienna kolor (8-bit) a zmienna pocz (16-bit).

Nie wiem jak dziś, kiedyś w assemblerze było rozróżnienie na DB (8-bit) i DW (16-bit), odpowiednio "Declare Byte" i "Declare Word".
Być może nowsze assemblery rozpoznają większe wartości/łańcuchy po "DB" i rezerwują większą liczbę bajtów, nie wiem.

Cytuj
Prawdopodobnie akumulator obcina wartość do 8-bit.
Z moich obserwacji.

Skoro akumulator jest 8-bitowy, to nie może robić inaczej - nie przechowa więcej bitów ;)
« Ostatnia zmiana: 2016.11.16, 12:54:30 wysłana przez trojacek »

steev

  • *****
  • Wiadomości: 1362
  • Miejsce pobytu:
    inode 42
Odp: Problem ze zmienną ZXSpin-Asembler
« Odpowiedź #16 dnia: 2016.11.16, 13:00:33 »
Nie wiem jak dziś, kiedyś w assemblerze było rozróżnienie na DB (8-bit) i DW (16-bit), odpowiednio "Declare Byte" i "Declare Word".
Być może nowsze assemblery rozpoznają większe wartości/łańcuchy po "DB" i rezerwują większą liczbę bajtów, nie wiem.
Myślę, że zachowanie jest tutaj nieokreślone i zależne od widzimisia twórcy narzędzia.
Np. asembler z sdcc zapisuje wtedy jedynie młodsze bajty:
                              1 .module test
                              2 .optsdcc -mz80
                              3 .area DATA
                              4
   0000 01 02 03 04 05 06     5 bajty:  .db     1,2,3,4,5,6,0x1122,0x3344,0x5566
        22 44 66
   0009 07 00 08 00 09 00     6 slowa:  .dw     7,8,9,0xa,0xb,0xc,0x7788,0x99aa,0xbbcc
        0A 00 0B 00 0C 00
        88 77 AA 99 CC BB
Machines should work. People should think.

trojacek

  • *****
  • Wiadomości: 6831
  • Miejsce pobytu:
    Warszawa
Odp: Problem ze zmienną ZXSpin-Asembler
« Odpowiedź #17 dnia: 2016.11.16, 13:26:07 »
O, i ma to logiczny sens. Każdy argument DB powinien być 8-bitowy, ale może być tych argumentów więcej (rozdzielonych przecinkami) - ale wszystkie pozostają 8-bitowe, więc jak coś "wystaje" poza 8 bitów, jest ucinane.

gregoryi

  • ****
  • Wiadomości: 288
  • Miejsce pobytu:
    Opole
Odp: Problem ze zmienną ZXSpin-Asembler
« Odpowiedź #18 dnia: 2016.11.16, 21:40:52 »
Obiecany pliczek z flagami.
ZX Spectrum 16, ZX Spectrum 48, ZX Spectrum 128 +2 Grey, ZX Spectrum 128 +3, Amstrad 6128, Commodore 64C, Amiga 600, Klony - Harlequin 48 Rev G, Harlequin 128 Rev 2D, Just Speecy 128, ZX Nuvo 128

Tygrys

  • Administrator
  • *****
  • Wiadomości: 4537
  • Miejsce pobytu:
    Warszawa
  • mistrz ceremonii
Odp: Problem ze zmienną ZXSpin-Asembler
« Odpowiedź #19 dnia: 2016.11.19, 18:11:40 »
Ciekawy program ;-)