4 Instrukcje 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ęci RAM o adresie zawartym w rejestrze Rl:
Bcd_Asdi_l: .
MOV A,#30H ;A <= 30H
XCHD A.®R1 ;A3..o«(RD3..o
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:
y
Bcd Asai_N:
MOV |
R0,#Adr_BCD |
;R0 c= Adr.BCD, ;rejestr RO adresuje tablicę z liczbami w kodzie BCD |
MOV |
Rl,#Adr_ASCH |
;R1 <= Adr_ ASCII. ;rejestr Rl adresuje tablicę z liczbami w kodzie ASCII |
MOV |
R2,»N.BCD |
;R2 c= N_BCD, .rejestr R2 jest licznikiem liczby tłumaczonych bajtów |
MOV |
A,#30H |
;kodom BCD 0..9 odpowiadają kody ASCII ;w zakresie 30H..39H |
a: |
.początek powtórzenia fragmentu programu | |
0 1 U X |
A.6R0 |
^3..0 c=>.(r°)3..0' tłumaczenie mniej znaczących bitów |
MOV |
©Rl.A |
;(Rl)c= A, ;zapis przetłumaczonych mniej znaczących bitów |
XCH |
A.eRO |
;A co (RO) |
SWAP |
A |
/■A7..4 A3..0 |
XCH |
A,ORO |
;A o (RO) |
XCHD |
A.@R0 |
;a3..o »<R0l3..0 |
INC |
Rl |
;R1 c= Rl +1 |
MOV |
®R1.A |
(Rl) <= A ;zapis przetłumaczonych bardziej znaczących bitów |
INC |
RO |
;R0 c= RO + 1 |
INC |
Rl |
;R1 c= Rl ♦ 1 |
DJNZ |
R2.PU |
;R2 c= R2 -1, jeśli R2 r 0 to skok do etykiety Pla |
Mikrokontroler 8WCMI - oropramowanip
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<= 01101110B |
RL |
A |
;A c= 1101 1100B |
RL |
A |
;A <= 10111001B |
RLC A Rotate Accumulator Left through Carry
Działanie An+i c= An, n = 6..0
Ao«=C C c= A7
Adresowanie Mnemonik Struktura bajtów: Cykle Znacz-
maszynowe: nikt:
rejestrowe: RLC A
| 0 0 1 1 | 0 0 1 1
Opis działania:
Zawartość akumulatora przesuwana jest cyklicznie w lewo o jeden bit, bit A() 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:
0oczyn_2: | ||
CLR |
C |
,-C c= 0 |
MOV |
A.R7 |
;A R7, R7 zawiera mniej znaczący bajt |
RLC |
A |
.przesunięcie w lewo zawartości A, |
; Aq <= C. C <= A7, | ||
MOV |
R7,A |
;R7<= A |
MOV |
A,R6 |
;A <= R6. R6 zawiera bardziej znaczący bajt |