gpt4 book ai didi

c - 为什么编译器把C程序汇编成这个?

转载 作者:行者123 更新时间:2023-12-02 06:27:55 25 4
gpt4 key购买 nike

我不明白为什么 C51 编译器(在 Keil 中)将 C 源代码转换为此汇编语言代码:(因为 p 是指向 unsigned char 的指针)

;   p++;
; SOURCE LINE # 216
MOV R3,pDisplay?253
INC pDisplay?253+02H
MOV A,pDisplay?253+02H
MOV R2,pDisplay?253+01H
JNZ ?C0090
INC pDisplay?253+01H

因为 R3R2 没有在程序的下一行中使用。
为什么编译器要生成这些行
MOV R3,pDisplay?253,
MOV R2,pDisplay?253+01H

最佳答案

欢迎使用 1980 年代“最先进”的 8 位目标处理器代码生成。代码所做的是在递增 p 之前“记录其值”。当在周围表达式中使用后增量运算符时,这是必需的;并且没有被编译器的后续传递优化掉。

试试 p += 1;,甚至 ++p;。很可能其中一个或两个会生成更好的代码,因为没有“注意之前的值”语义来妨碍代码生成器。

[这就是我进入少数的方式,顺便说一句,在for ()循环中使用++i而不是更常见的i++.]

关于c - 为什么编译器把C程序汇编成这个?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51048926/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com