一、前言
之所以想写一篇关于汇编的运算,其一是因为网上关于这方面的参考少之又少。其二是因为对于汇编语言涉及到运算方面的话,在处理一些问题的时候相较于C语言难度要大上不少,初学者或者一些入门的程序员在运用上还不太熟悉。特别是当IC的汇编指令缺少加减进位指令时去做运算,一定要理解了指令的用法才能写出来的。
二、参考代码
L_CompStart:
MOV A,R_Temp0
SUB A,R_Temp2
JBC Z
JMP L_Step0
JBC C
JMP L_Step1
MOV A,R_Temp2
SUB A,R_Temp0
JBC C
JMP L_Step2
RET
;R_Temp0 = R_Temp2,则只看低8位
L_Step0:
CLR R_TempH
MOV A,R_Temp1
SUB A,R_Temp3
JBC Z
RET
JBC C
JMP $+4
MOV A,R_Temp3
SUB A,R_Temp1
JBC C
MOV R_TempL,A
RET
;R_Temp2 > R_Temp0
L_Step1:
MOV A,R_Temp1
SUB A,R_Temp3
MOV R_TempL,A
MOV A,@0
JBS C
MOV A,@1
SUB R_Temp2,A
MOV A,R_Temp0
SUB A,R_Temp2
MOV R_TempH,A
RET
;R_Temp0 > R_Temp2
L_Step2:
MOV A,R_Temp3
SUB A,R_Temp1
MOV R_TempL,A
MOV A,@0
JBS C
MOV A,@1
SUB R_Temp0,A
MOV A,R_Temp2
SUB A,R_Temp0
MOV R_TempH,A
RET
总结
以上例子我通常运用在对声音信号的幅度处理上,通过对比2次或者多次数据的差值大小来确定当前是否处于稳定态。
本文探讨了在汇编语言中,特别是在缺乏加减进位指令的情况下,如何通过复杂的指令组合实现运算,以处理声音信号幅度。作者举例说明了在不同情况下的步骤和操作,如R_Temp0与R_Temp2的比较和调整。

2225

被折叠的 条评论
为什么被折叠?



