Rozkaz SLL: Różnice pomiędzy wersjami

Z ZX Spectrum Wiki
(Utworzono nową stronę "<i>Nieudokumentowany</i>")
 
(Adresowanie indeksowane z zapisaniem kopii wyniku do rejestru)
 
(Nie pokazano 11 wersji utworzonych przez jednego użytkownika)
Linia 1: Linia 1:
<i>Nieudokumentowany</i>
+
<i>[[Nieudokumentowane rozkazy|Nieudokumentowany]]</i>
 +
<p>Przesunięcie arytmetyczne w lewo daje taki sam wynik jak logiczne, więc teoretycznie nie ma rozkazu SLL, ponieważ jest zbędny.<br>
 +
Jednak w oryginalnych mikroprocesorach Z80 firmy Zilog wykonanie rozkazu o kodzie, w którym powinien się znaleźć SLL daje wynik jak poniżej.</p>
 +
<i><b>S</b>hift <b>L</b>eft <b>L</b>ogic with 1 insertion</i> - przesunięcie logiczne w lewo z wpisaniem 1 do bitu 0
 +
{|cellpadding="0"
 +
|-
 +
|&nbsp;||&nbsp;||&nbsp;||&nbsp;||&nbsp;
 +
|-
 +
|style="border-style: solid; border-width: 1px 1px 1px 1px"|CY||◄||─||style="width: 70px; border-style: solid; border-width: 1px 1px 1px 1px; text-align:center"|r||style="text-align:right"|◄─ 1
 +
|-
 +
|&nbsp;||&nbsp;||style="text-align:right"|7||&nbsp;||style="text-align:left"|0||&nbsp;||&nbsp;
 +
|}
 +
== Adresowanie rejestrowe ==
 +
* SLL A
 +
* SLL B
 +
* SLL C
 +
* SLL D
 +
* SLL E
 +
* SLL H
 +
* SLL L
 +
{|class="wikitable"
 +
|-
 +
!scope="row" style="text-align:left"|Liczba bajtów
 +
|style="width: 16px;text-align:right"|2
 +
|-
 +
!scope="row" style="text-align:left"|Liczba taktów zegara
 +
|style="width: 16px;text-align:right"|8
 +
|}
 +
{|class="wikitable"
 +
|-
 +
!scope="row" colspan=6 style="text-align:center"|Znaczniki
 +
|-
 +
!scope="col" style="width: 16px"|C
 +
!scope="col" style="width: 16px"|Z
 +
!scope="col" style="width: 16px"|PV
 +
!scope="col" style="width: 16px"|S
 +
!scope="col" style="width: 16px"|N
 +
!scope="col" style="width: 16px"|H
 +
|-
 +
|style="text-align:center"|↕
 +
|style="text-align:center"|↕
 +
|style="text-align:center"|P
 +
|style="text-align:center"|↕
 +
|style="text-align:center"|0
 +
|style="text-align:center"|0
 +
|}
 +
== Adresowanie pośrednie ==
 +
* SLL (HL)
 +
{|class="wikitable"
 +
|-
 +
!scope="row" style="text-align:left"|Liczba bajtów
 +
|style="width: 16px;text-align:right"|2
 +
|-
 +
!scope="row" style="text-align:left"|Liczba taktów zegara
 +
|style="width: 16px;text-align:right"|15
 +
|}
 +
{|class="wikitable"
 +
|-
 +
!scope="row" colspan=6 style="text-align:center"|Znaczniki
 +
|-
 +
!scope="col" style="width: 16px"|C
 +
!scope="col" style="width: 16px"|Z
 +
!scope="col" style="width: 16px"|PV
 +
!scope="col" style="width: 16px"|S
 +
!scope="col" style="width: 16px"|N
 +
!scope="col" style="width: 16px"|H
 +
|-
 +
|style="text-align:center"|↕
 +
|style="text-align:center"|↕
 +
|style="text-align:center"|P
 +
|style="text-align:center"|↕
 +
|style="text-align:center"|0
 +
|style="text-align:center"|0
 +
|}
 +
== Adresowanie indeksowane ==
 +
* SLL (IX+d)
 +
* SLL (IY+d)
 +
{|class="wikitable"
 +
|-
 +
!scope="row" style="text-align:left"|Liczba bajtów
 +
|style="width: 16px;text-align:right"|4
 +
|-
 +
!scope="row" style="text-align:left"|Liczba taktów zegara
 +
|style="width: 16px;text-align:right"|23
 +
|}
 +
{|class="wikitable"
 +
|-
 +
!scope="row" colspan=6 style="text-align:center"|Znaczniki
 +
|-
 +
!scope="col" style="width: 16px"|C
 +
!scope="col" style="width: 16px"|Z
 +
!scope="col" style="width: 16px"|PV
 +
!scope="col" style="width: 16px"|S
 +
!scope="col" style="width: 16px"|N
 +
!scope="col" style="width: 16px"|H
 +
|-
 +
|style="text-align:center"|↕
 +
|style="text-align:center"|↕
 +
|style="text-align:center"|P
 +
|style="text-align:center"|↕
 +
|style="text-align:center"|0
 +
|style="text-align:center"|0
 +
|}
 +
 
 +
== <i>Adresowanie indeksowane z zapisaniem kopii wyniku do rejestru</i> ==
 +
* SLL (IX+d),A
 +
* SLL (IX+d),B
 +
* SLL (IX+d),C
 +
* SLL (IX+d),D
 +
* SLL (IX+d),E
 +
* SLL (IX+d),H
 +
* SLL (IX+d),L
 +
* SLL (IY+d),A
 +
* SLL (IY+d),B
 +
* SLL (IY+d),C
 +
* SLL (IY+d),D
 +
* SLL (IY+d),E
 +
* SLL (IY+d),H
 +
* SLL (IY+d),L
 +
Kopia wyniku operacji zachowywana jest jednocześnie w rejestrze.
 +
{|class="wikitable"
 +
|-
 +
!scope="row" style="text-align:left"|Liczba bajtów
 +
|style="width: 16px;text-align:right"|4
 +
|-
 +
!scope="row" style="text-align:left"|Liczba taktów zegara
 +
|style="width: 16px;text-align:right"|23
 +
|}
 +
{|class="wikitable"
 +
|-
 +
!scope="row" colspan=6 style="text-align:center"|Znaczniki
 +
|-
 +
!scope="col" style="width: 16px"|C
 +
!scope="col" style="width: 16px"|Z
 +
!scope="col" style="width: 16px"|PV
 +
!scope="col" style="width: 16px"|S
 +
!scope="col" style="width: 16px"|N
 +
!scope="col" style="width: 16px"|H
 +
|-
 +
|style="text-align:center"|↕
 +
|style="text-align:center"|↕
 +
|style="text-align:center"|P
 +
|style="text-align:center"|↕
 +
|style="text-align:center"|0
 +
|style="text-align:center"|0
 +
|}
 +
<hr>
 +
* [[Lista rozkazów]]
 +
* [[Rejestry]]
 +
* [[Znaczniki]]
 +
* [[Mikroprocesor Z80]]
 +
[[Kategoria:Programowanie]][[Kategoria:Assembler]]

Aktualna wersja na dzień 14:22, 23 gru 2014

Nieudokumentowany

Przesunięcie arytmetyczne w lewo daje taki sam wynik jak logiczne, więc teoretycznie nie ma rozkazu SLL, ponieważ jest zbędny.
Jednak w oryginalnych mikroprocesorach Z80 firmy Zilog wykonanie rozkazu o kodzie, w którym powinien się znaleźć SLL daje wynik jak poniżej.

Shift Left Logic with 1 insertion - przesunięcie logiczne w lewo z wpisaniem 1 do bitu 0

         
CY r ◄─ 1
    7   0    

Adresowanie rejestrowe

  • SLL A
  • SLL B
  • SLL C
  • SLL D
  • SLL E
  • SLL H
  • SLL L
Liczba bajtów 2
Liczba taktów zegara 8
Znaczniki
C Z PV S N H
P 0 0

Adresowanie pośrednie

  • SLL (HL)
Liczba bajtów 2
Liczba taktów zegara 15
Znaczniki
C Z PV S N H
P 0 0

Adresowanie indeksowane

  • SLL (IX+d)
  • SLL (IY+d)
Liczba bajtów 4
Liczba taktów zegara 23
Znaczniki
C Z PV S N H
P 0 0

Adresowanie indeksowane z zapisaniem kopii wyniku do rejestru

  • SLL (IX+d),A
  • SLL (IX+d),B
  • SLL (IX+d),C
  • SLL (IX+d),D
  • SLL (IX+d),E
  • SLL (IX+d),H
  • SLL (IX+d),L
  • SLL (IY+d),A
  • SLL (IY+d),B
  • SLL (IY+d),C
  • SLL (IY+d),D
  • SLL (IY+d),E
  • SLL (IY+d),H
  • SLL (IY+d),L

Kopia wyniku operacji zachowywana jest jednocześnie w rejestrze.

Liczba bajtów 4
Liczba taktów zegara 23
Znaczniki
C Z PV S N H
P 0 0