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

C调用汇编时出现警告,这是为什么?

C调用汇编时出现警告,这是为什么?

我用CW5.1,我要在C中调用汇编子程序,如汇编子程序是这样的:

; export symbols
XDEF asm_main

; Include derivative-specific definitions
INCLUDE 'derivative.inc'

; variable/data section




MY_ZEROPAGE: SECTION SHORT
XDEF keyst;
; Insert here your data definition. For demonstration, temp_byte is used.
keyst: DS.B 1


; code section
MyCode: SECTION
; this assembly routine is called the C/C++ application
asm_main:
MOV #1,temp_byte ; just some demonstration code
NOP ; Insert here your own code

Bset 0,keyst

RTS ; return to caller

当我编译时变量keyst就会出现 Value is truncated to one byte 这个警告,这是为什么?

我想可能是在C中我的数据指针是16位的,而BSET操作是8位的所以出现这个现象,

我想问的是这样会不会把我原来在调用汇编之前的数据指针覆盖掉,导致以后的程序出错?

我百思不得其解, 这个正常吗?难道C调用汇编的变量都会出现这样的警告?怎样解决,请高手指点

[em06][em06][em06]

[此贴子已经被作者于2008-8-27 22:10:51编辑过]

keyst本来就是一个地址,Bset 0, keyst指令也是对地址的操作。这条指令对keyset的地址本身不会有任何影响。
海纳百川  有容乃大

呵呵,谢谢斑竹.但还想请教:

keyst本来就是一个地址,是不是可以这样理解:若keyst的地址是$48,则执行Bset 0, keyst后,地址为$48的RAM的第0位置1.

我试过了,若keyst定义在第0叶,则对结果不产生影响,若在非0叶,则会产生错误的结果.

若keyst我不申明为可在外部模块访问,即不要XDEF keyst;,则编译时不提示警告.若keyst申明为可在外部模块访问,则警告.

C调用汇编的变量就必须用XDEF声明,我想知道的是我门怎么去掉这个警告?你门在调用汇编时是怎么处理这个问题的?


[此贴子已经被作者于2008-8-28 19:55:55编辑过]

BSET指令只能对零页地址进行操作(它只有直接访问模式)。
海纳百川  有容乃大
返回列表