📄 neg32.asm
字号:
;***********************************************************
; Version 2.20.01
;***********************************************************
;*****************************************************************************
; Function: neg32
; Description: 32-bit vector negate
;
; Copyright Texas instruments Inc, 1998
;-----------------------------------------------------------------------------
; Revision History:
; 0.01 J. Axelrod. 4/15/97. Original version
; 1.00 R. Piedra, 8/31/98. Reduced cycles
; 2.00 - Li Yuan, 4/09/02. fixed overflow flag setup at the end of code.
;
;*****************************************************************************
.mmregs
; Far-mode adjustment
.if __far_mode
offset .set 1 ; far mode uses one extra location for ret addr ll
.else
offset .set 0
.endif
.asg (2), ret_addr
; x in A
.asg (3 + offset), arg_z
.asg (4 + offset), arg_n
; register usage
; ar0: addr. idx
.asg ar2, ar_x
.asg ar3, ar_z
.asg ar4, ar_temp
;*****************************************************************************
.def _neg32
.text
_neg32
PSHM ST0 ; 1 cycle
PSHM ST1 ; 1 cycle
RSBX OVA ; 1 cycle
RSBX OVB ; 1 cycle
; Preserve registers
;-------------------
ssbx sxm ; sign extension on (1)
ssbx ovm ; map -32768 to + 32767 (1)
; Get arguments
;--------------
ld *sp(arg_n),b ; b = n (1)
sub #1,b ; (2)
stlm b, brc ; brc = n -1 (1)
stlm a, ar_x ; pointer to x (1)
_start:
; Loop computes n elements
; ---------------------------
rptbd eloop-1 ; (2)
mvdk *sp(arg_z),*(ar_z) ; pointer to z (2)
dld *ar_x+,a ; (1)
neg a ; (1)
dst a, *ar_z+ ; (1)
eloop
; Return
;--------
_end:
rsbx ovm ; (1)
ld #0,a ; (1)
xc 1, AOV ; return overflow flag (1)
ld #1,a ; (1)
POPM ST1
POPM ST0
.if __far_mode
fretd ; (4)
.else
retd ; (3)
.endif
nop
nop
;end of file. please do not remove. it is left here to ensure that no lines of code are removed by any editor
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -