300字范文,内容丰富有趣,生活中的好帮手!
300字范文 > c语言keil代码大全 Keil中C语言汇编代码比较

c语言keil代码大全 Keil中C语言汇编代码比较

时间:2023-11-05 03:35:13

相关推荐

c语言keil代码大全 Keil中C语言汇编代码比较

完成相同的工作,汇编代码也不一样,当然效率也不一样,下面是几段完成相同功能,但C语言表达方式不一样,使得汇编的代码也不一样,从中可以总结用Keil C51编写高效C代码的经验。

1。 代码段比较1

代码1(高效):

538: if (currPrintingByte < 9 && currPrintingByte > 0){

C:0x06EC E53A MOV A,currPrintingByte(0x3A)

C:0x06EE C3 CLR C

C:0x06EF 9409 SUBB A,#0x09

C:0x06F1 4003 JC C:06F6

C:0x06F3 0204FE LJMP C:04FE

C:0x06F6 E53A MOV A,currPrintingByte(0x3A)

C:0x06F8 9400 SUBB A,#CmdBuff(0x00)

C:0x06FA 5003 JNC C:06FF

C:0x06FC 0204FE LJMP C:04FE

539: Pmr_HoriZoomIn = currPrintingByte;

C:0x06FF 853A2B MOV Pmr_HoriZoomIn(0x2B),currPrintingByte(0x3A)

540: ComputeDotLimit();

541: }

542: #endif

543: break;

C:0x0702 020790 LJMP C:0790

代码2:

533: if (currPrintingByte <= 8 && currPrintingByte >= 1){

C:0x06EC E53A MOV A,currPrintingByte(0x3A)

C:0x06EE D3 SETB C

C:0x06EF 9408 SUBB A,#0x08

C:0x06F1 4003 JC C:06F6

C:0x06F3 0204FE LJMP C:04FE

C:0x06F6 E53A MOV A,currPrintingByte(0x3A)

C:0x06F8 C3 CLR C

C:0x06F9 9401 SUBB A,#0x01

C:0x06FB 5003 JNC C:0700

C:0x06FD 0204FE LJMP C:04FE

534: Pmr_HoriZoomIn = currPrintingByte;

C:0x0700 853A2B MOV Pmr_HoriZoomIn(0x2B),currPrintingByte(0x3A)

535: ComputeDotLimit();

536: }

543: break;

C:0x0703 020791 LJMP C:0791

由以上代码比较可知,用简单的比较表达式>,==,=, <=汇编的代码效率要高。

2、代码段比较2 代码段1(高效): 22: for( b = 0; b<8; b++){ 23: // if( ((1< C:0x1EDC FD MOV R5,A 24: if( ((i>>b) & 0x01)){ C:0x1EDD EF MOV A,R7 C:0x1EDE A805 MOV R0,0x05 C:0x1EE0 08 INC R0 C:0x1EE1 8002 SJMP C:1EE5 C:0x1EE3 C3 CLR C C:0x1EE4 13 RRC A C:0x1EE5 D8FC DJNZ R0,C:1EE3 C:0x1EE7 30E001 JNB 0xE0.0,C:1EEB 25: tmpCnt++; C:0x1EEA 0E INC R6 26: } 27: } C:0x1EEB 0D INC R5 C:0x1EEC BD08EE CJNE R5,#0x08,C:1EDD 代码段2: 22: for( b = 0; b<8; b++){ 23: #if 1 C:0x1EB3 FC MOV R4,A 24: if( ((1< 25: #else 26: if( ((i>>b) & 0x01)){ 27: #endif C:0x1EB4 7401 MOV A,#0x01 C:0x1EB6 7E00 MOV R6,#CmdBuff(0x00) C:0x1EB8 A804 MOV R0,0x04 C:0x1EBA 08 INC R0 C:0x1EBB 8005 SJMP C:1EC2 C:0x1EBD C3 CLR C C:0x1EBE 33 RLC A C:0x1EBF CE XCH A,R6 C:0x1EC0 33 RLC A C:0x1EC1 CE XCH A,R6 C:0x1EC2 D8F9 DJNZ R0,C:1EBD C:0x1EC4 FF MOV R7,A C:0x1EC5 ED MOV A,R5 C:0x1EC6 FB MOV R3,A C:0x1EC7 EF MOV A,R7 C:0x1EC8 5B ANL A,R3 C:0x1EC9 6001 JZ C:1ECC 28: tmpCnt++; C:0x1ECB 09 INC R1 29: } 30: } C:0x1ECC 0C INC R4 C:0x1ECD BC08E4 CJNE R4,#0x08,C:1EB4 由以上代码,代码段1显示比代码段2效率要高得多,短短的一行C代码表达式不同,编译生成的机器码就相差10个字节,原因在于代码段2中需要每次都要把0x01置入累加器A,并且在进行与操作时用的是逻辑与指令,而代码段1就可以很巧妙地使用可位寻址的内存,只通过一条JNB指令完成,代码量小而且运行速度快,充分体现的KEIL的C语言编译器很强的优化功能。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。