请教在PIC中 如何把这样的一个C函数译成通用的汇编函数?能实现吗?用什么方式来传送参数和返回结果?
/*
比较数组 p 和 p1 的大小,Arrlong是数组的长度
p>p1 返回 1
p<p1 返回 -1
p=p1 返回 0
*/
char CompareArr(uchar *p,uchar *p1,uchar Arrlong)
{
while(Arrlong--)
{
if(*p>*p1)
{
return 1;
}
else if(*p<*p1)
{
return -1;
}
p++;
p1++;
}
return 0;
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
PROCESSOR P=P16F76
INCLUDE <P16F76.inc>
#define Arrlong 0x08
R0 EQU 0X20 ;在页0定义5个可直接寻址的内存单元
R1 EQU 0X21
R2 EQU 0X22
R3 EQU 0X23
R4 EQU 0X24
TAB0 EQU 0X28 ;在这里定义一个数组的起始位置
TAB1 EQU 0X38
ORG 0X0000
GOTO START
ORG 0X05
START:
LOOP:
MOVLW TAB0
MOVWF R1 ;传地址1
MOVLW TAB1
MOVWF R2 ;传地址2
MOVLW Arrlong
MOVWF R3 ;传比要较的个数
CALL CompareArr
GOTO LOOP
CompareArr:
MOVF R1,W ;将R0地址的内容读入R4
MOVWF FSR
MOVF INDF,W
MOVWF R4
MOVF R2,W ;指针指R1地址的内容放入 W
MOVWF FSR
MOVF INDF,W
SUBWF R4,W ;比较R4中的值和W的值
BTFSC STATUS,Z ;如果结果为 0 ,两数相等,跳到下一次比较
GOTO NEXT
BTFSC STATUS,C ;如果结果不相,如果结果为正,返回1,否则返回-1
GOTO RETURN1
GOTO RETURN0XFF
RETURN1:
MOVLW 1
MOVWF R3 ;把结果放入R3中,返回
RETURN
RETURN0XFF:
MOVLW 0xff
MOVWF R3 ;把结果放入R3中,返回
RETURN
NEXT:
INCF R1,F
INCF R2,F
DECFSZ R3,F
GOTO CompareArr
CLRF R3
RETURN
END
一周热门 更多>