eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.comp.programmingDo osób znających instrukcje procesora Z80Re: Do osób znających instrukcje procesora Z80
  • Data: 2011-06-19 18:50:40
    Temat: Re: Do osób znających instrukcje procesora Z80
    Od: Mariusz Kruk <M...@e...eu.org> szukaj wiadomości tego autora
    [ pokaż wszystkie nagłówki ]

    epsilon$ while read LINE; do echo \>"$LINE"; done < "Piotrek"
    >Załóżmy, że ograniczymy rozważania do operacji na rejestrach 8-bitowych. Moje
    >wątpliwości dotyczyły zachowania flag C (przeniesienia, ustawianej gdy nastąpi
    >przeniesienie z bitu 7, tzn. wynik nie zmieści się na 8 bitach) i H
    >(półprzeniesienia, ustawianej gdy dojdzie do przeniesienia z bitu 3 na 4).

    Niezależnie od tego, czy odejmowanie jest tłumaczone, czy nie,
    http://www.z80.info/z80code.htm twierdzi, że przy SUB:
    [...]
    C or carry flag 1 if answer <0 else 0
    Z or zero flag 1 if answer = 0 else 0
    P flag 1 if overflow in twos complement else 0
    S or sign flag 1 if 127<answer<256 else 0
    N flag 1
    H or half carry flag 1 if borrow from bit 4 else 0
    [...]
    A przy SBC:
    [...]
    C or carry flag 1 if <0 else 0
    Z or zero flag 1 if result = 0 else 0
    P flag 1 if TC >127 or <-128 else 0
    S or sign flag 1 if 127 < n <256 else 0
    N flag 1
    H or half carry flag 1 if borrow from bit 12 else 0
    [...]
    (w ostatniej linijce oczywisty błąd, powinno być "bit 4"; dalej jest
    wersja szesnastobitowa, w której powinno być o bicie dwunastym).

    >Rozpatrywane były następujące operacje:
    >
    >1) działanie 3 - 5 (w praktyce załadowanie pierwszej wartości do rejestru A i
    >wykonanie instrukcji SUB 5).
    >
    >Moim zdaniem nie dojdzie tu do półprzeniesienia, zdaniem mojego dyskutanta-tak.
    >Oto jak rozumowałem:
    >
    >3 - 5 to dla procesora de facto 3 + (-5), 3 to bitowo 00000011,
    >-5 to 11111011 (działamy w U2).
    >
    >Zapisując to jedno pod drugim i rachując pisemnie od prawej do lewej (od
    >najmłodszego bitu do najstarszego) i zakładając, że procesor liczy to tak
    >samo, dostaję kolejno:
    >
    >- na pozycji 0 sumę 1 + 1 -&gt; mamy przeniesienie z bitu 0 na 1
    >- na pozycji 1 sumę 1 + 1 + 1 (przeniesienie) -&gt; mamy przeniesienie z 1 na 2
    >- na pozycji 2 sumę 0 + 0 + 1 (przeniesienie) -&gt; brak przeniesienia z 2 na 3
    >
    >Ponieważ ostatnie działanie nie wygenerowało nowego przeniesienia, a dalej nie
    >mamy już sytuacji, w której sumowalibyśmy dwie jedynki, nie ma bata, żeby
    >wygenerowało nam się nowe przeniesienie, w szczególności przeniesienie z bitu
    >3 na 4. Zdaniem mojego dyskutanta jednak występuje. Gdzie tu błądzę?

    Najwyraźniej jednak nie ma zamiany na dodawanie, tylko jest od 00000011
    odjęcie 00000101. Wtedy jak najbardziej będziemy pożyczać od bitu
    trzeciego aż do przepełnienia.

    Reszta przypadków idzie analogicznie.

    >Zastanawiające jest to, że mój tok rozumowania we wszystkich przypadkach
    >prowadzi do stwierdzenia będącego negacją stanu faktycznego. Wygląda na to, że
    >nie myślę źle, tylko moje rozumowanie opiera się na jakiejś błędnej
    >przesłance.

    Czyżby jednak zamiana odejmowania na dodawanie nie była słusznym
    posunięciem?

    W każdym razie, http://www.z80.info/zip/z80cpu_um.pdf wcale nie mówi o
    zamianie odejmowania na dodawanie, a wręcz przeciwnie, pokazuje na
    przykład na stronie 78 odejmowanie i jego skutki dla sygnalizacji
    przepełnienia.

    --
    \------------------------/
    | K...@e...eu.org | http://www.nieruchomosci.pl/mieszkanie,38804171
    | http://epsilon.eu.org/ |
    /------------------------\

Podziel się

Poleć ten post znajomemu poleć

Wydrukuj ten post drukuj


Następne wpisy z tego wątku

Najnowsze wątki z tej grupy


Najnowsze wątki

Szukaj w grupach

Eksperci egospodarka.pl

1 1 1

Wpisz nazwę miasta, dla którego chcesz znaleźć jednostkę ZUS.

Wzory dokumentów

Bezpłatne wzory dokumentów i formularzy.
Wyszukaj i pobierz za darmo: