⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dv336.asm

📁 基于VC33的关于铁路信号发送和处理的程序
💻 ASM
📖 第 1 页 / 共 5 页
字号:
        ldi     5117,rc
        rptb    jrule2
jrule2: ldi     *ar0++,r0
||      sti     r0,*ar1++
        sti     r0,*ar1
        rets
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;sub8: jddata
jddata: ldi     0,r0
        ldi     @JLJS1,ar0
        ldi     45,rc
        rptb    jljs1c
jljs1c: sti     r0,*ar0++

        ldi     @JDATAD,ar2
        ldi     ar2,ar6
        addi    7078,ar6               ;7168
        ldi     1,r5
        ldi     2,r6
        ldi     0,r1
        ldi     0,ar0
jdlh00: ldi     *ar2++,r0
	cmpi    ar6,ar2
        bge     jdlhz
        cmpi    0,r0
        ble     jdlh01
	
	cmpi    1,r6
        beq     jdlh00
        ldi     1,r6
        cmpi    JMIN0,r1
        bgt     jdlh03
	cmpi    0,ar0
        ldieq   0,r1
        beq     jdlh00
        ldi     r1,rc
	subi    1,rc
        rptb    jdlh02
jdlh02: sti     r5,*ar0++
jdlh03: ldi     0,r1
        ldi     0,ar0
        br      jdlh00

jdlh01: addi    1,r1
	cmpi    0,r6
        beq     jdlh00

        ldi     0,r6
        ldi     ar2,ar0
	subi    1,ar0
        br      jdlh00

jdlhz:  rets
;SUB1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;subB: jdata
jdata:  ldi     0,r0
        ldi     @J0,ar0
        sti     r0,*ar0
        ldi     @J1,ar0
        sti     r0,*ar0

        ldi     @JDATAD,ar2
        ldi     ar2,ar6
        addi    7078,ar6               ;7168
jdloop: ldi     *ar2++,r2
	cmpi    ar6,ar2     
        bge     jdend
        cmpi    0,r2                 ;M(x) & data comp.
        ble     jda2     
	
        ldi     @J0,ar1 
        ldi     *ar1,r1
	cmpi    0,r1
        bz      jda1
        ldi     0,r0
	sti     r0,*ar1                

        ldi     @JLJS1,ar0
        ldi     *ar0++,r3
	cmpi    0,r3
        bne     jda14
        ldi     *ar0,r3
	addi    r1,r3
	sti     r3,*ar0
        br      jda1

jda14:  ldi     @JLJS1,ar0
        addi    47,ar0
        ldi     47,rc
        rptb    jda15                     
        ldi     *ar0++(2),r3
jda15:  sti     r3,*ar0--(3)
	nop     *ar0++
        ldi     0,r0
	sti     r0,*ar0++              ; save label (0=low)
	sti     r1,*ar0

jda1:   ldi     @J1,ar0
        ldi     *ar0,r1
	addi    1,r1
        sti     r1,*ar0
        br      jdloop

jda2:   ldi     @J1,ar0 
        ldi     *ar0,r1
	cmpi    0,r1
        bz      jda21
        ldi     0,r0
	sti     r0,*ar0
	
        cmpi    JMIN1,r1               ;now signal is "0" r1="1" number
        bgt     jda27
        ldi     @JLJS1,ar0             
        ldi     *ar0++,r3
	cmpi    0,r3
        bne     jda22
        ldi     *ar0++(2),r3
        cmpi    JMIN0,r3
        bgt     jda22
	addi    *ar0,r3
	addi    r3,r1

        ldi     @JLJS1,ar0
        ldi     1,r3
	sti     r3,*ar0++
	sti     r1,*ar0++
        ldi     48,rc
        ldi     ar0,ar1
	addi    2,ar1
        rptb    jda23
        ldi     *ar1++,r3
jda23:  sti     r3,*ar0++

jda22:  ldi     @JLJS1,ar0
	nop     *ar0++ 
        ldi     *ar0,r3
	addi    r1,r3
	sti     r3,*ar0
        br      jda21

jda27:  ldi     @JLJS1,ar0             
        ldi     *ar0++,r3
	cmpi    1,r3
        bne     jda28
        ldi     *ar0,r3
	addi    r1,r3
	sti     r3,*ar0
        br      jda21

jda28:  ldi     @JLJS1,ar0
        addi    47,ar0
        ldi     47,rc
        rptb    jda29                     
        ldi     *ar0++(2),r3
jda29:  sti     r3,*ar0--(3)
	nop     *ar0++
        ldi     1,r0
	sti     r0,*ar0++              ; save label (0=low)
	sti     r1,*ar0                ; save number 

jda21:  ldi     @J0,ar0
        ldi     *ar0,r1
	addi    1,r1
        sti     r1,*ar0
        br      jdloop

jdend:  rets
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;subF: jamplh
jamplh:
        ldf     JLIMI0,r3
        ldf     JLIMI1,r4

        ldi     0,r6
        ldi     @JAMPLH,ar2
        ldi     @JSUM,ar0
        ldf     *ar0,r5
        cmpf    r3,r5
        ldige   1,r6
        cmpf    r4,r5
        ldige   2,r6
        sti     r6,*ar2
        rets
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;subC: jljsf
jljsf:
        ldi     @GMODE,ar1
        ldi     *ar1,r6
        ldi     @JRESULT,ar1           ;use:r0-r3,ar0,ar1  ;SMODE:25-3,50-4,75-5
        ldi     @JLFLAG,ar2            ;use:SMODE JLJSS JRESULT,JF0ERR
        ldi     0,r3
        ldi     0,r4
        ldi     2,r7

jljsf0: ldi     *ar1++,r0
        ldi     25,r1
        subi3   r1,r0,r2
	absi    r2
        cmpi    J_F0ERR0,r2
        bgt     jljsf1
        ldi     r0,r3
        cmpi    3,r6
        beq     jljsfg

jljsf1: subi    1,r7
        cmpi    0,r7
        bgt     jljsf0

jljsfg: ldi     @JLFLAG,ar2            ;use:SMODE JLJSS JRESULT,J_F0ERR
        sti     r3,*ar2++

        cmpi    0,r3
        bne     jljsg1
        ldi     @JDATAS0,ar1
        ldi     5000,rc
        rptb    jljsg0
jljsg0: sti     r3,*ar1++

jljsg1: rets
;SUB1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;subG: jljs
jljs:   call    jtest

        ldi     @JAMPLH,ar2
        ldi     *ar2,r0
        cmpi    0,r0
        ble     jampl
        ldi     @PRLAMP,ar0
        ldi     *ar0,r1
        ldi     @JSORT,ar0
        ldi     *ar0,r2
        ldi     2,r3
        cmpi    r1,r2
        ldieq   1,r3
        cmpi    r3,r0
        blt     jampl

        cmpi    55h,r7
        bne     jampl

        ldi     0a0h,r2
        ldi     @RAX,ar0
        sti     r2,*ar0
        ldi     3,r0
        ldi     @SMODE,ar0
	sti     r0,*ar0
        ldi     55h,r7
        br      joquit
	
jampl:  ldi     0aah,r7
joquit: rets
;SUB2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;subJ: jtest
jtest:  ldi     @JTERR,ar0             ;TERR  CYLES
        ldi     1000,r0
        sti     r0,*ar0                ;TERR=1000
        ldi     @JTERR1,ar0
        ldi     1000,r0
        sti     r0,*ar0                ;TERR1 SINGLE

        ldi     0,r0
        ldi     @JCYSUM,ar0
        sti     r0,*ar0
        ldi     @JCYSUMZ,ar0
        sti     r0,*ar0
        ldi     @JSORT,ar0
        sti     r0,*ar0                ;JSORT=0
        ldi     @JLJS1,r0
        ldi     @JLJS1S,ar0
        sti     r0,*ar0

        ldi     @DCOD3,ar1
;--------------------------------------------------------------------
        ldi     0,ir0
jt1:    addi    1,ir0
        ldi     12,r6                  ;r6=12
        ldi     @SAVE_AR1,ar2          ;;;;;save ar1
        sti     ar1,*ar2
        ldi     ar1,ar2                ;ar2=ar1

        ldi     2,ar6
        call    jcode                  ;may use:r0-r5,r7,ar0-1,ar3-7

        cmpi    J_ERR,r7              ;r7 is circle err
        bgt     jt10

        ldi     @JTERR1,ar0
        ldi     *ar0,r0
        cmpi    r0,r5                  ;r5 is single code err
        bgt     jt10                   ;if r5>JTERR1 then goto jt10

        sti     r5,*ar0                ;else JTERR=r7 JTERR1=r5
        ldi     @JTERR,ar0
        sti     r7,*ar0
        ldi     @JSORT,ar0
        sti     ir0,*ar0               ;JSORT=ir0
                          ;----------------------------position
        ldi     @SAVE_AR5,ar0
        ldi     *ar0,r0
        subi    3,r0                   ;ar6=2--1 if r0=1 then move 1
        absi    r0                     ;         if r0=0 then move 0
        ldi     @JLOC5,ar0
        sti     r0,*ar0
        ldi     @SAVE_AR6,ar0
        ldi     *ar0,r0
        subi    2,r0                   ;ar6=2--1 if r0=1 then move 1
        absi    r0                     ;         if r0=0 then move 0
        ldi     @JLOC6,ar0
        sti     r0,*ar0

        ldi     @JCYSUM,ar0
        ldi     *ar0,r0
        ldi     @JCYSUMZ,ar0
        sti     r0,*ar0
        ldi     @JLJS1S,ar0
        ldi     *ar0,r0
        ldi     @JLJS1SZ,ar0
        sti     r0,*ar0

jt10:   ldi     @SAVE_AR1,ar2          ;;;;;load ar1
        ldi     *ar2,ar1
        addi    J_3CODE,ar1

tj11:   cmpi    J_L,ir0              ;10 groups 3 words signal
        bge     jt2                  ;jtout
        br      jt1

jt2:    ldi     @DCOD2,ar1

jt20:   addi    1,ir0
        ldi     8,r6
        ldi     @SAVE_AR1,ar2         ;;;;;save ar1
        sti     ar1,*ar2
        ldi     ar1,ar2               ;ar2=ar1

        ldi     1,ar6
        call    jcode

        cmpi    J_ERR,r7
        bgt     jt21                 ;

        ldi     @JTERR1,ar0
        ldi     *ar0,r0
        cmpi    r0,r5
        bgt     jt21                 ;if r7>JTERR then goto sjt10

        sti     r5,*ar0               ;else JTERR=r7
        ldi     @JTERR,ar0
        sti     r7,*ar0
        ldi     @JSORT,ar0
        sti     ir0,*ar0              ;JSORT=ir0
                          ;----------------------------locate
        ldi     @SAVE_AR5,ar0
        ldi     *ar0,r0
        subi    2,r0                   ;ar6=2--1 if r0=1 then move 1
        absi    r0                     ;         if r0=0 then move 0
        ldi     @JLOC5,ar0
        sti     r0,*ar0
        ldi     0,r0
        ldi     @JLOC6,ar0
        sti     r0,*ar0

        ldi     @JCYSUM,ar0
        ldi     *ar0,r0
        ldi     @JCYSUMZ,ar0
        sti     r0,*ar0
        ldi     @JLJS1S,ar0
        ldi     *ar0,r0
        ldi     @JLJS1SZ,ar0
        sti     r0,*ar0
                          ;----------------------------------
jt21:
        ldi     @SAVE_AR1,ar2         ;;;;;load ar1
        ldi     *ar2,ar1
        addi    J_2CODE,ar1

jt22:   cmpi    J_LUHU,ir0
        blt     jt20
;------------------------------------------------
        ldi     0aah,r7
        ldi     @JTERR1,ar0
        ldi     *ar0,r0                ;single code error
        ldi     @JTERR,ar0
        ldi     *ar0,r1                ;cycle error

        cmpi    J_ERR,r1
        bgt     jquits
        ldi     55H,r7
        br      jquits
        ldi     55h,r7
jquits: rets
;SUB3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;subK: jcode
jcode:                                 ;may use:r0-r5,r7,ar0-1,ar3-7
        ldi     @SAVE_AR5,ar3          ;ar2 is DCODE addr
        ldi     2,r0
        sti     r0,*ar3                ;r2=single number
        ldi     @SAVE_AR6,ar3          ;ar2 is DCODE addr
        sti     ar6,*ar3               ;r2=single number

        ldi     500,r7
        ldi     500,r5

        ldi     @SAVE_R5,ar3            ;r6=dbale  number
        sti     r5,*ar3
        ldi     @SAVE_R6,ar3            ;r6=dbale  number
        sti     r6,*ar3
        ldi     @SAVE_AR2,ar3           ;ar2 is DCODE addr
        subi    1,ar2
        sti     ar2,*ar3                ;r2=single number

        ldi     0,ar2
        ldi     @JLJS1,ar0
        ldi     *ar0,r0
        cmpi    1,r0
        ldieq   2,ar2
        addi    ar2,ar0
        subi    2,ar0
        ldi     @SAVE_AR0,ar3
        sti     ar0,*ar3

jcode0:
        ldi     @SAVE_AR0,ar3
        ldi     *ar3,ar0
        addi    2,ar0
        sti     ar0,*ar3
        subi    4,ar0

        ldi     @SAVE_AR2,ar3
        ldi     *ar3,ar2
        addi    1,ar2
        sti     ar2,*ar3

        ldi     @SAVE_R6,ar3
        ldi     *ar3,ar7
        ldi     3,ar5                  ;chang the data,must chang SAVE_AR5!!!
        cmpi    11,ar7
        ldilt   2,ar5

jcode1: addi    4,ar0
        ldi     @SAVE_R6,ar3
        ldi     *ar3,ar7
        ldi     ar2,ar4
        ldi     ar0,ar3
        ldi     0,r4
        ldi     0,r2

        ldi     0,ir1
;--------------------------------------------
jcode2: ldi     *ar3++,r3              ;input:ar0 is jcode first addr.
        ldi     *ar3++,r5
        ldi     *ar4++,r0              ;ar2 is standrd code addr.

        addi    r5,ir1

        subi    r0,r5
        addi    r5,r4                  ;sum up wu_cha
        absi    r5
        cmpi    r2,r5                  ;smallest wu_cha
        ldigt   r5,r2                  ;if r7>r4 then r7=r4

        subi    1,ar7                  ;      r2 is 1 cyle length
        cmpi    0,ar7                  ;      r6 is 2 cyle length
        bgt     jcode2                 ;loop 
   ;----------------------------------
        absi    r4

        ldi     @SAVE_R5,ar7
        ldi     *ar7,r5
        cmpi    r2,r5                  ;smallest wu_cha
        ble     jcode3

        ldi     r2,r5                  ;if r7>r4 then r7=r4
        ldi     r4,r7
        ldi     @JCYSUM,ar7
        sti     ir1,*ar7
        ldi     @JLJS1S,ar7
        sti     ar0,*ar7

jcode3: ldi     @SAVE_R5,ar7
        sti     r5,*ar7
        cmpi    r2,r5                  ;locate jljs1 position
        bne     jcodet
        ldi     @SAVE_AR5,ar7
        sti     ar5,*ar7
        ldi     @SAVE_AR6,ar7
        sti     ar6,*ar7
jcodet:
	subi    1,ar5
	cmpi    0,ar5
        bgt     jcode1                ;loop

        subi    1,ar6
	cmpi    0,ar6
        bgt     jcode0                ;loop
        ldi     @SAVE_R5,ar6
        ldi     *ar6,r5

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -