首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

哪位大侠帮帮我?MCS08AW16强制类型转换的问题

哪位大侠帮帮我?MCS08AW16强制类型转换的问题

I_ad = ( int16_t )( ATD_Value[0] - ATD_Value[1] );
I_ad是有signed Int,有符号16位
ATD_Value[x]是unsigned char,无符号8位
typedef  signed int
int16_t;

ATD_Value[0] - ATD_Value[1]的差值为0或-1,BDM观察强制转换的过程中0用-256表示,
-1用255表示,是代码的问题?还是编译器优化的问题?
附Codewarrior反汇编出的代码
LDA   ATD_Value:1
PSHA  
LDA   ATD_Value
TSX   
SUB   ,X
STA   ,X
CLRA  
SBC   #0
PSHA  
PULH  
PULX  
STHX  I_ad

求高手解答,不胜感激!
本帖最后由 fayefayehoo 于 2009-11-11 16:42 编辑

试试这样写
I_ad = (int16_t)ATD_Value[0] - (int16_t)ATD_Value[1];
试了,谢谢您!问题还是一样的
返回列表