你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

查看: 6104|回复: 6

在C语言中嵌入汇编,并让汇编代码对齐

[复制链接]

1

主题

6

回帖

0

蝴蝶豆

新手上路

最后登录
1970-1-1
发表于 2012-4-9 12:44:50 | 显示全部楼层 |阅读模式
  1600KHZ.png
我尝试过在 INFI_LOOP_1600KHZ 标号的后面加上 .l 让它4字节对齐,但编译时,提示出错。
如果不对齐的话,出来的波形不正确。
回复

使用道具 举报

1

主题

6

回帖

0

蝴蝶豆

新手上路

最后登录
1970-1-1
 楼主| 发表于 2012-4-9 12:45:53 | 显示全部楼层

RE:在C语言中嵌入汇编,并让汇编代码对齐

就是让 INFI_LOOP_1600KHZ 这个标号 4 字节对齐。
回复 支持 反对

使用道具 举报

42

主题

101

回帖

0

蝴蝶豆

高级会员

最后登录
1970-1-1
发表于 2012-4-9 13:53:21 | 显示全部楼层

RE:在C语言中嵌入汇编,并让汇编代码对齐

关注中,本人也在学习开发中。谢谢,等待高人
回复 支持 反对

使用道具 举报

134

主题

4489

回帖

239

蝴蝶豆

版主

最后登录
2020-12-9
发表于 2012-4-9 15:29:06 | 显示全部楼层

RE:在C语言中嵌入汇编,并让汇编代码对齐

1、4字节对齐是指?
2、错误信息贴出来。
回复 支持 反对

使用道具 举报

1

主题

6

回帖

0

蝴蝶豆

新手上路

最后登录
1970-1-1
 楼主| 发表于 2012-4-9 16:27:29 | 显示全部楼层

RE:在C语言中嵌入汇编,并让汇编代码对齐

4字节对齐,就是让汇编代码的第一条指令
    LD   A, $500F
放在以 XXX0H、XXX4H、XXX8H、XXXCH 开始的地方。
如果不那样做,发现程序执行起来,慢了,多花了一个 clk 的时间,照成无法准确输出 1.6 MHz 的方波信号。
而如果,地址对齐,就和预想的一样。
我曾在前面加上 NOP 空指令来填补,让代码的第一条指令4字节对齐,但修改代码后,并不总是管用,似乎有时候需要 NOP,而有时候不需要。
有没有一种方法,强制的将字节的代码4字节对齐,让编译器来做填补的工作。
回复 支持 反对

使用道具 举报

1

主题

6

回帖

0

蝴蝶豆

新手上路

最后登录
1970-1-1
 楼主| 发表于 2012-4-9 16:38:06 | 显示全部楼层

RE:在C语言中嵌入汇编,并让汇编代码对齐

图片中的死循环用来产生 1.6 MHz 的波形。
本来 5 clks 就能执行完一次循环,如果开始地址不 4 字节对齐,就会花 6 clks 才能执行完。
是预取指令的原因,还是编译器偷偷的加了什么指令?
反正地址对齐,问题就没有了。
回复 支持 反对

使用道具 举报

134

主题

4489

回帖

239

蝴蝶豆

版主

最后登录
2020-12-9
发表于 2012-4-10 17:18:21 | 显示全部楼层

RE:在C语言中嵌入汇编,并让汇编代码对齐

这个就需要你去看每条指令占用的字节了,比如MOV占用1个字节,而ADDC占用2个字节。
回复 支持 反对

使用道具 举报

关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版