[an error occurred while processing this directive]
|
А вообще, вот пример:
;********************************************************
;* *
;* (c) Copyright Êíÿçåâ Â.À. 2004 *
;* *
;* *
;********************************************************
;
; File: rand.s90
;
; 08-Sep-05 BK Initial edit
; 28-Sep-05 BK Last update
;
;
; ** ENTRY$ -- âõîä â ïðîöåäóðó (ôóíêöèþ)
;
; Îïèñàíèå:
; Ìàêðîêîìàíäà îïðåäåëÿåò name êàê ãëîáàëüíóþ òî÷êó âõîäà â ïðîöåäóðó
; èëè ôóíêöèþ.
;
; Âûçîâ: ENTRY$ name
;
ENTRY$ macro name
public name
name:
endmrseg CODE ; Code segment
;
;
ENTRY$ Rand
ldi r30, LOW(_rand) ; Point at random number
ldi r31, HIGH(_rand) ;
tst r16 ; See the seed value
breq _1 ; Branch if zeroclr r17 ; Initialize the generator
clr r18 ; and return initial value
clr r19 ;
rjmp _2 ;_1: ; Calculate new random number
ld r16, Z ; Load the previous value into registers
ldd r17, Z+1 ;
ldd r18, Z+2 ;
ldd r19, Z+3 ;
eor r16, r19 ; Calculate feedback bit
bst r16, 6 ;
eor r16, r19 ;
lsl r16 ; Shift the number left
rol r17 ;
rol r18 ;
rol r19 ;
andi r19, ~(1<<7) ; Clear high (sign) bit
bld r16, 0 ; Insert feedback bit in the new value
_2: st Z, r16 ; Save the number
std Z+1, r17 ;
std Z+2, r18 ;
std Z+3, r19 ;
retrseg NEAR_Z ; Data segment
_rand: ; Random number
ds 4 ;end
E-mail: info@telesys.ru