[an error occurred while processing this directive]
|
кто силен в асме 8051 помогите плиз! кусочек считает контрольные суммы - подскажите откуда он данные берет и откуда КС с которой сравнивает на правильность.
Спасибо!
Вот первый подсчет:
;============================================
OLLKIS_:
mov r1,#007h
mov r5,#00h
OLK_:
inc r0
mov a,@r0
lcall KISA_
djnz r1,OLK_ ; если r1-- не ноль - перейти на OLK_
; DJNZ decrements the location indicated by 1,
; and branches to the address indicated by the
; second operand if the resulting value is not zero.
;=============================
mov a,r5
mov dpl,a
ret
; The Data Pointer (DPTR) consists of a high byte (DPH) and
; a low byte (DPL). Its function is to hold a 16-bit address.
; It may be manipulated as a 16-bit register or as two
; independent 8-bit registers.
;=============================
KISA_: mov r3,#008h
mov r4,a
KIS1:
xrl a,r5 ; XRL - Logical Exclusive-OR for byte variables
rrc a ; RRC - сдвинуть Ак в право. Carry flag поместить в бит_7
; а бит_0 уйдет в Carry flag
mov r6,a
mov a,r5
jnb PSW.7,KIS0 ; символ CY бит PSW.7 - перенос Carry flag
xrl a,#018h
KIS0:
rrc a
mov r5,a
mov a,r4
rrc a
mov r4,a
djnz r3,KIS1 ; если r3-- не ноль - перейти на KIS1
ret
;
; END OLLKIS
;============================================
и второй кусок тоже похож на подсчет контрольной суммы
;---------------------------------------------------
SUMMA_:
mov r0,#033h
SUM_C: mov a,@r0
anl a,#00fh
cjne a,#009h,SUM_M
mov a,@r0
anl a,#0f0h
mov @r0,a
swap a
cjne a,#009h,SUM_S
mov @r0,#00h
dec r0
mov a,r0
cjne a,#02fh,SUM_C
ret
SUM_S: inc a
swap a
mov @r0,a
ret
SUM_M: inc @r0
ret
E-mail: info@telesys.ru