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

📄 vectors08.s

📁 基于HC908GP32的计算器完整程序
💻 S
📖 第 1 页 / 共 2 页
字号:
	.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 + -