您的位置:首页 > 财经 > 金融 > 电商22个货源网址_软文营销广告案例_整站优化报价_株洲seo优化报价

电商22个货源网址_软文营销广告案例_整站优化报价_株洲seo优化报价

2025/4/16 12:39:14 来源:https://blog.csdn.net/2401_85236922/article/details/145468903  浏览:    关键词:电商22个货源网址_软文营销广告案例_整站优化报价_株洲seo优化报价
电商22个货源网址_软文营销广告案例_整站优化报价_株洲seo优化报价

芯片手册资料

 

1. 赋值语句

C语言:

a = 5;
b = a;

汇编:

; 立即数赋值
LDIA 05H     ; ACC = 5
LD R01,A     ; R01 = ACC(a=5); 寄存器间赋值
LD A,R01     ; ACC = R01(读取a的值)
LD R02,A     ; R02 = ACC(b=a)

2. 算术运算

C语言:

c = a + b;
d = a - 10;

 

汇编:

; 加法运算
LD A,R01     ; ACC = a
ADDA R02     ; ACC = a + b
LD R03,A     ; c = ACC; 减法运算
LD A,R01     ; ACC = a
SUBIA 0AH    ; ACC = a - 10
LD R04,A     ; d = ACC

3. while循环

C语言:

while (a != 0) {// 循环体a--;
}

汇编:

LOOP:SZR R01       ; 判断R01(a)是否为0JP LOOP_END   ; 如果为0则跳出循环; 循环体DECR R01      ; a--JP LOOP       ; 继续循环
LOOP_END:

4. for循环

C语言:

for (int i=0; i<10; i++) {// 循环体
}

汇编:

    LDIA 00H      ; 初始化i=0LD R05,A      ; R05 = iFOR_LOOP:LDIA 0AH      ; 立即数10SUBA R05      ; 10 - iSNZB STATUS,C ; 检查C标志(若i<10则C=1)JP LOOP_END   ; 若i>=10则跳出; 循环体INCR R05      ; i++JP FOR_LOOP   ; 继续循环

5. 条件判断

C语言:

if (a > b) {// 分支1
} else {// 分支2
}

汇编:

    LD A,R01      ; ACC = aHSUBA R02     ; 计算a - bSNZB STATUS,C ; 检查进位C(若a>=b则C=1)JP ELSE_BLOCK; 分支1JP END_IFELSE_BLOCK:; 分支2END_IF:

6. 函数调用

C语言:

void func() {// 函数体
}func(); // 调用函数

汇编:

    CALL FUNC     ; 调用函数...FUNC:; 函数体RET           ; 返回

7. 位操作

C语言:

PORTB |= 0x01;    // 置位RB0

汇编:

    SETB PORTB,0  ; 直接置位PORTB的bit0

8. 移位操作

C语言:

a = a << 1;

汇编:

    RLCR R01      ; 带进位循环左移(相当于左移1位)

关键差异说明:

  1. 寄存器分配:需要手动管理128字节RAM中的寄存器(如R00-R7F)

  2. 状态标志:需通过STATUS寄存器判断运算结果(Z/C/DC标志)

  3. 跳转范围JP指令只能跳转当前页(256地址范围),跨页需操作PCLATH

  4. 函数调用:无自动堆栈保护,需手动保存关键寄存器(ACC/STATUS)

  5. 延时循环:需通过定时器或精确计算指令周期实现

完整示例:LED闪烁程序

C语言:

while (1) {PORTB ^= 0x01;  // 翻转RB0delay(1000);
}

汇编:

   LDIA B'00000000'LD TRISB,A      ; 配置PORTB为输出LDIA 01H        ;翻转RB0LOOP:XORR PORTB      ; 翻转PORTB(异或操作)XORR的操作将 PORTB的值和ACC异或结果存入PORTBCALL DELAY_1S   ; 调用延时函数JP LOOPDELAY_1S:; 16MHz时钟下约1秒延时LDIA 0FFHLD R10,A
DELAY_LOOP:DECR R10SNZB STATUS,ZJP DELAY_LOOPRET

9.中断:

c语言:

void int_isr(void) __interrupt
{__asm movra _abuf   swapar _STATUSmovra _statusbuf__endasm;if((INTIF)&&(INTIE)){P12D=!P12D;INTIF=0;}__asm swapar _statusbufmovra _STATUSswapr _abufswapar _abuf__endasm;
}

汇编:

INT_ISR:movra   abufswapar  STATUSmovra   statusbufJBSET  	INTIFGOTO   	INT_ENDJBSET  	INTIEGOTO   	INT_ENDMOVAI  	00000100BXORRA  	P1 	   	   	   	   	;P12 翻转BCLR   	INTIF
INT_END:swapar  statusbufmovra   STATUSswapr   abufswapar  abufEND_OF_INTERRUPTRETIE  	

 汇编指令的用法看数据手册,可以进行对比,有什么错误大家也可以指正~

 

 

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com