问:我用C51编程调用汇编程序文件,程序很简单,C语言与汇编语言程序都只有几行(读、写1820),但是在C调用完汇编程序之后,不返回到调用处,而是返回到C语言的第一句处。运行了其它几个程序都是这个样,在MedWin和Keil下都试过,不知何故?
答:C语言和汇编语言混合编程要严格按照规则,汇编代码不能随意编制,它们有规范的接口。具体方法可以先设计包含哑函数的C模块,即把RDS1820( )用一个空函数来代替。
#include
#include
#include
//extern WDS1820(void);
RDS1820(void)
{
}
void main(void){
int i;
i++;
// WDS1820();
i++;
RDS1820();
i++;
i++;
}
然后使用Debug和Code选项进行编译,从产生的列表文件中看具体的程序框架,注意函数名的符号变化,依据框架编制相应的汇编代码。具体方法参见本刊2001年第6期嵌入式C编程技术(六)或《单片机与嵌入式系统应用》合订本2001(1-6),全国各大书店有售。
问:符合IEEE-754标准的单精度浮点数在C51中是怎么表示的?
答:符合IEEE-754标准的单精度浮点数在C51中占用4个字节(32位二进制数),在内存中的存放格式如下:
字节地址 +0 +1 +2 +3
浮点数内容 SEEEEEEE EMMMMMMM MMMMMMMM MMMMMMMM
其中,S为符号位,E为阶码,占用8位二进制数。阶码E是以2为底的指数再加上偏移量127,M为尾数的小数部分,用23位二进制数表示。例如:
124.75=0x42F98000H
124.75=111 1100.11B
阶码E=127+6=10000101;
1.M=1.11110011B;
M=11110011B
所以:
0100 0010 1111 1001 1000 0000 0000 0000 4 2 F 9 8 0 0 0