📄 vectors08.s
字号:
.module vectors08.c
.area data
_n::
.blkb 32
.area idata
.byte 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32
.byte 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32
.area data
_s1::
.blkb 1
.area idata
.byte 0
.area data
_t::
.blkb 1
.area idata
.byte 0
.area data
.area text
; m -> 2,X
_result::
tsx
clr *_i1
bra L5
L2:
clr *__r0
lda *_i1
sta *__r1
lsl *__r1
rol *__r0
lda *__r1
add #<_r
sta *__r1
lda *__r0
adc #>_r
sta *__r0
clra
ldhx *__r0
sta ,x
clra
sta 1,x
tsx
L3:
inc *_i1
L5:
; /*-----------------------------------------------------*
; *文件名:vectors08.c *
; *功 能:用于定义中断矢量表 *
; *-----------------------------------------------------*/
; /*[头文件]*/
; #include "GP32C.H"
; #include "KB.h"
; #include "SCI.h"
; #pragma interrupt_handler isrKBI
; int result(unsigned char m[]);
; extern void lcdshow(unsigned char *str);
; extern void LcdInit(void);
; extern void Lcd_Command(unsigned char cmd);
; unsigned char n[32]={" "};
; unsigned char m[32];
; unsigned char mn[32];
; unsigned char KB_valve,i,s2,x,t1,s1=0,t=0;
; int mm;
; unsigned char i1,i2,i3,i4,i41,i42,i5,i6,i7,i8,i9;
; unsigned char sign1[16],sign2[16];
; int r[16];
; int res;
; int result(unsigned char m[])
; {
; for(i1=0;i1<16;i1++)r[i1]=0;
lda *_i1
cmp #16
blo L2
; i1=0;i2=0;i3=0;i4=0;i5=0;i6=0;i7=0;
clr *_i1
clr *_i2
clr *_i3
clr *_i4
clr *_i5
clr *_i6
clr *_i7
bra L7
L6:
inc *_i1
inc *_i2
L7:
; while(m[i1]!='='&&m[i1]!='')
clr *__r0
lda *_i1
add 3,X
sta *__r1
lda *__r0
adc 2,X
sta *__r0
ldhx *__r0
lda ,x
sta *__r1
clr *__r0
ldhx *__r0
cphx #61
tsx
beq L9
ldhx *__r0
cphx #0
tsx
bne L6
L9:
; {i1++;i2++;}
; if(m[0]=='-')i3=1;
lda 2,X
ldx 3,X
psha
pulh
lda ,x
tsx
cmp #45
beq X1
jmp L15
X1:
lda #1
sta *_i3
; for(;i3<=i2;i3++)
jmp L15
L12:
; {if(m[i3]=='+'||m[i3]=='-'||m[i3]=='*'||m[i3]=='/'||m[i3]=='=')
clr *__r0
lda *_i3
add 3,X
sta *__r1
lda *__r0
adc 2,X
sta *__r0
ldhx *__r0
lda ,x
sta *__r1
clr *__r0
ldhx *__r0
cphx #43
tsx
beq L21
ldhx *__r0
cphx #45
tsx
beq L21
ldhx *__r0
cphx #42
tsx
beq L21
ldhx *__r0
cphx #47
tsx
beq L21
ldhx *__r0
cphx #61
tsx
bne L16
L21:
clr *__r0
lda *_i3
add 3,X
sta *__r1
lda *__r0
adc 2,X
sta *__r0
ldhx *__r0
lda ,x
sta *__r1
clr *__r2
lda *_i4
add #<_sign1
sta *__r3
lda *__r2
adc #>_sign1
sta *__r2
lda *__r1
ldhx *__r2
sta ,x
clr *__r0
lda *_i4
add #<_sign2
sta *__r1
lda *__r0
adc #>_sign2
sta *__r0
lda *_i3
ldhx *__r0
sta ,x
tsx
inc *_i4
L16:
L13:
inc *_i3
L15:
lda *_i3
cmp *_i2
bhi X2
jmp L12
X2:
; {sign1[i4]=m[i3];sign2[i4]=i3;i4++;}}
; i41=i4;i42=i4;
mov *_i4,*_i41
mov *_i4,*_i42
; if(m[0]=='-')i5=1;
lda 2,X
ldx 3,X
psha
pulh
lda ,x
tsx
cmp #45
beq X3
jmp L25
X3:
lda #1
sta *_i5
jmp L25
X0:
; while(i41--)
; {
; for(;i5<sign2[i6];i5++)
L27:
clr *__r0
lda *_i7
sta *__r1
lsl *__r1
rol *__r0
lda *__r1
add #<_r
sta *__r1
lda *__r0
adc #>_r
sta *__r0
clr *__r2
lda *_i5
add 3,X
sta *__r3
lda *__r2
adc 2,X
sta *__r2
ldhx *__r2
lda ,x
sta *__r3
clr *__r2
ldhx *__r0
lda 1,x
sta *__r5
lda ,x
sta *__r4
lda #10
psha
clra
psha
lda *__r5
psha
lda *__r4
psha
jsr __mul16
ais #4
mov *__rlo,*__r5
mov *__rhi,*__r4
lda *__r5
add *__r3
sta *__r3
lda *__r4
adc *__r2
sta *__r2
lda *__r3
sub #48
sta *__r3
lda *__r2
sbc #0
ldhx *__r0
sta ,x
lda *__r3
sta 1,x
tsx
L28:
inc *_i5
L30:
clr *__r0
lda *_i6
add #<_sign2
sta *__r1
lda *__r0
adc #>_sign2
sta *__r0
ldhx *__r0
lda ,x
tsx
sta *__r1
lda *_i5
cmp *__r1
bhs X4
jmp L27
X4:
inc *_i5
inc *_i6
inc *_i7
L25:
clr *__r0
lda *_i41
sta *__r1
sub #1
sta *__r3
lda *__r0
sbc #0
mov *__r3,*_i41
ldhx *__r0
cphx #0
tsx
bne L30
; r[i7]=r[i7]*10+m[i5]-'0';
; i5++;i6++;i7++;
; }
; if(m[0]=='-')r[0]=0-r[0];
lda 2,X
ldx 3,X
psha
pulh
lda ,x
tsx
cmp #45
bne L31
clra
sub *_r+1
sta *_r+1
clra
sbc *_r
sta *_r
L31:
; for(i8=0;i8<i42-1;i8++)
clr *_i8
jmp L36
L33:
; {if(sign1[i8]=='*')
clr *__r0
lda *_i8
add #<_sign1
sta *__r1
lda *__r0
adc #>_sign1
sta *__r0
ldhx *__r0
lda ,x
tsx
cmp #42
beq X5
jmp L37
X5:
; {r[i8+1]=r[i8]*r[i8+1];r[i8]=0;
clr *__r0
lda *_i8
sta *__r1
ldhx *__r0
aix #1
sthx *__r0
lsl *__r1
rol *__r0
lda *__r1
add #<_r
sta *__r1
lda *__r0
adc #>_r
sta *__r0
ldhx *__r0
lda 1,x
sta *__r3
lda ,x
sta *__r2
clr *__r4
lda *_i8
sta *__r5
lsl *__r5
rol *__r4
lda *__r5
add #<_r
sta *__r5
lda *__r4
adc #>_r
sta *__r4
ldhx *__r4
lda 1,x
sta *__r5
lda ,x
sta *__r4
lda *__r5
psha
lda *__r4
psha
lda *__r3
psha
lda *__r2
psha
jsr __mul16
ais #4
mov *__rlo,*__r3
mov *__rhi,*__r2
lda *__r2
ldhx *__r0
sta ,x
lda *__r3
sta 1,x
clr *__r0
lda *_i8
sta *__r1
lsl *__r1
rol *__r0
lda *__r1
add #<_r
sta *__r1
lda *__r0
adc #>_r
sta *__r0
clra
ldhx *__r0
sta ,x
clra
sta 1,x
tsx
; if(i8>0&&sign1[i8-1]=='-')sign1[i8]='-';
lda *_i8
cmp #0
bls L39
clr *__r0
lda *_i8
add #<_sign1-1
sta *__r1
lda *__r0
adc #>_sign1-1
sta *__r0
ldhx *__r0
lda ,x
tsx
cmp #45
bne L39
clr *__r0
lda *_i8
add #<_sign1
sta *__r1
lda *__r0
adc #>_sign1
sta *__r0
lda #45
ldhx *__r0
sta ,x
tsx
bra L40
L39:
clr *__r0
lda *_i8
add #<_sign1
sta *__r1
lda *__r0
adc #>_sign1
sta *__r0
lda #43
ldhx *__r0
sta ,x
tsx
L40:
; else sign1[i8]='+';}
L37:
; if(sign1[i8]=='/')
clr *__r0
lda *_i8
add #<_sign1
sta *__r1
lda *__r0
adc #>_sign1
sta *__r0
ldhx *__r0
lda ,x
tsx
cmp #47
beq X6
jmp L42
X6:
; {r[i8+1]=r[i8]/r[i8+1];r[i8]=0;
clr *__r0
lda *_i8
sta *__r1
ldhx *__r0
aix #1
sthx *__r0
lsl *__r1
rol *__r0
lda *__r1
add #<_r
sta *__r1
lda *__r0
adc #>_r
sta *__r0
ldhx *__r0
lda 1,x
sta *__r3
lda ,x
sta *__r2
clr *__r4
lda *_i8
sta *__r5
lsl *__r5
rol *__r4
lda *__r5
add #<_r
sta *__r5
lda *__r4
adc #>_r
sta *__r4
ldhx *__r4
lda 1,x
sta *__r5
lda ,x
sta *__r4
mov *__r5,*__rlo
mov *__r4,*__rhi
lda *__r3
psha
lda *__r2
psha
jsr __divmod16s
ais #2
mov *__rhi,*__r2
mov *__rlo,*__r3
lda *__r2
ldhx *__r0
sta ,x
lda *__r3
sta 1,x
clr *__r0
lda *_i8
sta *__r1
lsl *__r1
rol *__r0
lda *__r1
add #<_r
sta *__r1
lda *__r0
adc #>_r
sta *__r0
clra
ldhx *__r0
sta ,x
clra
sta 1,x
tsx
; if(i8>0&&sign1[i8-1]=='-')sign1[i8]='-';
lda *_i8
cmp #0
bls L44
clr *__r0
lda *_i8
add #<_sign1-1
sta *__r1
lda *__r0
adc #>_sign1-1
sta *__r0
ldhx *__r0
lda ,x
tsx
cmp #45
bne L44
clr *__r0
lda *_i8
add #<_sign1
sta *__r1
lda *__r0
adc #>_sign1
sta *__r0
lda #45
ldhx *__r0
sta ,x
tsx
bra L45
L44:
clr *__r0
lda *_i8
add #<_sign1
sta *__r1
lda *__r0
adc #>_sign1
sta *__r0
lda #43
ldhx *__r0
sta ,x
tsx
L45:
L42:
L34:
inc *_i8
L36:
lda *_i42
sub #1
sta *__r0
lda *_i8
cmp *__r0
bhs X7
jmp L33
X7:
; else sign1[i8]='+';}}
; res=r[0];
mov *_r,*_res
mov *_r+1,*_res+1
; for(i9=0;i9<i42-1;i9++)
clr *_i9
jmp L50
L47:
; {
; if(sign1[i9]=='+')res=res+r[i9+1];
clr *__r0
lda *_i9
add #<_sign1
sta *__r1
lda *__r0
adc #>_sign1
sta *__r0
ldhx *__r0
lda ,x
tsx
cmp #43
bne L51
clr *__r0
lda *_i9
sta *__r1
ldhx *__r0
aix #1
sthx *__r0
lsl *__r1
rol *__r0
lda *__r1
add #<_r
sta *__r1
lda *__r0
adc #>_r
sta *__r0
ldhx *__r0
lda 1,x
sta *__r1
lda ,x
tsx
sta *__r0
lda *_res+1
add *__r1
sta *_res+1
lda *_res
adc *__r0
sta *_res
L51:
; if(sign1[i9]=='-')res=res-r[i9+1];
clr *__r0
lda *_i9
add #<_sign1
sta *__r1
lda *__r0
adc #>_sign1
sta *__r0
ldhx *__r0
lda ,x
tsx
cmp #45
bne L53
clr *__r0
lda *_i9
sta *__r1
ldhx *__r0
aix #1
sthx *__r0
lsl *__r1
rol *__r0
lda *__r1
add #<_r
sta *__r1
lda *__r0
adc #>_r
sta *__r0
ldhx *__r0
lda 1,x
sta *__r1
lda ,x
tsx
sta *__r0
lda *_res+1
sub *__r1
sta *_res+1
lda *_res
sbc *__r0
sta *_res
L53:
L48:
inc *_i9
L50:
lda *_i42
sub #1
sta *__r0
lda *_i9
cmp *__r0
bhs X8
jmp L47
X8:
; }
; return res;
lda *_res+1
sta *__r1
lda *_res
sta *__r0
L1:
.dbline 0 ; func end
rts
.area func_lit
L163:
.word L110
.word L78
.word L58
.word L95
.word L58
.word L127
.word L70
.word L61
.word L62
.word L63
.word L64
.word L65
.word L66
.word L67
.word L68
.word L69
.word L58
.word L58
.word L73
.word L144
.area text
; KB_valve -> 2,X
_isrKBI::
pshh
lda *__r0
psha
lda *__r1
psha
lda *__r2
psha
lda *__r3
psha
lda *__r4
psha
lda *__r5
psha
lda *__r6
psha
lda *__r7
psha
lda *__r8
psha
lda *__r9
psha
lda *__r10
psha
lda *__r11
psha
lda *__rhi
psha
lda *__rlo
psha
ais #-3
tsx
; }
;
;
; /*键盘中断处理函数------------------------------------*/
;
; void isrKBI(void)
; {
; unsigned char KB_valve;
; asm("SEI"); //关总中断
SEI
; INTKBSCR|= (1<<IntBit); //屏蔽键盘中断(IMASKK=1)
bset #1,0x1a
; x=1;
lda #1
sta *_x
; if(x==1)
lda *_x
cmp #1
beq X11
jmp L56
X11:
; {
; x=0;
clr *_x
; KB_valve=KB_Scan(); //扫描键值
jsr _KB_Scan
tsx
sta *__r1
sta 2,X
; KB_valve=KB_Def(KB_valve); //键值转化为定义值
psha
jsr _KB_Def
ais #1
tsx
sta *__r1
sta 2,X
; switch(KB_valve)
clr ,X
sta 1,X
lda ,X
sta *__r0
ldhx *__r0
cphx #42
tsx
bge X12
jmp L58
X12:
lda 1,X
sta *__r1
lda ,X
sta *__r0
ldhx *__r0
cphx #61
tsx
ble X13
jmp L58
X13:
lda 1,X
sub #42
sta *__r1
lda ,X
sbc #0
sta *__r0
lsl *__r1
rol *__r0
lda *__r1
add #<L163
sta *__r1
lda *__r0
adc #>L163
sta *__r0
ldhx *__r0
lda 1,x
sta *__r1
lda ,x
tsx
sta *__r0
lda *__r1
psha
lda *__r0
psha
rts
X9:
; {
L61:
; case '1':n[t++]='1';s1=0;break;
clr *__r0
lda *_t
sta *__r1
ldhx *__r0
aix #1
sthx *__r2
mov *__r3,*_t
add #<_n
sta *__r1
lda *__r0
adc #>_n
sta *__r0
lda #49
ldhx *__r0
sta ,x
tsx
clr *_s1
jmp L59
L62:
; case '2':n[t++]='2';s1=0;break;
clr *__r0
lda *_t
sta *__r1
ldhx *__r0
aix #1
sthx *__r2
mov *__r3,*_t
add #<_n
sta *__r1
lda *__r0
adc #>_n
sta *__r0
lda #50
ldhx *__r0
sta ,x
tsx
clr *_s1
jmp L59
L63:
; case '3':n[t++]='3';s1=0;break;
clr *__r0
lda *_t
sta *__r1
ldhx *__r0
aix #1
sthx *__r2
mov *__r3,*_t
add #<_n
sta *__r1
lda *__r0
adc #>_n
sta *__r0
lda #51
ldhx *__r0
sta ,x
tsx
clr *_s1
jmp L59
L64:
; case '4':n[t++]='4';s1=0;break;
clr *__r0
lda *_t
sta *__r1
ldhx *__r0
aix #1
sthx *__r2
mov *__r3,*_t
add #<_n
sta *__r1
lda *__r0
adc #>_n
sta *__r0
lda #52
ldhx *__r0
sta ,x
tsx
clr *_s1
jmp L59
L65:
; case '5':n[t++]='5';s1=0;break;
clr *__r0
lda *_t
sta *__r1
ldhx *__r0
aix #1
sthx *__r2
mov *__r3,*_t
add #<_n
sta *__r1
lda *__r0
adc #>_n
sta *__r0
lda #53
ldhx *__r0
sta ,x
tsx
clr *_s1
jmp L59
L66:
; case '6':n[t++]='6';s1=0;break;
clr *__r0
lda *_t
sta *__r1
ldhx *__r0
aix #1
sthx *__r2
mov *__r3,*_t
add #<_n
sta *__r1
lda *__r0
adc #>_n
sta *__r0
lda #54
ldhx *__r0
sta ,x
tsx
clr *_s1
jmp L59
L67:
; case '7':n[t++]='7';s1=0;break;
clr *__r0
lda *_t
sta *__r1
ldhx *__r0
aix #1
sthx *__r2
mov *__r3,*_t
add #<_n
sta *__r1
lda *__r0
adc #>_n
sta *__r0
lda #55
ldhx *__r0
sta ,x
tsx
clr *_s1
jmp L59
L68:
; case '8':n[t++]='8';s1=0;break;
clr *__r0
lda *_t
sta *__r1
ldhx *__r0
aix #1
sthx *__r2
mov *__r3,*_t
add #<_n
sta *__r1
lda *__r0
adc #>_n
sta *__r0
lda #56
ldhx *__r0
sta ,x
tsx
clr *_s1
jmp L59
L69:
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -