4. Instrukcję bajtowe) wymiany danych 37

Instrukcja XCHD stosowana jest do zamiany kodu BCD na inny kod, np na kod ASCII. Kodom BCD w zakresie 0..9 odpowiadają kody ASCII w zakresie 30H..39H. Program zamienia mniej znaczącą część liczby w kodzie BCD znajdującej się w komórce wewnętrznej pamięd RAM o adresie zawartym w rejestrze Rl:

Bcd_Asdi_l: .

MOV A,#30H    ;A c= 30H

XCHD A.®R1    ;A3..0«<R1>3..0

Tłumaczona liczba zapisana w kodzie BCD jest niszczona.


Tablica z liczbami zapisanymi w kodzie BCD ma adres początkowy Adr_BCD i zajmuje N_BCD bajtów, a tablica z liczbami zapisanymi w kodzie ASCII ma adres początkowy Adr_ASCII i zajmuje 2*N BCD bajtów. Program dokonuje zamiany kodów liczb z BCD na ASCII:

Bcd_Asdi_N:

MOV RO.#Adr_BCD

;R0 c= Adr.BCD,

MOV

Rl,#Adr_ASClI

;rejestr RO adresuje tablicę z liczbami w kodzie BCD ;Rl <= Adr_ASCn.

MOV

R2.#N_BCD

.rejestr Rl adresuje tablicę z liczbami w kodzie ASCII ;R2 cr N_BCD,

MOV

A.I30H

.rejestr R2 jest licznikiem liczby tłumaczonych bajtów ;kodom BCD 0..9 odpowiadają kody ASCII

PI a: XCHD

>

1

o

;w zakresie 30H..39H

;początek powtórzenia fragmentu programu

'A3..0C^.(R0>3..0'

MOV

6R1.A

tłumaczenie mniej znaczących bitów ;(Rl) c= A,

XCH

A.@RO

;zapis przetłumaczonych mniej znaczących bitów ;A co (RO)

SWAP

A

'"A7..4 « A3..0

XCH

A.ORO

;A 0 (RO)

XCHD

A.@RO

'A3..0 <=> tR0)3..0

INC

Rl

;R1 <= Rl +1

MOV

SRl.A

(Rl) c= A

INC

RO

;zapis przetłumaczonych bardziej znaczących bitów ;R0 c= RO + 1

INC

Rl

;Rl c= Rl + 1

DJNZ

R2.Pla

;R2 c= R2 -1, jeśli R2 r 0 to skok do etykiety Pla

Mikrokontroler 80(051 - procramowanif'

Przykład:

Zamiana czterech mniej znaczących bitów z czterema bardziej znaczącymi bitami akumulatora, A = 1001 101 IB:

R1_A:

RL

A

;A c= 0011 0111B

RL

A

;A<= 0110 1110B

RL

A

;A c= 1101 1100B

RL

A

;A <= 10111001B

RLC A    Rotate Accumulator Letł through Carry

Działanie:    An+i c= An, n = 6..0

Aq C C <= A7

Adresaunme:    Mnemonik:    Struktura bajtów:    Cykle    Znacz-

•    maszynowe:    iijJci:

rejestrowe:    RLC A    | 0 0 1    1 | 0 0    1 ~i~l 1 C. I*

Opis działania:

Zawartość akumulatora przesuwana jest cyklicznie w lewo o jeden bit, bit A(j przyjmuje wartość znacznika przeniesienia (C), a znacznik przeniesienia (C) wartość bitu A7. Sytuację tę przedstawia rysunek:

Przykład :

Mnożenie przez dwa 2-bajtowej liczby całkowitej bez znaku zawartej w rejestrach R6R7:

Doczyn_2:

CLR

C

,-C c= 0

MOV

A.R 7

;A <= R7, R7 zawiera mniej znaczący bajt

RLC

A

.przesunięcie w lewo zawartości A,

; A(j c= C. C ci Ay,

MOV

R7,A

;R7<= A

MOV

A.R6

;A <= R6. R6 zawiera bardziej znaczący baji