一小段汇编程序,帮忙解释一下

anne82820 2014-04-17 11:02:56
;**************************************************************************************************[]
; function: N-次方差计算
;
; INPUT:
; ZH:ZL:= #R_SSP_ADC_CoorBuf_E0E2
; VarL:= NUMBER
; VarL,VarH,VAR2,VAR3
;**************************************************************************************************[]
Sub_calculation_Coording_3DEA:
CALL Sub_OpenStk_withXDate__11F2
;
WDR ;
LDD ZH, Y+$04 ;
LDD ZL, Y+$05 ;D ;AD_Buffer
MOVW dw4F:dw4E, ZH:ZL ;
; [ 信号曲线参数保存 ]
MOVW ZH:ZL, dw4F:dw4E ;Copy dw4F: to ZH:
PUSH ZL ;
PUSH ZH ;
LDI XH, HIGH(R_SSPLine_Buffer) ;Loads an 8 bit constant directly to register 16 to 31
LDI XL, LOW(R_SSPLine_Buffer) ;
CALL Sub_MOV_SMPADC_To_Coor_42E5 ;信号曲线参数D_SSPdata_num/D_zoom_dat 存储数据
POP ZH ;
POP ZL ;
; ---------------------------------
CLC ;
LDI XL, $01 ;直接赋值1
LDD XH, Y+$07 ;Y+$07地址数据送入XH
TST XH ;Test XH
BREQ _L_next_3E0F ;相等跳转 _L_next_3E0F
BRLT _L_next_3E0F ;如果小于0 _L_next_3E0F
//循环
_L_loop_3E0B: LSL XL ;位左偏移 高位送入C
DEC XH ;XH-1
TST XH ;Test XH a logical AND between XH and itself
BRNE _L_loop_3E0B ;bgt _L_loop_3E0B
; ---------------------------------
_L_next_3E0F: MOV dw48, XL ;
LDI ZH, HIGH(R_SSPLine_Buffer) ;
LDI ZL, LOW(R_SSPLine_Buffer) ;
MOVW dw4d:dw4C, ZH:ZL ;
MOV dw49, dw48 ;
; RAM_dw4A <== Fun_SUM{ @R_SSP_ADC_buffer_C307+.. for 2^^Stk }
CLR XH ;
CLR XL ;
MOVW dw4B:dw4A, XH:XL ;
_L_loop_3E1A: TST dw49 ;
BREQ _L_next_3E30 ;
MOVW ZH:ZL, dw4D:dw4C ;
CLR XH ;
LD XL, Z+ ;
MOVW dw4D:dw4C, ZH:ZL ;
MOVW ZH:ZL, dw4B:dw4A ;
ADD ZL, XL ;Fun_SUM
ADC ZH, XH ;
MOVW dw4B:dw4A, ZH:ZL ;
DEC dw49 ;
JMP _L_loop_3E1A ;
;----------------------------------------
_L_next_3E30: ; RAM_dw4E <== RAM_dw4E + RAM_dw48+1/2
;----------------------------------------
MOV XL, dw48 ;
LSR XL ;右移
CLR XH ;
MOVW ZH:ZL, dw4F:dw4E ;
ADD ZL, XL ;
ADC ZH, XH ;
MOVW dw4F:dw4E, ZH:ZL ;
;
CLR ZH ;
MOV ZL, dw48 ;
LDI XL, LOW(D_SSPdata_num/D_zoom_dat) ;
LDI XH, HIGH(D_SSPdata_num/D_zoom_dat) ;
SUB XL, ZL ;
SBC XH, ZH ;
MOVW dw47:dw46, XH:XL ;
_L_loop_3E44: ; number
TST dw46 ;
BRNE _L_0701_0514 ;
TST dw47 ;
BRNE _L_0701_0514 ;
JMP _L_exit_3E91 ;//退出
_L_0701_0514:
CLR ZH ;
MOV ZL, dw48 ;
MOVW XL, dw4A ;
CALL SUB_HC_IDIV ; X/Z == {Fun_SUM{@R_SSP_ADC_buffer_C307+.. for 2^^Stk}} / 2^^Stk
MOVW XH:XL, ZL ; X/Z =>Z, r=>X
MOVW ZH:ZL, dw4E ;
ST Z+, XL ;
MOVW dw4E, ZL ;
;
MOVW ZH:ZL, dw4D:dw4C ;
CLR XH ;
MOV XL, dw48 ;
SUB ZL, XL ;
SBC ZH, XH ;
LD XL, Z ;
CLR XH ;
MOVW ZH:ZL, dw4B:dw4A ;
SUB ZL, XL ;
SBC ZH, XH ;
MOVW dw4B:dw4A, ZH:ZL ;

MOVW ZH:ZL, dw4D:dw4C ;
CLR XH ;
LD XL, Z+ ;
ADD dw4A, XL ;
ADC dw4B, XH ;
MOVW dw4D:dw4C, ZH:ZL ;
;
MOVW XH:XL, dw47:dw46 ;
SBIW XH:XL, 1 ;
MOVW dw47:dw46, XH:XL ;
JMP _L_loop_3E44
;---------------------------------------
_L_exit_3E91: MOVW ZH:ZL, dw4F:dw4E ;
SBIW ZH:ZL, 1 ;
LDD XL, Z+$00 ;
STS R_temp_C306, XL ;
;
MOVW XH:XL, dw49:dw48 ;
LSR XL ;
MOV dw49, XL ;
_L_loop_3E9E:
TST dw49 ;
BREQ _L_end_3EB2 ;

MOVW ZH:ZL, dw4F:dw4E ;
ADIW ZH:ZL, 1 ;
MOVW dw4F:dw4E, ZH:ZL ;
SBIW ZH:ZL, 1
LDS XL, R_temp_C306 ;
STD Z+$00, XL ;
DEC dw49 ;
JMP _L_loop_3E9E ;

_L_end_3EB2: CALL Sub_CloseStk_withXDate__1232
...全文
223 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
anne82820 2014-05-05
  • 打赏
  • 举报
回复
结贴,我自己翻译过来了,用AVR STUDIO 自己带的反汇编,用单步走,一点一点翻译出来了
「已注销」 2014-04-29
  • 打赏
  • 举报
回复
看不懂0 
千里风雪隐 2014-04-19
  • 打赏
  • 举报
回复
好好学39 2014-04-17
  • 打赏
  • 举报
回复
真难呀.真难呀

21,499

社区成员

发帖
与我相关
我的任务
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
  • 汇编语言
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧