Board logo

标题: C调用汇编时出现警告,这是为什么? [打印本页]

作者: suzhejun    时间: 2008-8-25 21:21     标题: 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编辑过]


作者: strongchen    时间: 2008-8-28 16:09

keyst本来就是一个地址,Bset 0, keyst指令也是对地址的操作。这条指令对keyset的地址本身不会有任何影响。
作者: suzhejun    时间: 2008-8-28 19:54

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

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编辑过]


作者: strongchen    时间: 2008-8-29 15:31

BSET指令只能对零页地址进行操作(它只有直接访问模式)。




欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/) Powered by Discuz! 7.0.0