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

📄 conio.asm

📁 Texas-Instrument C2000 Series DSP example programs
💻 ASM
📖 第 1 页 / 共 2 页
字号:
	SACL	*+,AR3
	LARK	AR3,3
	MAR	*0+,AR1
	SAR	AR3,*+
	CALL	_getline
	SBRK	2
*** 152	-----------------------    val = buf[0] ? atol_F240(&buf) : deflt;
	.line	21
;>>>> 	        if (buf[0] == 0)
;>>>> 	          val = deflt;
;>>>> 	        else
	MAR	* ,AR2
	LARK	AR2,3
	MAR	*0+
	LAC	* 
	BZ	LL8
	MAR	* ,AR3
	LARK	AR3,3
	MAR	*0+,AR1
	SAR	AR3,*+
	CALL	_atol_F240
	MAR	*-
	B	LL9
LL8:
	SBRK	8-LF6
	ZALS	*+
	ADDH	* 
LL9:
	MAR	* ,AR2
	LARK	AR2,1
	MAR	*0+
	SACL	*+
	SACH	* 
*** 155	-----------------------    if ( val < lowlimit || val > highlimit ) goto g2;
	.line	24
;>>>> 	          val = atol_F240(buf);
;>>>> 	    } while (val<lowlimit || val>highlimit);
	BNV	$+2
	MAR	*-
	ZALS	*+
	ADDH	* 
	SBRK	9-LF6
	SUBS	*+
	SUBH	* ,AR1
	BNV	$+6
	BGZ	L12
	B	$+4
	BLZ	L12
	BNV	$+2
	MAR	* ,AR2
	ADRK	7-LF6
	ZALS	*+
	ADDH	* 
	SBRK	11-LF6
	SUBS	*+
	SUBH	* ,AR1
	BNV	$+6
	BLZ	L12
	B	$+4
	BGZ	L12
*** 157	-----------------------    return val;
	.line	26
;>>>> 	    return val;
	MAR	* ,AR2
	ADRK	9-LF6
	ZALS	*+
	ADDH	* 
EPI0_6:
	.line	27
	MAR	* ,AR1
;	<restore register vars>
	MAR	*-
	LAR	AR6,*
	SBRK	14
	LAR	AR0,*-
	PSHD	*
	RET

	.endfunc	158,000000040H,13

	.sym	_getline,_getline,36,2,0
	.globl	_getline

	.func	164
;>>>> 	int getline(char *x, int maxlen)
******************************************************
* FUNCTION DEF : _getline
******************************************************
_getline:

LF7	.set	0

	POPD	*+
	SAR	AR0,*+
	SAR	AR1,*
	LARK	AR0,4
	LAR	AR0,*0+
;	<save register vars>
	SAR	AR6,*+
	SAR	AR7,*+,AR6
	LARK	AR6,1
	LARK	AR7,3
	MAR	*0+,AR7
	MAR	*0+,AR2

	.sym	_x,-3+LF7,20,9,16
	.sym	_maxlen,-4+LF7,4,9,16
	.sym	_x,1,20,1,16
	.sym	_pos,2,4,1,16
	.sym	_c,3,4,1,16
	.line	2
;>>>> 	   int c;
	LARK	AR2,-3+LF7
	MAR	*0+
	LAC	* ,AR6
	SACL	* ,AR2
*** 167	-----------------------    pos = 0;
	.line	4
;>>>> 	   int pos = 0;
;>>>> 	   do
	LACK	0
	ADRK	5-LF7
	SACL	* ,AR1
L14:
***	-----------------------g2:
*** 171	-----------------------    if ( (c = getch()) != 8 ) goto g5;
	.line	8
;>>>> 	      c = getch();
;>>>> 	      if (c == '\b')
	CALL	_getch,AR1
	MAR	* ,AR7
	SACL	* 
	SUBK	8
	BNZ	L17
*** 175	-----------------------    if ( pos <= 0 ) goto g10;
	.line	12
;>>>> 	         if (pos > 0)
	SSXM
	MAR	* ,AR2
	LARK	AR2,2
	MAR	*0+
	LAC	* 
	BLEZ	L22
*** 176	-----------------------    --pos;
	.line	13
;>>>> 	            pos--;
;>>>> 	         else
;>>>> 	            c = '\a';  /* bell */
	SUBK	1
	SACL	* 
L17:
***	-----------------------g5:
*** 181	-----------------------    if ( c != 13 ) goto g7;
	.line	18
;>>>> 	      if (c == '\r')
	MAR	* ,AR7
	LAC	* ,AR1
	SACL	* 
	LAC	* 
	SUBK	13
	BNZ	L19
*** 182	-----------------------    x[pos] = 0;
	.line	19
;>>>> 	         x[pos++] = 0;
	MAR	* ,AR6
	LAC	* ,AR2
	LARK	AR2,2
	MAR	*0+
	ADD	* ,AR0
	SACL	* 
	LAR	AR3,* ,AR3
	LACK	0
	SACL	* ,AR2
*** 182	-----------------------    ++pos;
	LAC	* 
	ADDK	1
	SACL	* 
L19:
***	-----------------------g7:
*** 184	-----------------------    if ( c == 13 || c == 8 || c == 7 ) goto g11;
	.line	21
;>>>> 	      if (c != '\r' && c != '\b' && c != '\a')
	MAR	* ,AR7
	LAC	* ,AR1
	SACL	* 
	LAC	* 
	SUBK	13
	BZ	L23
	MAR	* ,AR7
	LAC	* ,AR1
	SACL	* 
	LAC	* 
	SUBK	8
	BZ	L23
	MAR	* ,AR7
	LAC	* ,AR1
	SACL	* 
	LAC	* 
	SUBK	7
	BZ	L23
*** 186	-----------------------    if ( pos-maxlen == (-1) ) goto g10;
	.line	23
;>>>> 	         if (pos == maxlen-1)
;>>>> 	            c = '\a';
;>>>> 	         else
	SSXM
	MAR	* ,AR2
	LARK	AR2,2
	MAR	*0+
	LAC	* 
	SBRK	6-LF7
	SUB	* 
	SUBK	-1
	BZ	L22
*** 189	-----------------------    x[pos] = c;
	.line	26
;>>>> 	            x[pos++] = c;
	MAR	* ,AR6
	LAC	* ,AR2
	ADRK	6-LF7
	ADD	* ,AR0
	SACL	* 
	LAR	AR3,* ,AR7
	LAC	* ,AR3
	SACL	* ,AR2
*** 189	-----------------------    ++pos;
	LAC	* 
	ADDK	1
	SACL	* 
*** 189	-----------------------    goto g11;
	B	L23
L22:
***	-----------------------g10:
*** 187	-----------------------    c = 7;
	.line	24
	LACK	7
	MAR	* ,AR7
	SACL	* 
L23:
***	-----------------------g11:
*** 192	-----------------------    putch(c);
	.line	29
;>>>> 	      putch(c);
	MAR	* ,AR7
	LAC	* ,AR1
	SACL	*+
	CALL	_putch
	MAR	*-,AR7
*** 193	-----------------------    if ( c != 13 ) goto g2;
	.line	30
;>>>> 	  } while (c != '\r');
	LAC	* ,AR1
	SACL	* 
	LAC	* 
	SUBK	13
	BNZ	L14
*** 195	-----------------------    return pos;
	.line	32
;>>>> 	  return (pos);       /* returning length of string */
	SSXM
	MAR	* ,AR2
	LARK	AR2,2
	MAR	*0+
	LAC	* 
EPI0_7:
	.line	33
	MAR	* ,AR1
;	<restore register vars>
	MAR	*-
	LAR	AR7,*-
	LAR	AR6,*
	SBRK	5
	LAR	AR0,*-
	PSHD	*
	RET

	.endfunc	196,0000000c0H,4

	.sym	_atol_F240,_atol_F240,37,2,0
	.globl	_atol_F240

	.func	212
;>>>> 	long atol_F240(const char *st)
******************************************************
* FUNCTION DEF : _atol_F240
******************************************************
_atol_F240:

LF8	.set	1

	SAR	AR0,*+
	SAR	AR1,*
	LARK	AR0,5
	LAR	AR0,*0+
;	<save register vars>
	SAR	AR6,*+
	SAR	AR7,*+,AR6
	LARK	AR6,3
	LARK	AR7,4
	MAR	*0+,AR7
	MAR	*0+,AR2

	.sym	_st,-3+LF8,20,9,16
*
* AR5	assigned to variable  fst
*  ---  fc shares AUTO storage with C$4
*
	.sym	_result,1,5,1,32
	.sym	C$3,3,4,1,16
	.sym	_fc,4,4,1,16
	.line	2
*** 214	-----------------------    fst = st;
	.line	3
;>>>> 	    register const char  *fst   = st;
	LARK	AR2,-3+LF8
	MAR	*0+
	LAR	AR5,* 
*** 215	-----------------------    result = 0L;
	.line	4
;>>>> 	    register       long  result = 0;
;>>>> 	    register       char  fc;
	LACK	0
	ADRK	4-LF8
	SACL	*+
	SACH	* ,AR5
***  	-----------------------    if ( *fst == 32 ) goto g3;
	LAC	* ,AR1
	SACL	* 
	LAC	* 
	SUBK	32
	BZ	L26
	MAR	* ,AR5
L25:
***	-----------------------g2:
*** 221	-----------------------    if ( (C$4 = *fst) <= 8 || C$4 >= 14 ) goto g5;
	.line	10
;>>>> 	    while ((*fst == 0x20) || ((*fst > 0x08) && (*fst < 0x0E)))
	SSXM
	LAC	* ,AR7
	SACL	* 
	SUBK	8
	BLEZ	L28
	LAC	* 
	SUBK	14
	BGEZ	L28
L26:
L27:
***	-----------------------g3:
***	-----------------------g4:
*** 223	-----------------------    if ( *(++fst) != 32 ) goto g2;
	.line	12
;>>>> 	       fst++;                      
	MAR	* ,AR5
	MAR	*+
	LAC	* ,AR1
	SACL	* 
	LAC	* ,AR5
	SUBK	32
	BNZ	L25
*** 223	-----------------------    goto g4;
	B	L27
L28:
***	-----------------------g5:
*** 229	-----------------------    C$3 = *fst;
	.line	18
;>>>> 	    fc = *fst;
	MAR	* ,AR5
	LAC	* ,AR6
	SACL	* ,AR7
*** 229	-----------------------    fc = C$3-45;
	SUBK	45
	SACL	* ,AR6
*** 230	-----------------------    if ( C$3 != 45 && C$3 != 43 ) goto g7;
	.line	19
;>>>> 	    if ((fc == '-') || (fc == '+')) 
	LAC	* 
	SUBK	45
	BZ	LL13
	LAC	* 
	SUBK	43
	BNZ	L30
LL13:
*** 231	-----------------------    ++fst;
	.line	20
;>>>> 	       fst++;
	MAR	* ,AR5
	MAR	*+
L30:
***	-----------------------g7:
*** 236	-----------------------    if ( (C$2 = *fst) < 48 ) goto g11;
	.line	25
;>>>> 	    while ((*fst >= '0') && (*fst <= '9'))
	MAR	* ,AR5
	LAC	* ,AR6
	SACL	* 
	SUBK	48
	BLZ	L34
L32:
***	-----------------------g9:
*** 236	-----------------------    if ( C$1 >= 58 ) goto g11;
	LAC	* 
	SUBK	58
	BGEZ	L34
*** 238	-----------------------    result *= 10L;
	.line	27
;>>>> 	        result *= 10;
	MAR	* ,AR2
	LARK	AR2,1
	MAR	*0+
	ZALS	*+
	ADDH	*-,AR1
	SACL	*+
	SACH	*+
	SACL	*+
	LACK	10
	MAR	*-
	CALL	L$$MPY
	MAR	* ,AR2
	SACL	*+
	SACH	*-,AR5
*** 239	-----------------------    result += *fst++-48;
	.line	28
;>>>> 	        result += *fst++ - '0';
	SSXM
	LAC	*+,AR2
	SUBK	48
	ADDS	*+
	ADDH	*-
	SACL	*+
	SACH	* ,AR5
*** 236	-----------------------    if ( (C$1 = *fst) >= 48 ) goto g9;
	.line	25
	LAC	* ,AR6
	SACL	* 
	SUBK	48
	BGEZ	L32
L34:
***	-----------------------g11:
*** 242	-----------------------    return fc ? result : -result;
	.line	31
;>>>> 	    return (fc == '-') ? -result : result;
	MAR	* ,AR7
	LAC	* 
	BZ	LL14
	MAR	* ,AR2
	LARK	AR2,1
	MAR	*0+
	ZALS	*+
	ADDH	* 
	B	EPI0_8
LL14:
	MAR	* ,AR2
	LARK	AR2,1
	MAR	*0+
	ZALS	*+
	ADDH	* 
	NEG
EPI0_8:
	.line	32
	MAR	* ,AR1
;	<restore register vars>
	MAR	*-
	LAR	AR7,*-
	LAR	AR6,*
	SBRK	6
	LAR	AR0,* 
	RET

	.endfunc	243,0000000c0H,5
           .text                                           
           .def    _read_PMEM                              
_read_PMEM:                                                
           popd    *+              ;push return address    
           sar     AR0, *+         ;push old frame pointer 
           sar     AR1, *                                  
           lar     AR0,*           ;init new frame pointer 
           adrk    #1              ;alocate space for one local variable 
                                                           
           lar     AR2,#-3                                 
           mar     *,AR2                                   
           mar     *0+             ;AR2 = x                
           LACC    *               ;ACC = x                
           ADRK    #3              ;AR2 = local #1         
           TBLR    *               ;local #1 = *x(PMEM)    
           LACC    *               ;ACC = char             
                                                           
        ;context restore                                   
        ;---------------                                   
           mar     *,AR1                                   
           sbrk    #(1+1)          ;pop local var's+1 from stack 
           lar     ar0, *-         ;restore old frame pointer    
           pshd    *               ;restore return address       
           ret                                                   
******************************************************
* DEFINE STRING CONSTANTS                            *
******************************************************
	.sect	".const"
SL0:	.byte	27,"c",0
SL1:	.byte	15,0
SL2:	.byte	"[",0
SL3:	.byte	",",0
SL4:	.byte	"]",0
SL5:	.byte	"<",0
SL6:	.byte	">: ",0
*****************************************************
* UNDEFINED REFERENCES                              *
*****************************************************
	.global	_ltoa
	.global	L$$MPY
	.end

⌨️ 快捷键说明

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