ASEMBLER
Przykłady
256B
FFH
00H
80H
40H
20H
;kopiowanie w wewnętrznej pamięci RAM
AD1 EQU 20H
AD2 EQU 40H
COUNTER EQU 5
MOV R0,#AD1
MOV R1,#AD2
MOV R2,#COUNTER
LOOP:
MOV A,@R0
MOV @R1,A
INC R0
INC R1
DJNZ R2,LOOP
END
DA
– poprawka dziesiętna po dodawaniu, koryguje
zawartość akumulatora, będącą wynikiem dodawania
dwóch zmiennych, dając w wyniku bajt zawierający dwie
cyfry dziesiętne. Do dodawania przed wykonaniem
poprawki może być wykorzystana dowolna z instrukcji
ADD lub ADDC.
Uwaga: Operacja poprawki dziesiętnej nie wykonuje zwykłego przekształcenia liczby szesnastkowej na postać BCD, nie ma też
zastosowania do operacji inkrementacji, ani odejmowania liczb dziesiętnych
Jeżeli (A
3-0
> 9) lub (AC = 1) to A
3-0
:=A
3-0
+ 6
Jeżeli (A
7-4
> 9) lub (CY = 1) to A
7-4
:=A
7-4
+ 6
; sumowanie 2 liczb w kodzie BCD
MOV R1,#20h
MOV R2,#2Bh
MOV A,R1
ADDC A,R2
DA A
END
FFH
00H
FFFFH
0000H
4000H
64K
256B
80H
; kopiowanie bloku pamięci (50B) do zewnętrznej pamięci RAM
MOV R1,#50
MOV DPTR,#4000H
MOV R0,#80H
LOOP:
MOV A,@R0
MOVX @DPTR,A
INC R0
INC DPTR
DJNZ R1,LOOP
END
R1
R0
R2
R3
+
R4
R5
; Sumowanie liczb 16 bitowych
MOV A,R0
ADD A,R3
MOV R5,A
MOV A,R1
ADDC A,R2
MOV R4,A
END
R1
R0
R2
R3
R3*R0
R3*R1
R2*R0
R2*R1
x
R5
R4
R7
R6
+
; Mnożenie liczb 16 bitowych
MOV A,R0
MOV B,R3
MUL AB
MOV R4,A
MOV R5,B
MOV A,R3
MOV B,R1
MUL AB
ADD A,R5
MOV R5,A
MOV A,B
ADDC A,R6
MOV R6,A
CLR A
ADDC A,R7
MOV R7,A
MOV A,R0
MOV B,R2
MUL AB
...
...
...
ADD A,R5
MOV R5,A
MOV A,B
ADDC A,R6
MOV R6,A
CLR A
ADDC A,R7
MOV R7,A
MOV A,R2
MOV B,R1
MUL AB
ADD A,R6
MOV R6,A
MOV A,B
ADDC A,R7
MOV R7,A
END