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:
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 |