我用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调用汇编的变量都会出现这样的警告?怎样解决,请高手指点
[此贴子已经被作者于2008-8-27 22:10:51编辑过]
呵呵,谢谢斑竹.但还想请教:
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编辑过]
欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/) | Powered by Discuz! 7.0.0 |